テクニカル ノート 20: ID 名および番号に関する規約

ここでは、MFC 2.0 で使うリソース、コマンド、文字列、コントロール、子ウィンドウに対する ID 名と ID 番号の規約について説明します。

MFC の ID 名や ID 番号に関する規約は、以下の条件を満たすようにできています。

  • Visual C++ リソース エディターを使用して作成した MFC ライブラリと MFC アプリケーションを通じて ID 名の一貫性が保たれます。 プログラマからすれば、リソースの ID からリソースの型とソースを識別するのが容易になります。

  • ID と型の一対一の対応が強調されます。

  • Windows で標準的に使用されている ID 命名法に準拠しています。

  • ID 番号空間を分割しています。 プログラマ、MFC、Windows、および Visual C++ で編集されたリソースが ID 番号を割り当てることができます。 適切な分割によって、ID 番号の重複を防ぐことができます。

ID プレフィックスの名前付け規約

アプリケーションではさまざまなタイプの ID を使用できます。 MFC の ID 名前付け規約では、リソースのタイプによって異なるプレフィックスが使用されます。

MFC では、多重リソースの種類のリソース ID に対してプレフィックス "IDR_" を使います。 たとえば、あるフレーム ウィンドウに対して、メニュー、アクセラレータ、文字列、アイコン リソースをまとめて表すために同一の "IDR_" プレフィックスが使用されます。 各種のプレフィックスとそれぞれの使い方を以下の表にまとめます。

接頭辞 使用
IDR_ 多重リソースの種類 (主にメニュー、アクセラレータ キー、およびリボン)
IDD_ ダイアログ テンプレート リソース (IDD_DIALOG1 など)
IDC_ カーソル リソース
IDI_ アイコン リソース
IDB_ ビットマップ リソース
IDS_ 文字列リソース

ダイアログ リソースに対しては次の規約が適用されます。

プレフィックスまたはラベル 使用
IDOK、IDCANCEL 標準プッシュ ボタン ID
IDC_ その他のダイアログ コントロール

プレフィックス "IDC_" はカーソルにも適用されますが、この重複は問題ありません。 通常、アプリケーションで使用されるカーソルの個数は限られており、ダイアログ コントロールの数は多いからです。

メニュー リソースに対しては次の規約が適用されます。

接頭辞 使用
IDM_ MFC コマンド アーキテクチャを使用しないメニュー コマンド
ID_ MFC コマンド アーキテクチャを使用するメニュー コマンド

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

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

プレフィックス "IDW_" は特殊な形式のコントロール ID として使用されます (通常のコントロール ID は "IDC_")。 "IDW_" はフレームワーク クラスによって子ウィンドウ (ビュー、分割ウィンドウなど) に割り当てられます。 MFC が実装する ID にはプレフィックス "AFX_" が付けられます。

ID 番号の規約

各タイプのリソースに付けられる ID 番号の有効範囲を以下の表にまとめます。 値の範囲は実装上の制限によるものと、Widnows の定義済み ID や MFC の既定の ID と重複しないための規則によるものとに分かれます。

可能な限り、以下に示す範囲内の ID を使用してください。 範囲の下限は 1 です。0 は使用しません。 慣例どおり、最初の ID には 100 または 101 を使用することをお勧めします。

接頭辞 リソースの種類 有効な範囲
IDR_ multiple 1 ~ 0x6FFF
IDD_ ダイアログ テンプレート 1 ~ 0x6FFF
IDC_、IDI_、IDB_ カーソル、アイコン、ビットマップ 1 ~ 0x6FFF
IDS_、IDP_ 文字列 1 ~ 0x7FFF
ID_ commands 0x8000 ~ 0xDFFF
IDC_ controls 8 ~ 0xDFFF

値の有効範囲は次のような理由から決定されます。

  • 規約により、0 は ID として使用しません。

  • Windows の実装上の制約から、リソース ID 値は 0x7FFF 以下に制限されます。

  • MFC の内部フレームワークでは、これらの範囲が予約されています:

    • 0x7000 ~ 0x7FFF (afxres.h を参照)

    • 0xE000 ~ 0xEFFF (afxres.h を参照)

    • 16000 ~ 18000 (afxribbonres.h を参照)

    これらの範囲は、将来の MFC 実装で変更される可能性があります。

  • Windows システム コマンドの一部が 0xF000 ~ 0xFFFF を使用します。

  • 1 ~ 7 のコントロール ID は、IDOK や IDCANCEL などの標準コントロールのために予約されています。

  • 文字列 ID の 0x8000 ~ 0xFFFF はコマンドのメニュー プロンプトとして予約されています。

関連項目

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