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