我正在 MFC 应用程序中实现一个右键单击菜单,其内容直到运行时才为人所知。
虽然将菜单项添加到CMenu
对象非常简单,但我还没有找到处理每个菜单项发送的消息的方法。
我正在研究的一种技术是为每个动态创建的菜单项分配相同的资源 ID,并通过一个回调处理所有消息,该回调将包含适当处理每条消息的逻辑。这种方法的问题在于,除了笨拙之外,CMenu
菜单项消息都是使用ON_COMMAND
宏捕获的,这需要无参数回调,因此除了隐式信息之外,不会向它传递任何信息,即它是由具有特定资源 ID 的资源调用的。
我试图使用ON_MESSAGE
宏来捕获消息,因为它使用的回调接收WPARAM
并LPARAM
参数,但从未调用回调,因此该选项似乎已出局。
在我看来,必须有一种方法来实现我正在尝试做的事情,但到目前为止我无法弄清楚。任何帮助都非常感谢。
看看这个答案:
https://stackoverflow.com/a/3673672/2287576
至于消息映射,假设所有菜单项 ID 都在某个范围内,您可以使用 ON_COMMAND_RANGE 将整个范围映射到单个函数。此函数将接收 ID 作为参数,在函数中,您可以根据 ID 执行不同的操作。
假设您可以留出一系列 ID 值,此方法将起作用。