Share via


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

另请参阅

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