0
我正在處理MDI應用程序,其中更新工具欄按鈕正在搞亂拖動矩形的繪製。更新工具欄按鈕狀態竊取另一個窗口的焦點
在ON_WM_LBUTTONDOWN中調用SetCapture(),在ON_WM_MOUSEMOVE中更新拖動矩形,並在ON_WM_LBUTTONUP中刪除矩形並調用ReleaseCapture()。
大部分時間這個程序運行良好,但是當這種拖動操作發生時,特定的工具欄按鈕將其狀態從啓用切換爲禁用,然後初始窗口失去焦點並且不會收到WM_LBUTTONUP。
這裏是調用堆棧
MyApp.exe!MyWindow::OnCaptureChanged(CWnd * pWnd=0x00000000)
...
mfc90d.dll!CWnd::EnableWindow(int bEnable=0x00000000) Line 352 + 0x11 bytes C++
mfc90d.dll!CMFCToolBarEditBoxButton::SetStyle(unsigned int nStyle=0x00040000) Line 470 C++
mfc90d.dll!CMFCToolBar::SetButtonStyle(int nIndex=0x00000001, unsigned int nStyle=0x00040000) Line 1268 C++
mfc90d.dll!CMFCToolBarCmdUI::Enable(int bOn=0x00000000) Line 2560 C++
MyApp.exe!MyToolbar::OnUpdateButton(CCmdUI * pCmd=0x0012faa8)
...
mfc90d.dll!CWinApp::OnIdle(long lCount=0x00000000)
的一部分,由於代碼已經工作之前,該軟件被移到了MFC的功能包,我能想象得到的原因是錯誤地設置工具欄按鈕(如錯誤的窗口樣式)?
或者我應該在繪製拖曳矩形時阻止對OnIdle的調用(如果有的話,是否有一些標準的方法來實現這一點?)。
違規按鈕是一個'CMFCToolBarEditBoxButton'(我更新了調用堆棧來澄清這一點)。正如你所指出的,可能這個按鈕在內部託管了一些HWND。現在,我該如何避免這個窗口竊取焦點? – hofingerandi
使用'GetHwnd()'找到'HWND'並將其禁用。在需要時重新啓用它。 – l33t