Mfc 处理动态填充的CMenu消息

Mfc 处理动态填充的CMenu消息,mfc,cmenu,Mfc,Cmenu,我在一个MFC应用程序中实现了一个右键单击菜单,它的内容直到运行时才知道 虽然将菜单项添加到CMenu对象非常简单,但我还没有找到处理每个菜单项发送的消息的方法 我正在研究的一种技术是为每个动态创建的菜单项分配相同的资源ID,并通过一个回调处理所有消息,该回调将包含适当处理每条消息的逻辑。这种方法的问题在于,除了笨拙之外,CMenumenuitem消息是使用ON_命令宏捕获的,该宏需要无参数回调,因此除了由具有特定资源ID的资源调用的隐式信息之外,不会向其传递任何信息 我尝试使用ON_MESSA

我在一个MFC应用程序中实现了一个右键单击菜单,它的内容直到运行时才知道

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

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

我尝试使用
ON_MESSAGE
宏捕获消息,而不是使用receive
WPARAM
LPARAM
参数进行回调,但回调从未被调用,因此该选项似乎已失效

在我看来,必须有一种方法来实现我正在尝试做的事情,但到目前为止我还没有弄明白。非常感谢您的帮助。

请看以下答案:

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


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

您好,谢谢您的回复。我在别处看到了那篇文章。理想情况下,我希望避免保留范围资源ID,因为菜单项表示用户创建的数据,所以我不知道它们需要多少。我可能不得不采用这种方法,因为似乎没有更好的方法了。@Eric好吧,在这里现实地思考一下,在用户界面上实际上可以允许多少菜单项?必须有一个合理的限度。即使是这样,你也允许1000个,我认为这将是一个疯狂的菜单项数量。这样行。你当然是对的。我已经按照你的建议选择了ON_命令_范围,到目前为止还不错。谢谢