问题标签 [message-map]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1664 浏览

winapi - ATL/WTL 替代消息映射 (ALT_MSG_MAPs) 如何工作?我什么时候使用它们?

我已阅读文档,其中说:

ATL 支持使用ALT_MSG_MAP宏声明的备用消息映射。
每个备用消息映射由一个唯一编号标识,您将其传递给ALT_MSG_MAP.
使用备用消息映射,您可以在一个映射中处理多个窗口的消息。
请注意,默认情况下,CWindowImpl不使用备用消息映射。
要添加此支持,请覆盖WindowProc您的CWindowImpl派生类中的方法并ProcessWindowMessage使用消息映射标识符进行调用。

当我查看 WTL 时,我会看到如下消息映射:

但是,我不明白:

  • 他们是如何被调用的。(代码如何知道备用消息映射的存在?)

  • 它们与默认消息映射有何不同。他们看起来都在为同一个窗口处理相同类型的消息......

  • 为什么它们有用。(难道他们不都是同一个窗口吗?)

有人对备用消息映射的作用有更好的解释吗?
(为什么发明它们的动机会非常有帮助。)

0 投票
2 回答
3325 浏览

c++ - 如何将值传递给 MFC 消息映射函数 on_command

我有一个函数,它根据接收到的 std::string 值执行特定操作。

例如:

无效 performTaskOnStringValue(std::string);

现在我有一组功能区按钮 (CMFCRibbonButton),需要通过在按钮单击时将它们各自的文本作为值传递来调用此函数。

我已将这些按钮的 ID 映射到带有按钮 ID 的消息映射宏 on_command。所有按钮共享一个共同的 id - 例如 -

ID_RIBBON_BUTTON_ID

消息映射如下

ON_COMMAND(ID_RIBBON_BUTTON_ID, &MyClass::performTaskOnStringValue);

如何将按钮文本作为参数传递给 ButtonClick 上的此函数?

0 投票
1 回答
1834 浏览

mfc - 捕获和重定向 ON_UPDATE_COMMAND_UI 消息

我在(父)中有CMDIChildWnd一个(子)。也有发送到它的子视图的工具栏。到目前为止有效。现在,只要激活(例如单击它),消息就会到达,而不是父。CReportViewCFormViewCMDIChildWndON_UPDATE_COMMAND_UICReportViewON_UPDATE_COMMAND_UICReportViewCFormView

我现在要做的是ON_UPDATE_COMMAND_UI在子视图中捕获消息并以某种方式将它们中继到父视图。我尝试覆盖该CWnd::PreTranslateMessage()方法并调用父视图的SendMessage()方法,但ON_UPDATE_COMMAND_UI没有到达那里。

我还尝试了以下

但这也没有用。有人有想法吗?

0 投票
1 回答
1705 浏览

c++ - MFC从父级捕获控件的子级消息而不为子级创建类处理程序?

我有一个名为CDialogParent的向导创建的 CDialog ,然后创建一个子对话框模板IDD= IDD_CHILD_DLG1,在这个子对话框中我放了一个按钮IDC_BTN1(我不为这个孩子创建类处理程序)。

通常,我需要为子级创建新的类处理程序CDialogChild并添加消息映射,例如:

我想通过在 CDialogParent 中声明消息映射来捕获子对话框的控件消息 IDC_BTN1 的问题,例如

如何在不创建新的类处理程序的情况下做到这一点?感谢帮助!

0 投票
0 回答
436 浏览

c++ - MFC - 每当更改属性时如何执行某个方法

几天前,我开始开发一个 MFC 应用程序,它作为我的数据库的客户端。最近,我试图在“属性”窗口上实现一个每次更改属性值(最好是作为组合框的字段)时执行的方法。我的第一次尝试是覆盖CMFCPropertyGridProperty::OnUpdateValue(). 我能够正确地“实现”这个方法,但它没有按预期工作(我相信这里的主要问题是我没有直接在 CProperties 类上实现它,但我在互联网)。

