次の方法で共有


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 コマンド アーキテクチャを使用しないメニュー項目の場合。
身分証明書_ MFC コマンド アーキテクチャを使用するメニュー コマンドの場合。

MFC コマンド アーキテクチャに従うコマンドには、ON_COMMAND コマンド ハンドラーが必要であり、ON_UPDATE_COMMAND_UI ハンドラーを持つことができます。 これらのコマンド ハンドラーが MFC コマンド アーキテクチャに従っている場合、メニュー コマンド、ツール バー ボタン、ダイアログ バー ボタンのいずれにバインドされているかに関係なく、正しく機能します。 プログラムのメッセージ バーに表示されるメニュー プロンプト文字列にも、同じ "ID_" プレフィックスが使用されます。 アプリケーションのほとんどのメニュー項目は、MFC コマンド規則に従う必要があります。 すべての標準コマンド ID (たとえば、ID_FILE_NEW) は、この規則に従います。

MFC では、("IDS_" ではなく) 特殊な形式の文字列として "IDP_" も使用されます。 "IDP_" プレフィックスを持つ文字列はプロンプトです。つまり、メッセージ ボックスで使用される文字列です。 "IDP_" 文字列には、プログラムによって決定される文字列のプレースホルダーとして "%1" と "%2" を含めることができます。 "IDP_" 文字列には通常、ヘルプ トピックが関連付けられていますが、"IDS_" 文字列には関連付けされません。 "IDP_" 文字列は常にローカライズされ、"IDS_" 文字列はローカライズされない場合があります。

MFC ライブラリでは、("IDC_" ではなく) 特殊な形式のコントロール ID として "IDW_" プレフィックスも使用されます。 これらの ID は、フレームワーク クラスによってビューやスプリッターなどの子ウィンドウに割り当てられます。 MFC 実装 ID には、プレフィックスとして "AFX_" が付いています。

ID-Numbering 規約

次の表に、特定の種類の ID の有効な範囲を示します。 制限の一部は技術的な実装の制限であり、他の制限は、ID が Windows 定義済みの ID または MFC の既定の実装と衝突しないように設計された規則です。

推奨される範囲のすべての ID を定義することを強くお勧めします。 0 は使用されないため、これらの範囲の下限は 1 です。 共通規則を使用し、最初の ID として 100 または 101 を使用することをお勧めします。

接頭辞 リソースの種類 有効な範囲
IDR_ 複数 1 ~ 0x6FFF
IDD_ ダイアログ テンプレート 1 ~ 0x6FFF
IDC_,IDI_,IDB_ カーソル、アイコン、ビットマップ 1 ~ 0x6FFF
IDS_、IDP_ 一般的な文字列 1 ~ 0x7FFF
身分証明書_ コマンド 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までの範囲は、コマンドのメニュー プロンプト用に予約されています。

こちらも参照ください

番号別テクニカル ノート
カテゴリ別テクニカル ノート