私は、ツールバーのボタンを更新すると、ドラッグ長方形の描画が台無しになる 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 の呼び出しをブロックする必要があります (そうであれば、これを達成するための標準的な方法はありますか?)。