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);
                }
            }
    }

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

  • 相关阅读:
    Mono 开发者会议
    PHP正在死亡?
    区域设置 ID (LCID) 表
    OpenSource 的 Free是自由 非免费
    搭建.net framwork 3.0开发环境的一篇文章
    Rainbow的相关资料
    利用VS2005中的Code Snippets提高开发效率
    判定是否为IPv4
    我的MVVM框架 v3教程——流程相关
    查询json数据结构的8种方式
  • 原文地址:https://www.cnblogs.com/xuejianhui/p/2782884.html
Copyright © 2011-2022 走看看