duilib並沒有提供雙擊和右鍵消息,所以需要我們自行擴展,這里以添加雙擊消息為例,
在UIDefine.h里,我們只看到了DUI_MSGTYPE_CLICK消息,卻沒有看到雙擊消息,因此需要在這里添加一個雙擊消息:
#define DUI_MSGTYPE_DBCLICK (_T("dbclick"))
在UIManager.h里可以看到 UIEVENT_DBLCLICK、UIEVENT_RBUTTONDOWN等消息,這是因為它的右鍵和雙擊等消息只給了內部的控件使用,這時我們需要讓他傳遞出來,所以需要在CControlUI::DoEvent函數里傳遞雙擊消息,如下:
if( event.Type == UIEVENT_DBLCLICK ) { m_pManager->SendNotify(this, DUI_MSGTYPE_DBCLICK, event.wParam, event.lParam); //return; }
這里記住不要return,因為雙擊消息UIEVENT_DBLCLICK 還需要傳遞給List等控件。
然后重新編譯一下duilib,就可以響應雙擊消息啦,
我們在Notify函數里添加以下代碼:
if( msg.sType == _T("dbclick")) { // 這里會傳進來很多次雙擊消息,所以只獲取祖先控件的消息 if (! msg.pSender->GetParent()) { FullScreen(! m_bFullScreenMode); } }
即可響應雙擊消息,和click一樣簡單哦~
需要注意的是:這個消息會從子控件一直傳遞給父控件,我們如果加了很多Layout控件的話,可以發現會進來很多次dbclick消息,如果我們不想要父控件收到這個消息,可以處理之后直接return。
其他的消息也差不多,就不贅述了~O(∩_∩)O~