前言
DuiLib中的某些控件不能很好的區(qū)分鼠標(biāo)左擊、右擊和雙擊等操作,如樹(shù)控件,但實(shí)際應(yīng)用中又需要。對(duì)于這樣的情況,我們可以通過(guò)修改界面庫(kù)源碼來(lái)擴(kuò)展控件的功能。
原因分析
以樹(shù)控件為例來(lái)說(shuō)明。樹(shù)控件之所以不支持鼠標(biāo)右擊,是因?yàn)镈uiLib對(duì)樹(shù)控件的鼠標(biāo)左擊事件和右擊事件都發(fā)送了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;
}
消息擴(kuò)展
以擴(kuò)展樹(shù)控件的鼠標(biāo)右擊來(lái)說(shuō)明。
- 消息定義
在UIDefine.h文件中添加自定義消息。#define DUI_MSGTYPE_ITEMRCLICK (_T("itemrclick")) - 消息傳遞
修改UIList.cpp文件中的CListContainerElementUI::DoEvent函數(shù),讓鼠標(biāo)左擊事件和右擊事件發(fā)送不同的消息。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; } - 消息處理
在使用樹(shù)控件的類的Notify函數(shù)中處理消息。if (msg.sType == DUI_MSGTYPE_ITEMRCLICK) { // 其他操作 }