duilib入门文档

上传人:第*** 文档编号:32684871 上传时间:2018-02-12 格式:DOC 页数:13 大小:201.50KB
返回 下载 相关 举报
duilib入门文档_第1页
第1页 / 共13页
duilib入门文档_第2页
第2页 / 共13页
duilib入门文档_第3页
第3页 / 共13页
duilib入门文档_第4页
第4页 / 共13页
duilib入门文档_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《duilib入门文档》由会员分享,可在线阅读,更多相关《duilib入门文档(13页珍藏版)》请在金锄头文库上搜索。

1、Duilib 入门文档杭州月牙儿网络1 基本框架一个简单的 Duilib 程序一般是下面这个样子的:/ Duilib 使用设置部分#pragma once#define WIN32_LEAN_AND_MEAN#define _CRT_SECURE_NO_DEPRECATE#include #include #include .DuiLibUIlib.husing namespace DuiLib;#ifdef _DEBUG# ifdef _UNICODE# pragma comment(lib, .binDuiLib_ud.lib)# else# pragma comment(lib, .bi

2、nDuiLib_d.lib)# endif#else# ifdef _UNICODE# pragma comment(lib, .binDuiLib_u.lib)# else# pragma comment(lib, .binDuiLib.lib)# endif#endif/ 窗口实例及消息响应部分class CFrameWindowWnd : public CWindowWnd, public INotifyUIpublic:CFrameWindowWnd() ;LPCTSTR GetWindowClassName() const return _T(UIMainFrame); ;UINT

3、GetClassStyle() const return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; ;void OnFinalMessage(HWND /*hWnd*/) delete this; ;void Notify(TNotifyUI& msg)if( msg.sType = _T(click) ) Duilib 入门文档杭州月牙儿网络if( msg.pSender-GetName() = _T(closebtn) ) Close();LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)i

4、f( 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, l

5、Param, 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:SetResource

6、Path(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();return 0;Duilib 入门文档杭州月牙儿网络可以看出,这个程序分三个部分: Duilib 使用设置部分,这个部分都是一些

7、使用 Duilib 所需要的头文件和自动链接到相应的 Duilib 库,一般来说基本上不用改动。 窗口实例及消息响应部分,基本的窗口实现类和简单的消息响应,需要重点关注的是void Notify(TNotifyUI& msg)中的事件处理,这是 Duilib 程序最重要的部分。 程序入口及 Duilib 初始化部分,Duilib 初始化和窗口创建。编译这个程序,出现如下效果:点击红色区域的任意位置,窗口会立即关闭。这样我们就完成了最简单的一个 Duilib程序编写,虽然这个例子还不能展现 Duilib 的强大,但也算是麻雀虽小,肝胆俱全了。因为很多美观的界面都不使用系统的标题栏和边框这些非客户

8、区绘制,我们也把这掉,修改 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);retu

9、rn 0;else if( uMsg = WM_DESTROY ) :PostQuitMessage(0);Duilib 入门文档杭州月牙儿网络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, lP

10、aram, 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 ) m_pm.Init(m_hWnd);CDialogBuilder builder;CControlUI* p

11、Root = builder.Create(_T(test1.xml), (UINT)0, NULL, Duilib 入门文档杭州月牙儿网络ASSERT(pRoot 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_

12、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:把以上 xml 保存为 test1.xml,主要保存格式为 utf-8(不要使用 windows 自带的记事本保存,可以使用 ultraedit、e

13、ditplus 之类具备 xml 编辑能力的编辑器保存) 。然后运行程序,可以看到如下效果:Duilib 入门文档杭州月牙儿网络好像还不是太难看,不过按钮好像看起来不大像按钮,那就给贴个图把,将一下这行加入到 Window 标签下:然后将 button_nor.bmp、button_over.bmp 、button_down.bmp(可在 Duilib 发行包中找到)放到 exe 目录下,运行程序,可以看到:Duilib 入门文档杭州月牙儿网络可以看到按钮的显示已经改变了,我们继续将 Richedit 换个背景,将 Richedit 的背景色改成 bkcolor=#FFF2F5FA bkcol

14、or2=#FFA0A000 bkcolor3=#FFF2F5FA,我们得到下面的结果:继续修改这个 xml,我们通过设置 xml 中控件的属性,可以很简单的实现自由调整界面。3 响应事件Duilib 中的事件响应有两种方式: 在事件处理类(一般使用窗口类)中实现 INotifyUI 接口,然后在 Notify 函数中处理事件,这种方式比较简单常用。示例如下:class CLoginFrameWnd : public CWindowWnd, public INotifyUIpublic:/ void Notify(TNotifyUI& msg)if( msg.sType = _T(click)

15、) if( msg.pSender-GetName() = _T(closebtn) ) PostQuitMessage(0); return; else if( msg.pSender-GetName() = _T(loginBtn) ) Close(); return; else if( msg.sType = _T(itemselect) ) if( msg.pSender-GetName() = _T(accountcombo) ) CEditUI* pAccountEdit = static_cast(m_pm.FindControl(_T(accountedit);Duilib 入门文档杭州月牙儿网络if( pAccountEdit ) pAccountEdit-SetText(msg.pSender-GetText(); 使用代理机制处理事件class CLoginFrameWnd : public CWindowWnd, public INotifyUIpublic:/ bool OnAlphaChanged(void* param) TNotifyUI* pMsg = (TNotifyUI*)param;if(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号