此说明介绍了 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_”前缀来指示菜单、加速器、字符串和图标资源。 下表显示了各种前缀及其用法:
前缀 | 使用 |
---|---|
IDR_ | 对于多个资源类型(主要用于菜单、加速器和功能区)。 |
IDD_ | 对于对话框模板资源(例如,IDD_DIALOG1)。 |
IDC_ | 对于游标资源。 |
IDI_ | 对于图标资源。 |
IDB_ | 对于位图资源。 |
IDS_ | 对于字符串资源。 |
在 DIALOG 资源中,MFC 遵循以下约定:
前缀或标签 | 使用 |
---|---|
IDOK、IDCANCEL | 对于标准推送按钮 ID。 |
IDC_ | 对于其他对话框控件。 |
“IDC_”前缀也用于游标。 此命名冲突通常不是问题,因为典型的应用程序将有几个游标和许多对话控件。
在菜单资源中,MFC 遵循以下约定:
前缀 | 使用 |
---|---|
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-Numbering 公约
下表列出了特定类型的 ID 的有效范围。 某些限制是技术实现限制,而另一些限制是旨在防止 ID 与 Windows 预定义 ID 或 MFC 默认实现相冲突的约定。
强烈建议在建议的范围内定义所有 ID。 这些范围的下限为 1,因为不使用 0。 建议使用通用约定,并将 100 或 101 用作第一个 ID。
前缀 | 资源类型 | 有效范围 |
---|---|---|
IDR_ | 多个 | 1 到 0x6FFF |
IDD_ | 对话框模板 | 1 到 0x6FFF |
IDC_,IDI_,IDB_ | 游标、图标、位图 | 1 到 0x6FFF |
IDS_,IDP_ | 常规字符串 | 1 到 0x7FFF |
ID_ | 命令 | 通过0xDFFF 0x8000 |
IDC_ | 控制 | 8 到 0xDFFF |
这些范围限制的原因:
按照约定,不使用 ID 值为 0。
Windows 实现限制将真正的资源 ID 限制限制为小于或等于0x7FFF。
MFC 的内部框架保留以下范围:
通过0x7FFF 0x7000(请参阅 afxres.h)
通过0xEFFF 0xE000(请参阅 afxres.h)
16000 到 18000 (见 afxribbonres.h)
将来的 MFC 实现可能会更改这些范围。
多个 Windows 系统命令使用0xF000到0xFFFF的范围。
1 到 7 的控件 ID 保留用于 IDOK 和 IDCANCEL 等标准控件。
字符串的0x8000到0xFFFF的范围是为命令的菜单提示保留的。