【问题标题】:MFC: Best place to handle context menu message?MFC:处理上下文菜单消息的最佳位置?
【发布时间】:2011-05-26 20:25:31
【问题描述】:

在 MFC 中使用 C++。我正在使用从 CWnd 派生的网格控件(特别是 codeproject 上的 MFC Grid 控件)。我想在用户右键单击单元格时显示上下文菜单。我的想法是处理 ON_WM_CONTEXTMENU() 消息。

但是,在我的(派生的)网格控件类中的 OnContextMenu 中,还是在保存网格控件的对话框类中的 OnContextMenu 中,处理此问题的最佳位置在哪里? MFC 中有约定吗?

【问题讨论】:

    标签: c++ windows mfc event-handling contextmenu


    【解决方案1】:

    如果有约定,我没注意到。

    我会根据谁拥有构建菜单所需的信息以及谁将处理菜单选择产生的命令来选择。

    【讨论】:

    • 起初我认为这并不能解决问题,因为为了实现解耦设计,我将命令操作委托给单独的服务层类型类。所以我认为谁调用这个服务类并不重要。但后来我意识到我的对话类引用了服务类。
    【解决方案2】:

    从可用性的角度来看,我不得不说上下文菜单只包含实际上只是其他 UI 元素的快捷方式的内容。我举个例子:在 MS Word 中,您有一个上下文菜单“复制”,以防您右键单击选定的文本。 “复制”菜单项实际上只是主菜单的“编辑”->“复制”的快捷方式。因此,从可用性的角度来看,您的应用程序需要一个菜单​​(或按钮)或其他功能完全相同的东西。

    现在,正弦处理主菜单不能在网格本身中完成,为什么要在网格中处理内容菜单?在我看来,这似乎不一致。

    在对话框中而不是在控件本身中处理它对我来说似乎更自然。这与您使用的环境无关。在 c# 中,我会做同样的事情。

    【讨论】:

    • 好的,我可能误解了你的问题。您的问题是:“在哪里显示 contect 菜单”,还是“在哪里处理单击上下文菜单”?
    • 问题是在哪里处理 WM_CONTEXTMENU 消息,您对该消息执行的操作是显示上下文菜单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2018-10-24
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多