前言
在前面有提到:使用Duilib編寫一個界面軟件,本質上還是一個Win32的軟件,只不過這個軟件的界面不使用Windows自帶的控件,而是交給Duilib繪制界面。
關於消息處理,底層還是處理Window消息,但Duilib會進一步轉化成Duilib消息,方便編寫響應的邏輯。
例子
// 界面上顯示一個按鈕 按鈕名字為btn
<Button name="btn" text="按鈕" />
// 點擊按鈕,會激活按鈕控件,然后產生消息:DUI_MSGTYPE_CLICK
bool CButtonUI::Activate()
{
if( !CControlUI::Activate() ) return false;
if( m_pManager != NULL )
m_pManager->SendNotify(this, DUI_MSGTYPE_CLICK);
return true;
}
// 處理消息 重寫INotifyUI::Notify
virtual void Notify(TNotifyUI& msg)
{
// 處理Duilib點擊消息 DUI_MSGTYPE_CLICK
if (msg.sType == DUI_MSGTYPE_CLICK)
{
// 判斷是否是btn按鈕
if (msg.pSender->GetName() == _T("btn"))
{
::MessageBox(NULL, _T("按鈕內容"), _T("按鈕標題"), NULL);
}
}
}
小結
Duilib處理消息,是在Notify函數里面進行處理:先判斷Duilib消息類型,再判斷是哪個控件,最后做出消息處理對應的操作。
Duilib技術交流群:799142530
源碼地址:https://github.com/KongKong20/DuilibTutor