2013-10-08 226 views
0

我一直在清理旧项目的resource.h。MFC ID_与IDM_前缀及其范围

在该项目中我的工作,我有一些标识它们的形式: IDM_XXXX 32771 但在代码ON_COMMANDON_UPDATE_COMMAND_UI语句称为。

所以我正确地认为他们遵循命令架构,理想情况下应命名为ID_XXX而不是IDM_XXXX

我已经通过TN022: Standard Commands Implementation阅读并看到微软称:

我们建议您使用菜单项标准“IDM_”前缀这 不听从指挥架构和需要特殊的菜单代码 启用和禁用它们。

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

IDM_XXXX资源通常如何处理?还有什么是IDM_XXXX的有效范围?我已经通过TN020: ID Naming and Numbering Conventions但困惑。

回答

0

ID_和IDM_可互换,因为可通过命令栏,菜单或色带访问命令。我从来不使用IDM_,我只使用ID_

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

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

由于意外,我有案件是一个ID < 0x8000被创建,但它的工作。

0

我会拒绝不遵循技术说明中的建议。如果您违反了他们的建议,Microsoft确实会有未公开的消息可能会干扰您的代码。而且,调试这样的问题会很困难。此外,以下的建议可以让你的下面的MFC命令架构不仅使得命令处理程序的额外的好处......

更强大的(因为它们将与工具栏进行操作),但使得 命令处理程序代码可重用

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