TN020:ID 命名和编号约定
此说明介绍了 MFC 2.0 用于资源、命令、字符串、控件和子窗口的 ID 命名和编号约定。
MFC ID 命名和编号约定旨在满足以下要求:
提供在 Visual C++ 资源编辑器支持的 MFC 库和 MFC 应用程序中使用的一致 ID 命名标准。 这使得程序员能够更轻松地从其 ID 解释资源的类型和源。
强调某些类型 ID 之间的强 1 对 1 关系。
符合在 Windows 中已广泛使用的命名 ID 的标准。
对 ID 编号空间进行分区。 ID 编号可由程序员、MFC、Windows 和 Visual C++ 编辑的资源分配。 适当的分区有助于避免 ID 编号重复。
ID 前缀命名约定
应用程序中可以使用多种 ID。 MFC ID 命名约定为不同的资源类型定义不同的前缀。
MFC 使用前缀“IDR_”来指示应用于多个资源类型的资源 ID。 例如,对于给定的框架窗口,MFC 使用相同的“IDR_”前缀来指示菜单、加速器、字符串和图标资源。 下表显示了各种前缀及其用法:
Prefix | 使用 |
---|---|
IDR_ | 适用于多种资源类型(主要用于菜单、加速器和功能区)。 |
IDD_ | 适用于对话框模板资源(例如 IDD_DIALOG1)。 |
IDC_ | 适用于游标资源。 |
IDI_ | 适用于图标资源。 |
IDB_ | 适用于位图资源。 |
IDS_ | 适用于字符串资源。 |
在 DIALOG 资源中,MFC 遵循以下约定:
前缀或标签 | 使用 |
---|---|
IDOK、IDCANCEL | 适用于标准推送按钮 ID。 |
IDC_ | 适用于其他对话框控件。 |
“IDC_”前缀也用于游标。 此命名冲突通常不是问题,因为典型的应用程序将有几个游标和许多对话框控件。
在菜单资源中,MFC 遵循以下约定:
Prefix | 使用 |
---|---|
IDM_ | 适用于不使用 MFC 命令体系结构的菜单项。 |
ID_ | 适用于不使用 MFC 命令体系结构的菜单命令。 |
遵循 MFC 命令体系结构的命令必须具有 ON_COMMAND 命令处理程序,并且可以具有 ON_UPDATE_COMMAND_UI 处理程序。 如果这些命令处理程序遵循 MFC 命令体系结构,则无论它们绑定到菜单命令、工具栏按钮还是对话框栏按钮,它们都将正常运行。 对于程序消息栏上显示的菜单提示字符串,也可使用相同的“ID_”前缀。 应用程序中的大多数菜单项都应遵循 MFC 命令约定。 所有标准命令 ID(例如 ID_FILE_NEW)都遵循此约定。
MFC 还使用“IDP_”作为字符串的专用形式(而不是“IDS_”)。 带有“IDP_”前缀的字符串是提示,即消息框中使用的字符串。 “IDP_”字符串可以包含“%1”和“%2”作为程序确定的字符串的占位符。 “IDP_”字符串通常具有与其关联的帮助主题,而“IDS_”字符串则不具有帮助主题。 “IDP_”字符串始终已本地化,而“IDS_”字符串可能未本地化。
MFC 库还使用“IDW_”前缀作为控件 ID 的专用形式(而不是“IDC_”)。 这些 ID 由框架类分配给子窗口,例如视图和拆分器。 MFC 实现 ID 前缀为“AFX_”。
ID 编号约定
下表列出了特定类型的 ID 的有效范围。 某些限制是技术实现限制,另一些限制是旨在防止 ID 与 Windows 预定义 ID 或 MFC 默认实现相冲突的约定。
强烈建议在建议的范围内定义所有 ID。 这些范围的下限为 1,因为未使用 0。 建议使用通用约定,并将 100 或 101 用作第一个 ID。
Prefix | 资源类型 | 有效范围 |
---|---|---|
IDR_ | multiple | 1 到 0x6FFF |
IDD_ | 对话框模板 | 1 到 0x6FFF |
IDC_、IDI_、IDB_ | 游标、图标、位图 | 1 到 0x6FFF |
IDS_、IDP_ | 常规字符串 | 1 到 0x7FFF |
ID_ | 命令 | 0x8000 到 0xDFFF |
IDC_ | controls | 8 到 0xDFFF |
这些范围限制的原因:
按照约定,不使用 ID 值 0。
Windows 实现限制用于限制将真正的资源 ID 限制为小于或等于 0x7FFF。
MFC 的内部框架保留以下范围:
0x7000 到 0x7FFF(请参见 afxres.h)
0xE000 到 0xEFFF(请参见 afxres.h)
16000 到 18000(请参见 afxribbonres.h)
这些范围可能会在将来的 MFC 实现中更改。
有多个 Windows 系统命令使用 0xF000 到 0xFFFF 的范围。
控件 ID 1 到 7 是为 IDOK 和 IDCANCEL 等标准控件保留的。
字符串的 0x8000 到 0xFFFF 范围是为命令的菜单提示保留的。