【问题标题】:C++ MFC change menu focusC++ MFC 改变菜单焦点
【发布时间】:2017-08-21 14:09:31
【问题描述】:

我有一个视图/窗口的问题,左侧有一个树视图,右侧有一个列表样式视图,它显示与右侧选择的树节点相对应的“东西”。非常类似于 Windows 资源管理器的外观和工作方式。 “东西”可以显示为列表、大图标或小图标或信息。

我遇到的问题是,如果选择的树节点之一是“占位符”节点,则从“编辑”菜单运行“全选”,然后在“编辑”菜单中的“删除”选项灰显即使 RHS 视图中的所有项目都标记为已选中并且实际上可以安全删除。 这可以通过从树节点选择到另一个节点,然后选择回到同一个树节点,然后选择不同的视图来解决:列表、大图标、小图标或信息视图,而不是最初选择的视图。

跟踪语句告诉我,在第二个工作场景中,右侧视图中的项目被传递给“我可以删除”函数,而当事情不工作时,它是被传递的树视图节点的名称到“我可以删除”功能。当“我可以删除”函数返回 true 时,在 Edit 菜单中启用“delete”选项,如果为 false,则不启用。

当从“编辑”菜单中选择“全选”以使这项工作一直正常时,有没有一种方法可以强制“焦点”在右侧列表、信息等视图中缺少更好的词?

我认为问题在于编辑菜单不同(上下文相关)取决于哪个视图(“它”认为)处于活动状态并且某处电线交叉,并且编辑菜单正在显示树视图时应该显示对于 RHS 节点列表视图。它正在研究如何解决我正在努力解决的问题。

谢谢

【问题讨论】:

    标签: c++ view menu mfc


    【解决方案1】:

    MFC 命令路由有问题。

    检查您放置命令处理程序的位置。

    按以下顺序搜索命令处理程序:

    1. 活动视图
    2. 文档
    3. 文档模板
    4. 框架窗口
    5. 应用程序。

    我想您在视图中有处理程序,并且焦点(活动视图)发生了变化

    您可以更改命令路由,即在框架中并要求附加到文档的所有视图处理命令...您必须为此覆盖OnCmdMsg

    查看更多详情here

    【讨论】:

    • 你的回答似乎连接了我大脑中的一些编码线。我在列表/信息类中找到了 OnEditSelectAll 处理程序,并从那里在父框架窗口上调用了 Setactiveview,确保视图位于列表/信息中,并且删除功能现在似乎工作正常。谢谢!虽然不确定我所做的在技术上是否是黑客行为...... ;-)
    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多