このシステムがどのように機能するか、具体的にはフレームワークが実際にUI要素を更新することをいつどのように決定するかについてもっと知りたいです。
私のアプリケーションには、一度に1つのツールをアクティブにできる「ツール」システムがあります。「ON_UPDATE_COMMAND_UI」メッセージを使用して、UIのツールのアイコン/ボタンを「チェック」しました。これは、アプリケーションメニューとツールバーの両方に影響しました。とにかく、ツールバーアイコンが適切に強調表示されなくなった過去数日間のある時点まで、これはすべてうまく機能していました。
少し調べてみると、アイコンが実際にクリックされたときにのみ更新コマンドが受信されていたことがわかりました。奇妙なことに、これはツールバーにのみ影響し、メニューには影響せず、まだ正常に機能しています。メニューのボタンが更新されても、ツールバーアイコンは同じままです。
明らかに、私はそれを壊すために何かをしました-何かアイデアはありますか?
編集:
気にしないでください。私はアプリケーションのOnIdle()
メソッドを上書きし、元の基本クラスのメソッドを呼び出していませんでしたCWinApp::OnIdle()
。つまり、ほとんどの場合、更新が呼び出される場所だと思います。https://msdn.microsoft.com/en-us/library/3e077sxt.aspxからのこのコードスニペットは、次のことを示しています。
BOOL CMyApp::OnIdle(LONG lCount)
{
// CWinApp's original method is involved in the update message handling!
// Removing this call will break things
BOOL bMore = CWinApp::OnIdle(lCount);
if (lCount == 0)
{
TRACE(_T("App idle for short period of time\n"));
bMore = TRUE;
}
// ... do work
return bMore;
// return TRUE as long as there are any more idle tasks
}