美文网首页
DuiLib扩展

DuiLib扩展

作者: ORCLee | 来源:发表于2017-10-24 11:28 被阅读0次

前言

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)
    {
        // 其他操作
    }
    

相关文章

网友评论

      本文标题:DuiLib扩展

      本文链接:https://www.haomeiwen.com/subject/ladtpxtx.html