zyzx的小窝

C/C++,GUI,个人移动存储,zyzx_lsl@163.com

 

wxWidgets界面设计工具DialogBlocks

// * create by zyzx
// * 2009-3-12
// * 转载请注明来源:http://www.cppblog.com/zyzx

          工欲善其事,必先利其器。在MFC上开发,有VS系列强大的可视化工具,基于wx的开发工具虽然没有VSQT的界面设计器强大,但在灵活度上VS的界面设计器是没法比的(QT的没有用过,不做评论)。
         如果选择了wx库,了解几款基于其上的界面设计工具,会大大提高开发效率。

一、wx界面设计工具简介

         官方建议的工具集合:http://wiki.wxwidgets.org/Tools

         在刚开始的时候,我也尝试过几款工具(wxFormBuilderwxDev-C++wxDesigner等),但后来还是选择了DialogBlocks-4.18。对于这些工具的选择,各有特色。选择DialogBlocks,主要是因为其灵活度很大,当然缺点就是需要手工写代码来结合工具使用。但这点对于熟悉wx以后就不再是缺点,而是她最大的优点。

二、DialogBlocks简介

         DialogBlocks官方主页:http://www.anthemion.co.uk/dialogblocks/

三、DialogBlocks入门向导

         安装完成后,DialogBlocks有几个实例工程可以供大家参考。

    1、新建HelloWorld工程

          关闭这些后点击File->New Project进入工程向导。

          点击Next进入下一个选择页面

         Mode中有3个选项:
         Generate for C++:表示工具并不生成*.xrcxml格式文件)配置文件,直接将窗口的一些信息(比如样式、大小、是否可见等等)直接写在源代码中,用相应的标记区别,由工具来维护此段代码区域。如果手工破坏了标记信息,工具将无法识别。
         Generate C++ for XRC:表示工具将窗口信息()写入相应的*.xrc配置文件中,代码块中只写加载这些配置的代码。这种方式十分适合,界面大小不一致,需灵活配置界面。代码块的事件关联每一个窗口控件唯一的ID
         Generate XRC only:表示不生成源代码,只生成*.xrc配置文件。更灵活的将代码和界面设计的配置文件分开。代码块只需要通过窗口控件ID来控制其行为。

         后面一路next,默认选项即可。
         保存工程得到HelloWorld\HelloWorld.pjd文件,以后只要从此文件打开即可。

    2、新建主wxFramewxDialog

    3、添加其他控件

             修改启动的主FrameMain window选项修改为HelloWorld FrameID编号。

   3、添加其他控件

            比如菜单、工具条、状态条、窗口里面的控件元素等等。

            注意窗口元素不是随意添加的,必须先搞清楚wx的窗口元素之间的关系。比如:wxFrame/wxDialog直接包容wxMenuBarwxToolBarwxStatusBar,而wxTextCtrlwxComboBoxwxStaticText等等最好建立在wxBoxSizer之内。
            wxBoxSizerwx的特色之一,它可以对其包含的控件进行自动调整。当然需要设定其自动调整属性。以上均使用默认的属性。


  
    四、HelloWorldVS工程配置

            完成以上部分就说明最基本的界面框架已经做好了。我们还需要新建基于Win32的空HelloWorld工程,将DialogBlocks生成的*.h *.cpp文件添加HelloWorld工程中去。

            按照上一篇关于Win32部分的配置来设置本工程。

            编译运行(别忘了把wx库的*.dll文件)结果会报出wxWidgets Assert忽略即可,原因是上面建立的wxToolBar\Tool没有找到对应的图标,把图标添加进去并设定wx资源加载路径即可。

   
    五、
绑定控件事件控制

             在DialogBlock中选中wxButtonID_BUTTON1切换右边视图到Event handlers,点选BUTTON_CLICK事件,并保存。绑定事件有两种方式,DialogBlocks采用的是静态绑定的方式,还一种是采用动态绑定事件。

           
           再找到
HelloWorld类,并添加头文件#include <wx/msgdlg.h>
           void HelloWorld::OnButton1Click( wxCommandEvent& event )
            {
                      wxMessageBox(wxT("Hello World\r\n单击了Button1Click!")); 
            }

           即可得到如下效果:


         工程文件下载

posted on 2009-03-12 16:23 zyzx 阅读(24631) 评论(14)  编辑 收藏 引用 所属分类: wxWidgets界面库

评论

# re: wxWidgets界面设计工具DialogBlocks 2009-03-13 09:35 mycode

偶也是一直使用这个工具。作者介绍得很详细啊,辛苦喽。
大力提倡使用wxWidgets作为C++界面开发的首先啊。有跨平台、有本地化、有运行效率,比MS最新的Ribbon版本的MFC要快得多啊。
欢迎交流。  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2009-03-13 13:28 zyzx

