gpt4 book ai didi

c++ - MFC CToolBar更新机制bug?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:46:26 25 4
gpt4 key购买 nike

在 Visual Studio 中,MFC CToolBar 按钮由空闲状态期间发送的 ON_UPDATE_COMMAND_UI 更新。如果我在 ON_UPDATE_COMMAND_UI 处理程序中更改按钮的启用/禁用状态,我想这种机制是有问题的。

具体来说:

假设按钮现在处于启用状态。在某个时间,代码“想要”按钮被禁用(当然不应该被用户点击),但是按钮将在下一个空闲时间真正被禁用,如下图:

enter image description here

在图中的红色区域,代码状态在我看来是不稳定的,开发人员必须通过手动检查按钮状态来处理这种不稳定状态。不知道是不是我漏掉了什么,或者对这个机制有什么误解?

PS:Menu的程序是OK的。它总是调用 ON_UPDATE_COMMAND_UI 处理程序并在 ON_COMMAND 处理程序之前检查按钮状态。

我的问题是如何使 ON_UPDATE_COMMAND_UI 处理程序像菜单一样在 ON_COMMAND 处理程序之前被调用?

最佳答案

经过调试和跟踪,终于找到了可能的解决方案。此处列出了关键代码,以帮助其他人解决同样的问题。按如下方式覆盖 OnCommand:

BOOL CMainDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
// Disable WM_COMMAND reflection for ToolBar control
// makes the ON_UPDATE_COMMAND_UI handler be called
// right before ON_COMMAND handler.

if ((HWND)lParam == m_wndToolBar.GetSafeHwnd())
lParam = NULL;

return CDialog::OnCommand(wParam, lParam);
}

副作用是 WM_COMMAND ToolBar 的反射被禁用,但在大多数情况下都可以。

关于c++ - MFC CToolBar更新机制bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37419965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com