我想更多地了解这个系统是如何工作的,特别是框架何时以及如何实际决定更新 UI 元素。
我的应用程序有一个“工具”系统,一次可以激活一个工具。我使用“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
}