0

我一直在清理旧项目的 resource.h。

在我正在处理的项目中,我有一些格式为: 但在代码和语句IDM_XXXX 32771 中引用的ID。ON_COMMANDON_UPDATE_COMMAND_UI

所以我认为他们遵循命令架构并且理想情况下应该命名为ID_XXX而不是IDM_XXXX

我已通读TN022: Standard Commands Implementation并看到 Microsoft 说:

我们建议您对不遵循命令体系结构并且需要特定于菜单的代码来启用和禁用它们的菜单项使用标准的“IDM_”前缀。

我不确定menu-specific code这里是什么意思。

IDM_XXXX资源通常如何处理?还有什么是有效的范围范围IDM_XXXX?我经历了TN020:ID 命名和编号约定,但很困惑。

4

2 回答 2

0

ID_ 和 IDM_ 可以互换,因为可以通过命令栏、菜单或功能区访问命令。我从不使用IDM_,我只使用ID_

MFC 保留的是 0xE000->0xEFFF 和 0x7000->0x7FFF。

TN020 说菜单/命令 ID 必须在 0x8000 或更大的范围内,但我找不到这样做的理由。在 16 位 MFC 版本和 AFAIK 旧 MFC4.x 版本的对话框的工具提示处理和命令路由中,有一个特定代码查找大于 0x8000 的命令。

偶然地,我遇到了一个 ID <0x8000 的情况,但它确实有效。

于 2013-10-08T11:42:42.107 回答
0

我会拒绝不遵循技术说明中的建议。Microsoft 确实有未记录的消息,如果您违反他们的建议,可能会干扰您的代码。而且,调试这样的问题会很困难。此外,遵循建议可以让您获得额外的好处...

遵循 MFC 命令架构不仅使命令处理程序更强大(因为它们将与工具栏一起使用),而且使命令处理程序代码可重用

这意味着 MFC 将使用相同的代码来处理链接在一起的任何菜单和工具栏交互。

于 2013-10-08T12:56:10.910 回答