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); } } }
--------------------------------------------------------------------------------
posted on 2012-11-22 16:32 xuejianhui 阅读(2462) 评论(4) 编辑 收藏 举报