首页 DUILib经典教程(实例)

DUILib经典教程(实例)

举报
开通vip

DUILib经典教程(实例)DUILib经典教程(实例) Duilib入门文档 Duilib经典实例教程 1 基本框架 一个简单的Duilib程序一般是下面这个样子的: // Duilib使用设置部分 #pragma once #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_DEPRECATE #include #include #include "..\DuiLib\UIlib.h" using namespace DuiLib; #ifdef _DEBUG...

DUILib经典教程(实例)
DUILib经典教程(实例) Duilib入门文档 Duilib经典实例教程 1 基本框架 一个简单的Duilib程序一般是下面这个样子的: // Duilib使用设置部分 #pragma once #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_DEPRECATE #include #include #include "..\DuiLib\UIlib.h" using namespace DuiLib; #ifdef _DEBUG # ifdef _UNICODE # pragma comment(lib, "..\\bin\\DuiLib_ud.lib") # else # pragma comment(lib, "..\\bin\\DuiLib_d.lib") # endif #else # ifdef _UNICODE # pragma comment(lib, "..\\bin\\DuiLib_u.lib") # else # pragma comment(lib, "..\\bin\\DuiLib.lib") # endif #endif // 窗口实例及消息响应部分 class CFrameWindowWnd : public CWindowWnd, public INotifyUI { public: CFrameWindowWnd() { }; LPCTSTR GetWindowClassName() const { return _T("UIMainFrame"); }; UINT GetClassStyle() const { return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; }; void OnFinalMessage(HWND /*hWnd*/) { delete this; }; 杭州月牙儿网络 Duilib入门文档 void Notify(TNotifyUI& msg) { if( msg.sType == _T("click") ) { if( msg.pSender->GetName() == _T("closebtn") ) { Close(); } } } LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { if( uMsg == WM_CREATE ) { m_pm.Init(m_hWnd); CControlUI *pButton = new CButtonUI; pButton->SetName(_T("closebtn")); pButton->SetBkColor(0xFFFF0000); m_pm.AttachDialog(pButton); 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); } public: CPaintManagerUI m_pm; }; // 程序入口及Duilib初始化部分 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow) { CPaintManagerUI::SetInstance(hInstance); CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath()); CFrameWindowWnd* pFrame = new CFrameWindowWnd(); if( pFrame == NULL ) return 0; pFrame->Create(NULL, _T("测试"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE); pFrame->ShowWindow(true); CPaintManagerUI::MessageLoop(); 杭州月牙儿网络 Duilib入门文档 return 0; } 可以看出,这个程序分三个部分: , Duilib使用设置部分,这个部分都是一些使用Duilib所需要的头文件和自动链接到相应 的Duilib库,一般来说基本上不用改动。 , 窗口实例及消息响应部分,基本的窗口实现类和简单的消息响应,需要重点关注的是 void Notify(TNotifyUI& msg)中的事件处理,这是Duilib程序最重要的部分。 , 程序入口及Duilib初始化部分,Duilib初始化和窗口创建。 编译这个程序,出现如下效果: 点击红色区域的任意位置,窗口会立即关闭。这样我们就完成了最简单的一个Duilib程序编写,虽然这个例子还不能展现Duilib的强大,但也算是麻雀虽小,肝胆俱全了。 因为很多美观的界面都不使用系统的标题栏和边框这些非客户区绘制,我们也把这掉,修改CFrameWindowWnd:: HandleMessage为: LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { if( uMsg == WM_CREATE ) { m_pm.Init(m_hWnd); CControlUI *pButton = new CButtonUI; pButton->SetName(_T("closebtn")); pButton->SetBkColor(0xFFFF0000); m_pm.AttachDialog(pButton); m_pm.AddNotifier(this); return 0; 杭州月牙儿网络 Duilib入门文档 } else if( uMsg == WM_DESTROY ) { ::PostQuitMessage(0); } else if( uMsg == WM_NCACTIVATE ) { if( !::IsIconic(m_hWnd) ) { return (wParam == 0) ? TRUE : FALSE; } } else if( uMsg == WM_NCCALCSIZE ) { return 0; } else if( uMsg == WM_NCPAINT ) { return 0; } LRESULT lRes = 0; if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes; return CWindowWnd::HandleMessage(uMsg, wParam, lParam); } 编译运行,我们得到如下效果: 2 编写界面xml 为了使用xml进行界面布局,需要把前面的Duilib程序框架中的HandleMessage稍 微改动一下: LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { if( uMsg == WM_CREATE ) { 杭州月牙儿网络 Duilib入门文档 m_pm.Init(m_hWnd); CDialogBuilder builder; CControlUI* pRoot = builder.Create(_T("test1.xml"), (UINT)0, NULL, &m_pm); ASSERT(pRoot && "Failed to parse XML"); m_pm.AttachDialog(pRoot); m_pm.AddNotifier(this); return 0; } else if( uMsg == WM_DESTROY ) { ::PostQuitMessage(0); } else if( uMsg == WM_NCACTIVATE ) { if( !::IsIconic(m_hWnd) ) { return (wParam == 0) ? TRUE : FALSE; } } else if( uMsg == WM_NCCALCSIZE ) { return 0; } else if( uMsg == WM_NCPAINT ) { return 0; } LRESULT lRes = 0; if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes; return CWindowWnd::HandleMessage(uMsg, wParam, lParam); } 灰色部分表示改动的部分。 然后我们来编写一个简单的xml:
本文档为【DUILib经典教程(实例)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_598835
暂无简介~
格式:doc
大小:148KB
软件:Word
页数:20
分类:生活休闲
上传时间:2017-09-27
浏览量:45