Duilib 入门

要使用duilib库,必须把库导入,代码如下:

1 #include “xxxUIlib.h“//xxx为UIlib.h的路径
2 using namespace Duilib; //Duilib为库自定义的名字空间

4 #ifdef _DEBUG
5 #ifdef _UNICODE
6 #pragma comment(lib, “xxxDuilib_ud.lib”)
7 #else
8 #pragma comment(lib, “xxxDuilib_d.lib”)
9 #endif
10 #else
11 #ifdef _UNICODE
12 #progma comment(lib, “xxxDuilib_u.lib“)
13 #else
14 #progma comment(lib, “xxxDuilib.lib“)
15 #endif

使用duilib库的程序和win32程序一样也是从winmain开始的,在winmain函数中,一般是这样的:

1,CPaintManagerUI::SetInstance(hInstance);   //将程序实例与皮肤绘制管理器挂钩。

2,CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath);     //获取可执行程序的所在路径,指的是.exe文件路径

3,CPaintManagerUI::SetResourceZip(/*路径*/);     //皮肤库支持压缩文件,这里指定压缩文件路径。

4,//new一个类,这个类继承自CWindowWnd类。

5,调用类的Create函数创建窗口,这里会发送WM_CREATE消息,而这个类一般会在HanderMessage函数中处理WM_CREATE消息。

6,//创建完窗口后,可以调用该类的SetIcon(IDI_HW)函数来设置任务栏上显示的图标。

7,然后调用CPaintManagerUI::MessageLoop(),进入消息循环。

在duilib中每个窗口均要定义一个CPaintManagerUI成员对象用来管理整个窗口的绘制。

duilib中的窗口均继承自CWindowWnd类,在CWindowWnd类中有虚函数HandleMessage来处理Windows消息(如WM_CREATE,WM_SIZE等)。另外,如果你的窗口想要响应鼠标的点击、编辑框内容改变等消息的话,可以把你的窗口类继承INotify接口,这样你的窗口上的一个按钮被点击了,可以在继承自INNotify(事件通知抽象类)接口的Notify函数中进行处理。

在自己定义的窗口类中一般这样来处理HandleMessage:

1 LRESULT CHelloWorld::HandleMessage( UINT uMsg, WPARAM wParam, LPARAM lParam )
2 {
3 LRESULT lRes = 0;//返回值
4 BOOL bHandled = TRUE;//是否被处理了
5 switch (uMsg)
6 {
7 case WM_CREATE:
8 lRes = OnCreate(uMsg ,wParam, lParam, bHandled);
9 break;
10 default:     //消息没有被处理
11 bHandled = FALSE; break;
12 }
13 
14 if (bHandled) return lRes;    //处理了,函数就返回,没有处理的话,就调用窗口消息及图形绘制管理器类(CPaintManagerUI)来处理
15 if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes) != 0)//没有处理,这传送给窗口绘制管理器处理,Notify函数将会在这里的m_pm.MessageHandler函数中被调用
16 return lRes;
17 return CWindowWnd::HandleMessage(uMsg, wParam, lParam);//都不处理则有CWindowWnd处理
18 }

INotifyUI(事件通知抽象类)接口的Notify()由CPaintManagerUI::MessageHandler调用,继承INotifyUI接口的类对象会被加入到CPaintManagerUI的m_aNotifiers数组中,而要加入m_aNotifiers数组一般由窗口类自己在OnCreate函数调用CPaintManagerUI的静态方法AddNotifier将自己加入到m_aNotifiers中。


而在自己的窗口类的OnCreate函数中,通常调用m_pm_Init(m_hWnd)来把自己的窗口句柄与窗口绘制管理器挂接在一起,用于向CPaintManagerUI提供窗口句柄及窗口上下文句柄。

1 LRESULT CHelloWorld::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&bHandled)
2 {
3 m_pm.Init(m_hWnd); // 把自己的窗口句柄与窗口绘制管理器挂接在一起
4 CDialogBuilder builder;
5 CControlUI* pRoot = builder.Create(TEXT(“HelloWorld.xml“), (UINT)0, NULL, &m_pm); // 根据xml中的配置创建控件
6 ASSERT(pRoot && “Failure to parse XML“);
7 m_pm.AttachDialog(pRoot); // 把这些控件绘制到本窗口上
8 m_pm.AddNotifier(this); // 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
9 Init();
10 return 0;
11 
12 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值