zoukankan      html  css  js  c++  java
  • duilib学习笔记03:Duilib中的事件响应的两种方式

    Duilib中的事件响应有两种方式:


    ★:在事件处理类(一般使用窗口类)中实现INotifyUI接口,然后在Notify函数中处理事件,这种方式比较简单常用。

    class CLoginFrameWnd : public CWindowWnd, public INotifyUI
    {
        public:
            // ……
            void Notify(TNotifyUI& msg)
            {
                if( msg.sType == _T("click") )
                {
                    if( msg.pSender->GetName() == _T("closebtn") )
                    {
                        PostQuitMessage(0); return;
                    }
                    else if( msg.pSender->GetName() == _T("loginBtn") )
                    {
                        Close();
                        return;
                    }
                }
                else if( msg.sType == _T("itemselect") )
                {
                    if( msg.pSender->GetName() == _T("accountcombo") )
                    {
                        CEditUI* pAccountEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("accountedit")));
                        if( pAccountEdit )
                        {
                            pAccountEdit->SetText(msg.pSender->GetText());
                        }
                    }
                }
            }
    }

    --------------------------------------------------------------------------------

    ★:使用代理机制处理事件

    class CLoginFrameWnd : public CWindowWnd, public INotifyUI
    {
        public:
            // ……
            bool OnAlphaChanged(void* param) {
                TNotifyUI* pMsg = (TNotifyUI*)param;
                if( pMsg->sType == _T("valuechanged") )
                {
                    m_pm.SetTransparent((static_cast<CSliderUI*>(pMsg->pSender))->GetValue());
                }
    
                return true;
            }
    
            // 需要在控件创建完成之后调用.
            void OnPrepare() 
            {
                CSliderUI* pSilder = static_cast<CSliderUI*>(m_pm.FindControl(_T("alpha_controlor")));
                if( pSilder )
                {
                    pSilder->OnNotify += MakeDelegate(this, &CFrameWindowWnd::OnAlphaChanged);
                }
            }
    }

    --------------------------------------------------------------------------------

  • 相关阅读:
    索引yellow 分片 UNASSIGNED 解决方案1
    Linux zip压缩多文件
    查询数据库实例名,服务名,和oracle_sid
    excel2csv 多sheet拆分到不同csv
    创建按月自动分区表
    自动生成sequence
    oracle 11g 分区表创建(自动按年、月、日分区)
    linux 查找字符串
    Oracle 字符串截取和位置
    mongodb查询某个字段数据
  • 原文地址:https://www.cnblogs.com/xuejianhui/p/2782884.html
Copyright © 2011-2022 走看看