处理动态填充的 CMenu 消息

Handling dynamically populated CMenu messages

我正在 MFC 应用程序中实现右键单击菜单,其内容直到运行时才为人所知。

虽然将菜单项添加到 CMenu 对象很简单,但我还没有想出一种方法来处理每个菜单项发送的消息。

我正在研究的一项技术是为每个动态创建的菜单项分配相同的资源 ID,并通过一个回调处理所有消息,该回调将包含适当处理每条消息的逻辑。这种方法的问题在于,除了笨拙之外,CMenu menuitem 消息是使用 ON_COMMAND 宏捕获的,这需要无参数回调,因此除了隐式信息之外没有任何信息传递给它它是由具有特定资源 ID 的资源调用的。

我尝试使用 ON_MESSAGE 宏来捕获消息,因为它使用的回调接收 WPARAMLPARAM 参数,但从未调用回调,因此该选项似乎出去。

在我看来,必须有一种方法来实现我正在尝试做的事情,但到目前为止我还想不出来。非常感谢任何帮助。

看这个回答:

As for the message map, assuming all your menu item IDs are within a certain range, you can use ON_COMMAND_RANGE to map the entire range to a single function. This function will receive the ID as a parameter, and within the function, you can perform different operations based on the ID.

假设您可以预留一定范围的 ID 值,此方法将起作用。