处理动态填充的 CMenu 消息



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

虽然将菜单项添加到CMenu对象非常简单,但我还没有找到处理每个菜单项发送的消息的方法。

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

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

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

看看这个答案:

https://stackoverflow.com/a/3673672/2287576

至于消息映射,假设所有菜单项 ID 都在某个范围内,您可以使用 ON_COMMAND_RANGE 将整个范围映射到单个函数。此函数将接收 ID 作为参数,在函数中,您可以根据 ID 执行不同的操作。

假设您可以留出一系列 ID 值,此方法将起作用。

最新更新