前言
DuiLib中的某些控件不能很好的区分鼠标左击、右击和双击等操作,如树控件,但实际应用中又需要。对于这样的情况,我们可以通过修改界面库源码来扩展控件的功能。
原因分析
以树控件为例来说明。树控件之所以不支持鼠标右击,是因为DuiLib对树控件的鼠标左击事件和右击事件都发送了DUI_MSG_ITEMCLICK消息。具体可以查看UIList.cpp文件中CListContainerElementUI::DoEvent部分的代码。
if( event.Type == UIEVENT_BUTTONDOWN || event.Type == UIEVENT_RBUTTONDOWN )
{
if( IsEnabled() ){
m_pManager->SendNotify(this, DUI_MSGTYPE_ITEMCLICK);
Select();
Invalidate();
}
return;
}
消息扩展
以扩展树控件的鼠标右击来说明。
- 消息定义
在UIDefine.h文件中添加自定义消息。#define DUI_MSGTYPE_ITEMRCLICK (_T("itemrclick"))
- 消息传递
修改UIList.cpp文件中的CListContainerElementUI::DoEvent函数,让鼠标左击事件和右击事件发送不同的消息。if( event.Type == UIEVENT_BUTTONDOWN ) { if( IsEnabled() ) { m_pManager->SendNotify(this, DUI_MSGTYPE_ITEMCLICK); Select(); Invalidate(); } return; } if ( event.Type == UIEVENT_RBUTTONDOWN ) { if ( IsEnabled()) { m_pManager->SendNotify(this, DUI_MSGTYPE_ITEMRCLICK); Select(); Invalidate(); } return; }
- 消息处理
在使用树控件的类的Notify函数中处理消息。if (msg.sType == DUI_MSGTYPE_ITEMRCLICK) { // 其他操作 }
网友评论