好的。
接下来,我会继续从入门开始如何使用wx编写程序,收集网上关于wx的相关资料。当然,我的个人认识难免会有差错,特别是关于术语部分,大家的认知可能不一致,还请大家交流指正。
邮箱:zyzx_1984@163.com  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2009-03-13 17:33 Answer

goood~~~ 期待中...  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2009-03-15 15:56 梦在天涯

好!  回复  更多评论   

# re: wxWidgets界面設計工具DialogBlocks 2009-03-16 10:29 visual

寫的真棒ㄚ  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2009-03-17 00:30 coast

你在哪里搞的DialogBlocks?要钱的啊。  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2009-03-19 02:26 maninthewind

@coast
没有用过dialogBlocks,看了介绍感觉没有codeblocks 的功能多.
codeblocks 开源,免费,而且更新速度快,有一个很活跃的社区,其中nightly build更新很快,大家有兴趣可以尝试codeblocks + wxwidget,具体介绍网上很多.  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks[未登录] 2009-05-24 21:46 alex

codeblocks很不错,也有界面开发.  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2009-08-11 16:50 keminar

code::blocks 不错。

但前些天在网上找到一本 “cross-platform gui programming with wxwidgets " 里面的例子是用的DialogBlocks所以找到这里来了。先下来用用,不过收费的,不是很爽。

如果可以的话,大家可以一起研究code::blocks 教程  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2009-10-27 10:46 zh

正在链接...
LINK : error LNK2001: 无法解析的外部符号 _无
helloworld.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall wxString::wxString(char const *)" (__imp_??0wxString@@QAE@PBD@Z) ,该符号在函数 "public: bool __thiscall HelloWorld::Create(class wxWindow *,int,class wxString const &,class wxPoint const &,class wxSize const &,long)" (?Create@HelloWorld@@QAE_NPAVwxWindow@@HABVwxString@@ABVwxPoint@@ABVwxSize@@J@Z) 中被引用
helloworld.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) char const * const wxFrameNameStr" (__imp_?wxFrameNameStr@@3QBDB)
helloworld.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall wxClassInfo::wxClassInfo(char const *,class wxClassInfo const *,class wxClassInfo const *,int,class wxObject * (__cdecl*)(void))" (__imp_??0wxClassInfo@@QAE@PBDPBV0@1HP6APAVwxObject@@XZ@Z) ,该符号在函数 _$E1 中被引用
helloworldapp.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall wxClassInfo::wxClassInfo(char const *,class wxClassInfo const *,class wxClassInfo const *,int,class wxObject * (__cdecl*)(void))" (__imp_??0wxClassInfo@@QAE@PBDPBV0@1HP6APAVwxObject@@XZ@Z)
helloworldapp.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall wxAppConsole::OnAssert(char const *,int,char const *,char const *)" (?OnAssert@wxAppConsole@@UAEXPBDH00@Z)
helloworldapp.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall wxAppConsole::OnAssertFailure(char const *,int,char const *,char const *,char const *)" (?OnAssertFailure@wxAppConsole@@UAEXPBDH000@Z)
helloworldapp.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall wxApp::Initialize(int &,char * *)" (?Initialize@wxApp@@UAE_NAAHPAPAD@Z)
Debug/HelloWorld.exe : fatal error LNK1120: 7 个无法解析的外部命令

生成日志保存在“file://f:\HelloWorld\HelloWorld\Debug\BuildLog.htm”中
HelloWorld - 9 错误,0 警告


---------------------- 完成 ---------------------

生成: 0 已成功, 1 已失败, 0 已跳过


还的请教一下,已经把WXUSINGDLL添加上了,结果还是出现上面的问题,不知道上面的错误是那个库中的,还有一点我的是在Debug下调试的,不知道有没有影响,还请帮忙解决,谢谢啦!  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2009-12-04 09:55 baoyibao

你好,示例很实用,不过,有个问题是为什么我在CodeBlocks中修改Button响应事件的时候总是无法成功呢?就是你修改了HelloWorld.cpp之后,点击保存,它就自动恢复原先未修改前的样子了。  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2010-11-04 15:20 秦智

您好,我用db描画一个对话框,工程师选择只创建xrc文件。是想在对话框贴上一个背景图,按db操作方法,需要在Texture选择这个资源图片,然后添加一个handlers:wxEvt_Paint,为什么用Test with XRC显示的时候,背景图片不显示呢?

这个与绑定事件有关系吗?

我另做了个测试,用生成c++代码这个,然后用vs编译,运行,就可以显示背景图。

这样看来是不是要显示背景的时候,必须创建c++类型的。是因为事件用代码描画出来?

谢谢  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2011-01-21 11:29 莫铭

codeBlocks是个编译器了。。。庞大。。  回复  更多评论   

# re: wxWidgets界面设计工具DialogBlocks 2011-08-15 15:06 任正军

我也是同样的问题,求解决方案,谢谢!398660551@qq.com @baoyibao
  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

常用链接

搜索

最新评论

阅读排行榜

评论排行榜