解析duilib 消息处理函数-笔记1

这篇博客详细解析了duilib中消息处理函数的使用,包括XML中定义的控件消息类型,如menu、link、timer等,并介绍了如何通过`UILIB_CONTRL_MSG_HANDLER`宏来处理这些消息。同时,提到了最简洁的消息处理方式是实现`HandleMessage`和`Notify`函数,而不必使用宏,这个方法可以从duilib的源码demo中找到示例。
摘要由CSDN通过智能技术生成
界面消息传递机制, 通过宏定义点击事件处理方法。


来看一下 主要消息的处理宏展开是什么情况 wndProc-----> HandleMessage--->func1....funcn
----->CpaintManagerUI:MessageHandleer 
----->CwindowWnd::HandleMessage:
(1)声明了几个函数参数
LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) \
{ \
LRESULT lResult = 0; \
BOOL bHandled = FALSE; \
(uMsg); \
(wParam); \
(lParam);
(2)是自己感兴趣的消息的时候就使用 func执行处理并返回
#define UILIB_MESSAGE_HANDLER(msg, func) \
if(uMsg == msg) \
{ \
bHandled = TRUE; \
lResult = func(uMsg, wParam, lParam, bHandled); \
if(bHandled) \
return lResult; \
}
(3)使用两级处理 painterManager处理 , 最后执行 CWindWnd默认处理
#define UILIB_END_MSG_MAP() \
if( bHandled ) \
return lResult; \
if( m_pm.MessageHandler(uMsg, wParam, lParam, lResult) ) \
return lResult;\
return DuiLib::CWindowWnd::HandleMessage(uMsg, wParam, lParam);\
}


再来看一下对 CPaintManagerUI::MessageHandler的处理。主要是定义 消息名字对应的消息处理函数。
typedef struct tagTNotifyUI 
{
CDuiString sType;
CDuiString sVirtualWnd;
CControlUI* pSender; // 发送者 的消息名字
DWORD dwTimestamp;
POINT ptMouse;
WPARAM wParam;
LPARAM lParam;
} TNotifyUI;
(1)控件的Notify
#define UILIB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值