MFC中混合使用Duilib制作界面
2015-04-17 17:41
405 查看
因为公司项目最近入了MFC的这个大坑,用MFC做UI做了一段时间,感觉不是很方便,开发效率有点慢。
看了c++里面做界面的类库,感觉Duilib比较符合做界面的需求,而且很多大公司也在使用Duilib,那就随一下大流,并在此表达对Duilib作者及广大的开源作者的敬意。
Duilib支持win32程序及MFC程序。
步骤如下:
下面都是VS2008的环境操作。在VC++ 选项->项目与解决方案-> VC++目录
引入Duilib的
包含文件
库文件
源文件
设置系统的环境变量
不设置环境变量的话,也可以直接把DuiLib_ud.dll及DuiLib_d.dll复制到应用程序的生成目录。否则会报缺少相关dll的错误。
注意:如果将生成的程序拿到其他机器上运行,一定要复制DuiLib的相关Dll到应用程序的根目录。
如下所示:
在自己定义的类的头文件中加上
及
源文件可以如下定义:
源文件可以如下定义:
可以在这个函数中对Duilib进行初始化
源文件可以如下定义:
在主窗体的这个类中加一个刚才增加的类对象 m_dlgDuilib(对象名随意)
通过下面代码创建
可以设置打开的窗体样式为
Demo下载地址
看了c++里面做界面的类库,感觉Duilib比较符合做界面的需求,而且很多大公司也在使用Duilib,那就随一下大流,并在此表达对Duilib作者及广大的开源作者的敬意。
Duilib支持win32程序及MFC程序。
步骤如下:
设置Duilib环境
可以去https://github.com/duilib/duilib下载框架,将Duilib框架在UnicodeDebug及Debug下编译生成库文件下面都是VS2008的环境操作。在VC++ 选项->项目与解决方案-> VC++目录
引入Duilib的
包含文件
库文件
源文件
设置系统的环境变量
不设置环境变量的话,也可以直接把DuiLib_ud.dll及DuiLib_d.dll复制到应用程序的生成目录。否则会报缺少相关dll的错误。
添加引用及dll
在stdafx.h文件中加入duilib的头文件及库#include <ObjBase.h> #include <UIlib.h> using namespace DuiLib; #ifdef _DEBUG # ifdef _UNICODE # pragma comment(lib, "DuiLib_ud.lib") # else # pragma comment(lib, "DuiLib_d.lib") # endif #else # ifdef _UNICODE # pragma comment(lib, "DuiLib_u.lib") # else # pragma comment(lib, "DuiLib.lib") # endif #endif
注意:如果将生成的程序拿到其他机器上运行,一定要复制DuiLib的相关Dll到应用程序的根目录。
创建对应的类
创建一个C++类,让这个类继承Duilib的CWindowWnd和INotifyUI如下所示:
在自己定义的类的头文件中加上
public: LPCTSTR GetWindowClassName() const; void Notify(TNotifyUI& msg); LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
及
private: CPaintManagerUI m_pm;
GetWindowClassName
GetWindowClassName是设置类的类名称源文件可以如下定义:
LPCTSTR CDuiLib_Dialog::GetWindowClassName() const { return (LPCTSTR)"CTestDlg"; /*自己可以随意取个名字*/ }
Notify
Notify是Duilib中控件的响应函数,比如说某个控件按钮点击之后的处理。源文件可以如下定义:
void CDuiLib_Dialog::Notify(TNotifyUI& msg) { if( msg.sType == _T("click") ) { if( msg.pSender->GetName() == _T("closebtn") ) { Close(); } } }
HandleMessage
HandleMessage是Duilib中对消息循环的消息处理函数。可以在这个函数中对Duilib进行初始化
源文件可以如下定义:
LRESULT CDuiLib_Dialog::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { if( uMsg == WM_CREATE ) { CPaintManagerUI::SetInstance(AfxGetInstanceHandle());//加载XML的时候,需要使用该句柄去定位EXE的路径,才能加载XML的路径 CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath() + _T("skin"));//定位图片等资源的位置 m_pm.Init(m_hWnd); CDialogBuilder builder; CControlUI *pRoot = builder.Create(_T("MainActivity.xml"), (UINT)0, NULL, &m_pm); //加载的XML文件的名称 ASSERT(pRoot && "Failed to parse XML"); m_pm.AttachDialog(pRoot); m_pm.AddNotifier(this); return 0; } else if( uMsg == WM_DESTROY ) { ::PostQuitMessage(0); } LRESULT lRes = 0; if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes; return CWindowWnd::HandleMessage(uMsg, wParam, lParam); }
创建窗体
在主窗体中创建这个Duilib,在主窗体的这个类中加一个刚才增加的类对象 m_dlgDuilib(对象名随意)
通过下面代码创建
if(m_dlgDuilib == NULL) { m_dlgDuilib.Create(this->m_hWnd, NULL, UI_WNDSTYLE_DIALOG & (~( WS_BORDER | WS_CAPTION )) , 0, 0, 0, 800, 600); } m_dlgDuilib.CenterWindow(); m_dlgDuilib.ShowWindow(TRUE);
可以设置打开的窗体样式为
UI_WNDSTYLE_DIALOG & (~(WS_CAPTION | WS_BORDER))
设计布局及样式
Duilib的窗体布局是通过xml来体现的,在Duilib中有一个Dui Designer,可以通过其进行设计。关于Duilib的使用可以查看这篇文章:/article/6185188.htmlDemo下载地址
相关文章推荐
- 使用sencha-touch控件制作布局的平板电脑界面
- 使用skin++进行MFC界面美化范例
- 如何使用AndriodStudio制作音乐播放器音乐列表界面和导入手机音乐资源
- VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
- Unity 3D中ToLua-UGUI使用说明、导入Unity流程、制作登陆界面
- MFC工程,字符集使用多字节,界面就变成WIN95风格的解决办法
- 使用CSS3 制作一个material-design 风格登录界面
- Android——使用GridView制作二维布局界面(行、列分布)
- 用MFC开发一个界面,使用的VS2012,怎么样开发出这样的风格?
- Cocos2d-x 3.0 开发(十五)使用UILayout布局,制作对话界面
- ASP.NET动态网站开发培训-36.互动论坛制作(四、使用层叠样式表(CSS)美化界面)
- MFC动态链接库的制作步骤和使用方法
- MFC 界面部件大小位置自适应 EasySize的使用
- Duilib界面库使用简介
- 使用python制作ArcGIS插件(4)界面交互
- duilib进阶教程 -- 在duilib中使用MFC (2)
- 如何制作带MFC界面的MFC DLL
- duilib作为播放器的ui嵌入到mfc中使用
- duilib进阶教程 -- 在duilib中使用MFC (2)
- LigerUI初学篇---使用LigerUI制作简洁清爽的界面