- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Visual Studio 中,MFC CToolBar 按钮由空闲状态期间发送的 ON_UPDATE_COMMAND_UI
更新。如果我在 ON_UPDATE_COMMAND_UI
处理程序中更改按钮的启用/禁用状态,我想这种机制是有问题的。
具体来说:
假设按钮现在处于启用状态。在某个时间,代码“想要”按钮被禁用(当然不应该被用户点击),但是按钮将在下一个空闲时间真正被禁用,如下图:
在图中的红色区域,代码状态在我看来是不稳定的,开发人员必须通过手动检查按钮状态来处理这种不稳定状态。不知道是不是我漏掉了什么,或者对这个机制有什么误解?
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/
请告诉我如何在同一个 CToolBar 上添加不同类型的按钮(我需要有按钮和单选按钮)。 最佳答案 您需要使用 CMFCToolbar::ReplaceButton。 您将常规按钮替换为默认的 CMF
我正在尝试根据我的需要自定义 CToolbar 类(MFC 库)(启用对 32 位图标的抗锯齿支持)。 为此,我使用 CToolbar 提供的自定义绘制方法,我在其中绘制自己的图标。 图标呈现良好并且
我正在使用 MFC C++。我使用 CToolBar 我尝试更改默认的 Gripper 样式: if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CH
我已经按照这个问题的步骤进行操作: Higher color depth for MFC toolbar icons? 代码有效。但我还有另一个问题 - 任何禁用的按钮都只是灰色框。一旦它们被启用 -
我的目标是拥有一个 CToolBar 衍生产品,它具有单一控件(CMFCShellTreeCtrl)。 类似于: class CFileTreeBar : public CToolBar 每当它被要求
问题: 将 32 位图标添加到 CToolbar 实例似乎无法正常工作 (图像质量发生变化)。 我在WEB上遇到2类题目,与我的问题相关: 1-st 讲述了如何将 32 位图像添加到 CToolBar
我一直在尝试将工具栏添加到对话框,但当我调用 m_ToolBar.LoadToolBar 时它失败了。 我创建了一个新的工具栏资源并将其命名为 IDR_TOOLBAR1,然后将其添加到代码中 if(!
我找不到所有东西的简单 CToolBar 示例.. 我在资源编辑器中创建了一个工具栏,并像这样在我的代码中加载了该工具栏: toolbar = new CToolBar; toolbar->Creat
我正在尝试将 CImageList 插入到名为 m_wndUtilBar 的 CToolBar 对象中。我使用下面的代码添加所有图像: CImageList imageList; CBitmap bi
我们有一个触摸屏,工具栏太小,无法用我多肉的手指敲击。有没有一种简单的方法可以让我选择使工具栏按钮更大更容易点击? 到目前为止,我已经尝试了一些事情: m_toolbar.SetSizes( CSiz
我有一个用 c++98 编写的应用程序,它在 32 位中运行良好。但在 64 位中它随机开始崩溃。也许在 10 次它不会突然崩溃它连续崩溃 3 次。 此崩溃发生在菜单栏的创建过程中。这个菜单栏是一个继
我正在使用 VS2005 和 MFC。我按照一些在线代码将静态文本添加到工具栏。然而,当样式设置为 TBSTYLE_FLAT 或 (TBSTYLE_FLAT | TBSTYLE_TRANSPARENT
是否可以在 MFC 的 CToolBar 控件上显示带有 alpha channel 的 32 位图像?目前,我的工具栏使用由 Visual Studio 2010 中的“文件名”属性分配给它的 4
我正在开发一个旧的 C++ MFC 应用程序,它使用 CToolbar 作为其工具栏,使用 Visual Studio 2017 进行编译。 当应用程序在运行时按预期在 list 设置(项目/属性/配
我是一名优秀的程序员,十分优秀!