首页 > 代码库 > DuiLib的Combo控件点击无响应的问题

DuiLib的Combo控件点击无响应的问题

注:此问题具有特殊性,不具有普适性。结果虽然让人很崩溃,但毕竟折磨了自己一个下午的时间,记录下来永记于此。

 

今天的DuiLib开发过程中遇到了一个Combo点击没有反应,无法弹出下拉菜单的问题。此问题一出,遍寻网络无果,最终通过自己灵光一闪的思考,终于找到问题的原因。

在不久前,为了让整个窗口都能够拖动,于是在xml中将Caption设置为了整个窗口,然后在代码的OnNcHitTest()函数中增加当时有的几个需要点击的控件。当这次添加Combo控件后,将这件事情忘记了。于是在这种情况下点击Combo控件也是拖动窗口的操作,Combo并不会响应!于是在OnNcHitTest( )函数的代码中将Combo控件也排除掉,问题解决!

一个下午的折磨迎刃而解。也不知道自己是不是作。哈哈哈。

附上OnNcHitTest( )函数的代码:

 1 LRESULT YoChoseVerFrame::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 2 {
 3     POINT pt; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam);
 4     ::ScreenToClient(*this, &pt);
 5 
 6     RECT rcClient;
 7     ::GetClientRect(*this, &rcClient);
 8     RECT rcCaption = m_pm.GetCaptionRect();
 9     if (pt.x >= /*rcClient.left + */rcCaption.left && pt.x < /*rcClient.right -*/ rcCaption.right 10         && pt.y >= rcCaption.top && pt.y < rcCaption.bottom) {
11         CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
12         if (pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0 &&
13             _tcscmp(pControl->GetClass(), DUI_CTR_OPTION) != 0 &&
14             _tcscmp(pControl->GetClass(), DUI_CTR_TEXT) != 0 &&
15             _tcscmp(pControl->GetClass(), DUI_CTR_COMBO) != 0)
16             return HTCAPTION;
17     }
18     return HTCLIENT;
19 }

 

DuiLib的Combo控件点击无响应的问题