所以,我已经转向基于消息映射的命令。我尝试了多种命令,例如ON_CONTROL_REFLECT, CBN_EDITCHANGE, CBN_EDITUPDATE,但这些似乎都没有帮助。我不确定我是否在定义主要属性(这些 previos 命令的第一个参数)时犯了一个巨大的错误,或者它们是否是CCombobox该类的专有命令。换句话说,这些命令似乎对我当前的属性网格毫无用处,因为到目前为止我使用的唯一“组合框”是使用方法 CMFCPropertyGridProperty::AddOption() 时生成的组合框(重要说明:我的整个属性网格基本上由 CMFCPropertyGridProperty 对象组成)。

无论如何,我相信我的疑问的答案和这个问题的解决方案有点简单,但我仍然是 C++ 和 MFC 的新手......

0 投票
1 回答
722 浏览

c++ - c++ MFC和处理windows消息

Windows 消息的消息映射中需要什么代码?

调用函数的代码:

功能:

0 投票
1 回答
956 浏览

visual-c++ - 在单击取消按钮时关闭对话框,忽略 EN_KILLFOCUS

我的对话框中有一个 CEdit 字段EN_KILLFOCUS,因此当用户输入无效数据时,当焦点从该字段移开并且焦点返回 CEdit 字段时,会显示一条警告消息,以便用户可以输入正确的数据。如果用户输入无效数据并单击取消按钮,则还会显示一条警告消息,这是不希望的,因为用户无论如何都试图取消他的操作。当用户单击 CANCEL 按钮时,我尝试实现 PostQuitMessage,但这会关闭整个应用程序。当用户单击 CANCEL 按钮时,我只希望我的对话框关闭。单击取消按钮后,有什么方法可以立即关闭对话框。这是我尝试过的代码。

0 投票
2 回答
191 浏览

visual-c++ - 是否存在接受返回 void 的函数的 ON_COMMAND_EX 版本?

我搜索但没有找到。我想要一个将菜单项命令操作链接到接受数字 ID 并且根本不提供任何返回(无效)的函数的消息映射宏。

ON_COMMAND返回 void,但它太有限了,因为它不提供菜单项 ID,在这种情况下我需要它。

ON_COMMAND_EX返回 a BOOL,因此它迫使我进行大量返回,如果返回类型为 void,则不需要这样做。

那么,正如我在第一段中描述的那样,是否有这样的宏?

0 投票
1 回答
116 浏览

events - 即使添加了 ON_COMMAND 处理程序,菜单项仍保持禁用状态

我使用 Visual Studio 2013 制作了一个简单的拆分窗口应用程序。有两个视图,一个视图由 default-view-class 组成,另一个视图由派生自CScrollView.

这个分离器工作正常。

当我尝试将ON_COMMAND处理程序添加到菜单项之一时,就会出现问题。如果我将ON_COMMAND处理程序放在默认视图类中,则没有问题。菜单项点击良好,处理程序有效。

但是,如果我将ON_COMMAND处理程序放在自定义视图类中,则菜单项根本不会启用。

我相信我已经尽一切努力在我的自定义视图类中正确实现消息映射。

MyCustomView.h中DECLARE_MESSAGE_MAP()肯定存在 , 当然,我已经在 MyCustomView.cpp 文件中添加了BEGIN_MESSAGE_MAP,END_MESSAGE_MAP()对。

但是,菜单项根本不会启用。它只是保持灰色。

我已经尽我所能在谷歌上搜索,但到目前为止似乎没有人有过这种经历。首先是否不可能将ON_COMMAND处理程序添加到自定义视图类?我希望不是。

请给我一些建议。谢谢你。

0 投票
1 回答
227 浏览

python - 如何从 Protobuf MessageMap (Python) 中提取信息

我有一个 MessageMap 对象(在 Python 中),我无法终生弄清楚如何正确提取我需要的信息:

消息映射对象:

是我所拥有的。

非常感谢任何帮助。