C++ MFC 改变菜单焦点
Posted
技术标签:
【中文标题】C++ MFC 改变菜单焦点【英文标题】:C++ MFC change menu focus 【发布时间】:2017-08-21 14:09:31 【问题描述】:我有一个视图/窗口的问题,左侧有一个树视图,右侧有一个列表样式视图,它显示与右侧选择的树节点相对应的“东西”。非常类似于 Windows 资源管理器的外观和工作方式。 “东西”可以显示为列表、大图标或小图标或信息。
我遇到的问题是,如果选择的树节点之一是“占位符”节点,则从“编辑”菜单运行“全选”,然后在“编辑”菜单中的“删除”选项灰显即使 RHS 视图中的所有项目都标记为已选中并且实际上可以安全删除。 这可以通过从树节点选择到另一个节点,然后选择回到同一个树节点,然后选择不同的视图来解决:列表、大图标、小图标或信息视图,而不是最初选择的视图。
跟踪语句告诉我,在第二个工作场景中,右侧视图中的项目被传递给“我可以删除”函数,而当事情不工作时,它是被传递的树视图节点的名称到“我可以删除”功能。当“我可以删除”函数返回 true 时,在 Edit 菜单中启用“delete”选项,如果为 false,则不启用。
当从“编辑”菜单中选择“全选”以使这项工作一直正常时,有没有一种方法可以强制“焦点”在右侧列表、信息等视图中缺少更好的词?
我认为问题在于编辑菜单不同(上下文相关)取决于哪个视图(“它”认为)处于活动状态并且某处电线交叉,并且编辑菜单正在显示树视图时应该显示对于 RHS 节点列表视图。它正在研究如何解决我正在努力解决的问题。
谢谢
【问题讨论】:
【参考方案1】:MFC 命令路由有问题。
检查您放置命令处理程序的位置。
按以下顺序搜索命令处理程序:
-
活动视图
文档
文档模板
框架窗口
应用程序。
我想您在视图中有处理程序,并且焦点(活动视图)发生了变化
您可以更改命令路由,即在框架中并要求附加到文档的所有视图处理命令...您必须为此覆盖OnCmdMsg。
查看更多详情here
【讨论】:
你的回答似乎连接了我大脑中的一些编码线。我在列表/信息类中找到了 OnEditSelectAll 处理程序,并从那里在父框架窗口上调用了 Setactiveview,确保视图位于列表/信息中,并且删除功能现在似乎工作正常。谢谢!虽然不确定我所做的在技术上是否是黑客行为...... ;-)以上是关于C++ MFC 改变菜单焦点的主要内容,如果未能解决你的问题,请参考以下文章