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_”前缀来指示菜单、加速器、字符串和图标资源。 下表显示了各种前缀及其用法:

前缀 使用
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的范围是为命令的菜单提示保留的。

另请参阅

按编号列出的技术说明
按类别列出的技术说明