我正在开发一个MDI应用程序,更新工具栏按钮会搞乱拖动矩形的绘制。
在ON_WM_LBUTTONDOWN中调用SetCapture(),在ON_WM_MOUSEMOVE中更新拖动矩形,在ON_WM_LBUTTONUP中删除矩形并调用ReleaseCapture()。
大多数情况下,此过程运行良好,但在此拖动操作期间,特定工具栏按钮将其状态从启用切换为禁用,然后初始窗口失去焦点,并且不会收到WM_LBUTTONUP。
这是callstack的一部分
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的调用(如果是这样,是否有一些标准方法可以实现此目的?)。
答案 0 :(得分:1)
据我所知,工具栏无法获得焦点。我怀疑你的更新处理程序本身在你的一个窗口上调用EnableWindow
。 Mayber你在工具栏中放了一个自定义的HWND
吗?