次の方法で共有


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

更新 : 2007 年 11 月

ここでは、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 はコマンドのメニュー プロンプトとして予約されています。

参照

その他の技術情報

番号順テクニカル ノート

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