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 的调用(如果是这样,是否有一些标准方法可以实现这一点?)。

4

1 回答 1

1

据我所知,工具栏没有获得焦点。我怀疑您的更新处理程序本身会调用EnableWindow您的一个窗口。也许你在你的工具栏中放了一个自定义HWND

于 2012-11-06T08:10:36.867 回答