DuiLib擴(kuò)展

前言

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)
    {
        // 其他操作
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容