注:此问题具有特殊性,不具有普适性。结果虽然让人很崩溃,但毕竟折磨了自己一个下午的时间,记录下来永记于此。
今天的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 }
时间: 2024-10-13 12:32:45