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

            }

        }

}

 

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

你可能感兴趣的:(学习笔记)