テクニカル ノート 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_ |
多重リソース |
1 ~ 0x6FFF |
IDD_ |
ダイアログ テンプレート |
1 ~ 0x6FFF |
IDC_、IDI_、IDB_ |
カーソル、アイコン、ビットマップ |
1 ~ 0x6FFF |
IDS_、IDP_ |
文字列 |
1 ~ 0x7FFF |
ID_ |
コマンド |
0x8000 ~ 0xDFFF |
IDC_ |
コントロール |
8 ~ 0xDFFF |
値の有効範囲は次のような理由から決定されます。
規約により、0 は ID として使用しません。
Windows の実装上の制約から、リソース ID 値は 0x7FFF 以下に制限されます。
MFC 内部機構であるフレームワーク用に、0x7000 ~ 0x7FFF、0xE000 ~ 0xEFFF という 2 つの範囲が予約されています。
Windows システム コマンドの一部が 0xF000 ~ 0xFFFF を使用します。
1 ~ 7 のコントロール ID は、IDOK や IDCANCEL などの標準コントロールのために予約されています。
文字列 ID の 0x8000 ~ 0xFFFF はコマンドのメニュー プロンプトとして予約されています。