2012-11-05 37 views
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的調用(如果有的話,是否有一些標準的方法來實現這一點?)。

回答

1

據我所知,工具欄並沒有獲得重點。我懷疑你的更新處理程序本身在你的一個窗口上調用了EnableWindow。 Mayber你把一個自定義HWND在你的工具欄?

+0

違規按鈕是一個'CMFCToolBarEditBoxButton'(我更新了調用堆棧來澄清這一點)。正如你所指出的,可能這個按鈕在內部託管了一些HWND。現在,我該如何避免這個窗口竊取焦點? – hofingerandi

+0

使用'GetHwnd()'找到'HWND'並將其禁用。在需要時重新啓用它。 – l33t

相關問題