Tn 035: Visual C での複数のリソース ファイルとヘッダー ファイルの使用

この Visual C のリソース エディターが複数のリソース ファイルをサポートする方法について説明し、ヘッダー ファイルの 1 つを共有プロジェクトまたは複数のプロジェクトとどのようにあなたのサポートを活用することができます間で共有します。このノートはこれらの質問を回答します。:

あなたは、追加のリソース ファイルをプロジェクトに追加する場合、ClassWizard で追加されたファイル内のリソースは認識されませんに注意してください。

このメモは次のとおり、上記の質問に答えるための構造します。:

概要どの Visual C のリソース ファイルとヘッダー ファイルを管理します。

Visual C は、1 つを管理します。RC のリソース ファイルと、対応します。H ヘッダー ファイル、密結合の対のファイルとして。編集し、リソースを節約します。RC ファイルと、対応するシンボルを保存します。H ファイル。開く複数を編集することができます。RC ファイル (Visual C の MDI ユーザー インターフェイスを使用)、一度に任意の与えられました。RC ファイルを 1 つの対応するヘッダー ファイルの直接編集。

シンボル ヘッダー ファイル

既定では、Visual C は常に、対応するヘッダー ファイルのリソース名します。リソース ファイル (たとえば、MYAPP の名前にかかわらず、h。RC)。設定ファイルが含まれているコマンドでは、Visual C でを使用して、このヘッダー ファイルの名前シンボル ヘッダー ファイルをインクルードの設定] ダイアログを更新することによって変更することができます。

読み取り専用シンボル ディレクティブ

Visual C だけ 1 つのヘッダー ファイルに対して編集が。RC ファイルを Visual C に追加の読み取り専用ヘッダー ファイルで定義されているシンボルへの参照をサポートしています。設定ファイルが含まれているコマンドでは、Visual C でを使用して、読み取り専用シンボル ディレクティブとして任意の数の追加の読み取り専用ヘッダー ファイルを指定できます。新しいリソースを追加すると、「読み取り専用」の制限つまり、。RC ファイルを読み取り専用ヘッダー ファイルで定義されたシンボルを使用することができます;しかし、リソースを削除した場合、シンボルは読み取り専用ヘッダー ファイルで定義された残っています。読み取り専用シンボルに割り当てられた数値の値を変更することはできません。

コンパイル時ディレクティブ

また、visual C のリソース ファイルのネスト 1 つにサポートしています。RC ファイル内でインクルードされるであります。編集する場合、指定されました。Visual C は、インクルードされるファイル内のリソースを使用して RC ファイルは表示されません。しかし、ときにコンパイル。RC ファイル、インクルードされるファイルもコンパイルされます。設定ファイルが含まれているコマンドでは、Visual C でを使用して、任意の数のファイルを指定することができます。RC ファイルをコンパイル時ディレクティブとして。

何が起こるかをメモに Visual C を読む場合。#Include RC ファイルを別の。RC ファイルがないコンパイル時ディレクティブとして指定します。Visual C をもたらすときこのような状況が発生する可能性がありますは。以前手動でテキスト エディターを維持されている RC ファイル。場合 Visual C インクルード # を読み取ります。RC ファイル、これは、親にインクルードされるリソースをマージします。RC ファイル。親を保存するとき。RC ファイルを #include ステートメント、実際には、インクルードされるリソースによって置き換えられます。発生するには、このマージしたくない場合は、削除する必要があります # 親からのステートメントが含まれます。Visual C に読み取り RC ファイル;Visual C を使用して追加戻る、同じステートメントをコンパイル時ディレクティブとしてインクルード。

Visual C に保存します。RC ファイルの 3 つの種類の設定が含まれています上記情報 (シンボル ヘッダー ファイル、読み取り専用シンボル ディレクティブ、およびコンパイル時ディレクティブ) # で含めるディレクティブTEXTINCLUDE リソースで。TEXTINCLUDE リソースの実装の詳細は、通常、対処する必要はありませんどのようにビジュアル C++ 管理設定が含まれている情報の説明します。

AppWizard で作成されたの分析。RC とします。H ファイル

AppWizard によって生成されたアプリケーション コードを調べる Visual の C++ の複数のリソース ファイルとヘッダー ファイルの管理方法に洞察力を提供します。既定のオプションを使用して AppWizard によって生成された、MYAPP アプリケーションから次検査コードの抜粋であります。

次の図で要約、複数のリソース ファイルとヘッダー ファイル、AppWizard で作成されたアプリケーションを使用します。:

特価;リソース。H AFXRES。H??????????????????? 
 ???????? \?????? /????????????????????????????? 
 ????????? \???? /??????????????????????????????? 
 ???????? MYAPP.RC?????????????????????????????? 
 ???????????? ||RES\MYAPP。RC2 AFXRES。RC AFXPRINT。RC & 特価(&N)
 

Visual の C++ ファイル セットが含まれているコマンドを使用してこれら複数のファイルの関係を表示することができます。

MYAPP。RC

Visual C を使用して編集、アプリケーションのリソース ファイル。

リソース。H は、アプリケーション固有のヘッダー ファイルです。それは、常にリソースの名前です。AppWizard は、Visual C の既定と一貫性のある H、ヘッダー ファイルの名前します。このヘッダー ファイル、リソース ファイル (MYAPP。 最初のステートメントは、#include します。RC):

//Microsoft visual C リソース スクリプトを生成//#include"resource.h"

RES\MYAPP。RC2

Visual C では編集できませんが、最終的なコンパイルに含まれるリソースが含まれています。EXE ファイル。Visual C のバージョン リソース (このリリースでの新機能) を含む、標準リソースをすべて編集できますが、AppWizard このようなリソース既定では、作成されません。このファイルに独自のカスタム形式のリソースを追加したい場合は、空のファイル appwizard で。

カスタム形式のリソースを使用する場合は、RES\MYAPP に追加することができます。RC2 と Visual C のテキスト エディターを使用して編集。

AFXRES。RC と AFXPRINT。RC には、フレームワークの特定の機能で必要な標準のリソースが含まれます。RES\MYAPP のような。RC2 では、これら 2 つのフレームワークのリソース ファイルが MYAPP の終わりにインクルードされます。RC と彼らのコンパイル時ディレクティブ [インクルードの設定] ダイアログ ボックスが指定されます。したがって、直接表示または、MYAPP を編集している間これらのフレームワークのリソースを編集しないでください。Visual C では、RC ですが、アプリケーションのバイナリにコンパイルされます。RES ファイルと最後。EXE ファイル。それらを変更する手順を含む、標準フレームワーク リソースの詳細についてはテクニカル ノート 23を参照してください。

AFXRES。H でフレームワークを使用し、具体的に AFXRES を使用ID_FILE_NEWなどの標準的な記号を定義します。RC。AFXRES。H も #include の WINRES。H は、WINDOWS のサブセットが含まれています。Visual C によって生成に必要な時間。RC ファイルだけでなく AFXRES。RC。AFXRES で定義されているシンボル。H は、アプリケーションのリソース ファイル (MYAPP。 編集RC)。たとえば、 ID_FILE_NEW MYAPP ファイル新しいメニュー項目に使用されます。RC のメニュー リソース。変更またはこれらのフレームワーク定義のシンボルを削除することはできません。

追加のヘッダー ファイルを含む

AppWizard で作成されたアプリケーションには 2 つのヘッダー ファイルが含まれています: リソース。H と AFXRES。H. のみリソース。H は、アプリケーションに固有です。以下の場合に追加の読み取り専用ヘッダー ファイルをインクルードする必要があります。

ヘッダー ファイルが外部ソースによって提供される、または複数のプロジェクトや同じプロジェクトの複数の部分の間でヘッダー ファイルを共有します。

ヘッダー ファイルには、書式設定やコメントを変更またはフィルターは、ファイルを保存するときに Visual C をしないことがあります。たとえば、たぶん # を維持する場合の定義、使用する記号演算など:

#define 赤 0#define ブルー 1#define 緑 2# define ID_COLOR_BUTTON 1001# define ID_RED_BUTTON (ID_COLOR_BUTTON + 赤)# define ID_BLUE_BUTTON (ID_COLOR_BUTTON + 青)# define ID_GREEN_BUTTON (ID_COLOR_BUTTON + 緑)

設定ファイルを含むコマンドを使用して #include ステートメントが 2 番目の読み取り専用シンボル ディレクティブとしてのように指定する追加の読み取り専用ヘッダー ファイルを含めることができます。:

#include「afxres.h」#include"second.h"

ファイルの包含関係は、今このように見えます:

特価;AFXRES。H のリソース。H 2 番目。H??????????????????? 
 ???????? \?????? /????????????????????????????? 
 ????????? \???? /??????????????????????????????? 
 ???????? MYAPP.RC?? 
 ???????????? ||RES\MYAPP。RC2 AFXRES。RC AFXPRINT。RC & 特価(&N)
 

2 つの間でヘッダー ファイルを共有します。RC ファイル

2 つの間でヘッダー ファイルを共有することがあります。別のプロジェクト、または、同じプロジェクトで RC ファイル。これを行うには、単に上記の両方に、読み取り専用ディレクティブの技法を適用します。RC ファイル。場合は、2 つ。RC ファイルは別のアプリケーションを (別のプロジェクト)、結果が次の図に示されています:

特価;リソース。H AFXRES。H のリソース。H (MYAPP1) の 2 番目。H?? (for MYAPP2)???????????? 
 ???????? \?????? /???? \?????? /?????????? 
 ????????? \???? /?????? \???? /???????????? 
 ???????? MYAPP1.RC MYAPP2。RC???????????????? 
 ????????? /??? \??????? /???? \?????????????????? 
 ???????? /????? \????? /?????? \??????????? 
RES\MYAPP1.RC2 AFXRES。RC RES\MYAPP2。RC2 AFXPRINT。RC & 特価(&N)
 

この場合は、ここで 2 番目のヘッダー ファイルで 2 つの共有です。RC ファイルの同じアプリケーション (プロジェクト) を説明して下。

同じプロジェクト内の複数のリソース ファイルの使用

Visual C とは、リソース コンパイラは、複数をサポートします。RC ファイル # を同じプロジェクトに含めるのいずれかの。RC ファイル内に別。複数の入れ子にできます。プロジェクトのリソースを複数に分割するには、各種の理由があります。RC ファイル:

できます、2 番目が含まれます。コンパイル時ディレクティブ [インクルードの設定] ダイアログ ボックスでの RC:

#include"res\myapp.rc2"nbsp;//Visual C 以外編集リソース#include"second.rc"・ ・ 2 番目。RC ファイル#include「afxres.rc」//標準コンポーネント#include"afxprint.rc"・ ・印刷印刷プレビュー リソース(&N)

その結果、次の図に示されています:

特価;リソース。H AFXRES。H??????????????????? 
 ???????? \?????? /????????????????????????????? 
 ????????? \???? /??????????????????????????????? 
 ???????? MYAPP.RC||RES\MYAPP。RC22 番目。RC AFXRES。RC AFXPRINT。RC & 特価(&N)
 

コンパイル時ディレクティブを使用して、複数の Visual C に編集と非-編集可能なリソースを整理できます。RC ファイルは「マスター」の MYAPP。RC は何もしませんが、他の。RC ファイル。Visual C プロジェクトを使用している場合。MAK ファイルする、「マスター」を含める必要があります。RC ファイルでプロジェクトのすべてのインクルードされるリソースがアプリケーションにコンパイルされるので、。

編集 Visual C ファイルの施行

AppWizard で作成された RES\MYAPP。RC2 ファイルはリソースを含むファイルの例です誤って Visual の C++ に読み書きしたい書式情報の損失に戻る。これに反対を保護するには、次の行は、RES\MYAPP の先頭に配置します。RC2 ファイル:

#ifdef APSTUDIO_INVOKED特価;#error はこのファイルは Visual C で編集可能ではありません。#endif//APSTUDIO_INVOKED(&N)

Visual C をコンパイルするときは。RC ファイルをそれAPSTUDIO_INVOKEDとしてRC_INVOKEDを定義します。AppWizard で作成されたファイル構造が破損している Visual C 上記の # エラー行を読み取る場合は、致命的なエラーを報告し、読み込みを中止。RC ファイル。

複数の Visual によって C++ 編集を共有シンボルを管理します。RC ファイル

2 つの問題は、リソースを複数に分割するときに発生します。Visual C でを個別に編集する RC ファイル:

次の図では、組織を示しています。RC とします。最初の問題を扱う H ファイル:

特価;MYAPP。RC/???????? \/?????????? \MYSTRS。H ・ MYSHARED。H \ MYMENUS。H\??? /??? /????? \?? \??? \\? /??? /??????? \?? \??? \MYSTRS。RC MYMENUS。RC(&N)

この例では、文字列リソースは 1 つのリソース ファイルでは、MYSTRS が保持されます。RC とメニュー別に、MYMENUS に保持されます。RC。いくつかのシンボルは、このようなコマンドは、2 つのファイルを共有する必要があります。たとえば、ID_TOOLS_SPELL スペル項目は、ツール メニューのメニュー コマンドの ID があります;フレームワークは、アプリケーションのメイン ウィンドウのステータス バーに表示されるコマンド プロンプトの文字列 ID もあります。

ID_TOOLS_SPELL シンボル ヘッダー ファイルでは、MYSHARED に保持されます。H. あなたをテキスト エディターで、この共有のヘッダー ファイルを手動で管理;Visual C 直接は編集されません。2 つのリソースでは、MYSTRS をファイルします。RC と MYMENUS。RC、指定 # MYSHARED が含まれます。H MYAPP の読み取り専用ディレクティブでは。前述したように、設定ファイルが含まれているコマンドを使用して鉄筋コンクリート造。

共有使用を試みる前に、シンボルを予測する最も便利な任意のリソースを識別するために。シンボル ヘッダー ファイルに追加しと、読み取り専用ディレクティブに、あなたがない場合 # 共有のヘッダー ファイルをインクルード。RC ファイルのシンボルを使用する前に。この方法では、シンボルを共有を予想していなかった場合は、手動でならない (テキスト エディターを使用して)、#define ステートメントから、シンボルと言う移動 MYMENUS。H MYSHARED します。H MYSTRS で使用する前に。RC。

場合、複数のシンボルを管理します。RC ファイルも同じ ID 数値異なるリソース (シンボル) を割り当てないでください Visual C をする必要があります。いずれかの指定します。RC ファイルを Visual C 増分 Id は各 4 つの ID ドメインでを割り当てます。セッションを編集すると、Visual C の各ドメインに、シンボル ヘッダー ファイルで割り当てられている、最後の ID の追跡。RC ファイル。ここは何 APS_NEXT の値は空の (新しいです)。RC ファイル:

#define _APS_NEXT_RESOURCE_VALUEnbsp;101# define _APS_NEXT_COMMAND_VALUE 40001# define _APS_NEXT_CONTROL_VALUE 1000年# define _APS_NEXT_SYMED_VALUE 101(&N)

_APS_NEXT_RESOURCE_VALUEはダイアログ リソース、メニュー リソースとが使用されます、次のシンボル値です。リソースのシンボル値の有効範囲は 1 から 0x6FFF です。

_APS_NEXT_COMMAND_VALUEはコマンド id を使用する、次のシンボル値です。コマンド シンボル値の有効範囲は 0x8000 から 0 xdfff までです。

_APS_NEXT_CONTROL_VALUEダイアログ コントロールに使用される次のシンボル値です。ダイアログ コントロール シンボル値の有効範囲は 8 から 0 xdfff までです。

_APS_NEXT_SYMED_VALUEシンボル ブラウザーに新しいコマンドを使用してシンボル値を手動で割り当てるときに発行される、次のシンボル値です。

Visual の C++ 開始わずかに高い値の最低の法律が値を新しいを作成します。RC ファイル。AppWizard は、MFC アプリケーションをより適切な何かにこれらの値によって初期化されます。テクニカル ノート 20 ID 値の範囲の詳細についてを参照してください。

今も、同じプロジェクトで、新しいリソース ファイルを作成するたびに、Visual C には、同じ_aps_next _値を定義します。これは、追加する場合は複数の異なる 2 つのことダイアログを意味します。RC ファイル、それは可能性が高い同じ # の値を定義することは、別のダイアログ ボックスに割り当てられます。たとえば、最初の IDD_MY_DLG1 のようにします。RC ファイル可能性がありますが割り当てられます同じ番号 101、2 番目の IDD_MY_DLG2 として。RC ファイル。

この問題を回避するには、各 Id の 4 つのドメインに、それぞれの別の数値の範囲を予約する必要があります。RC ファイル。これを_APS_NEXT値をそれぞれを手動で更新することにより。RC ファイルの前にリソースを追加します。 に、たとえば場合、最初。既定_APS_NEXT値は、RC ファイルを使用し、 _APS_NEXT値を次に示します、2 番目に割り当てる必要があります。RC ファイル:

#define _APS_NEXT_RESOURCE_VALUEnbsp;2000# define _APS_NEXT_COMMAND_VALUE 42000# define _APS_NEXT_CONTROL_VALUE 2000年# define _APS_NEXT_SYMED_VALUE 2000年(&N)

もちろん、まだ Visual C 最初に多くの Id を割り当てることが可能です。それらの 2 番目の予約が重複する値を開始する RC ファイル。RC ファイル。これが起こらないように十分な大きさの範囲を予約する必要があります。

間の依存関係を管理します。RC。CPP と。H ファイル

Visual C に保存します。RC ファイル、それも、対応するリソースにシンボルの変更を保存します。H ファイル。いずれかを。リソースを参照してください CPP ファイル。RC ファイルには、# する必要があります、リソースが含まれます。H ファイル内からは、通常、プロジェクトのマスターのヘッダー ファイル。これは、望ましくない副作用は、ソース ファイルのヘッダーの依存関係をスキャン、開発環境の内部のプロジェクト管理のために します。Visual C では、新しいシンボルを追加するたびにすべての。リソースに #include CPP ファイル。H は再コンパイルする必要があります。

Visual C は、リソースの依存関係を回避できます。H を使用して、リソースの最初の行として、次のコメントを含める。H ファイル:

 //{{NO_DEPENDENCIES}}

開発環境は、リソースへの変更を無視して、このコメントを解釈します。H に依存します。CPP ファイルを再コンパイルする必要はありません。

Visual C は、常に追加、//{{NO_DEPENDENCIES}} コメント行には。ファイルを保存するときの RC ファイル。いくつかのケースでは、リソースのビルド依存の回避します。H はリンク時に探知されていない実行時のエラーにつながる可能性があります。たとえば、シンボル ブラウザーを使用してリソース シンボルに割り当てられた数値の値を変更する場合は、リソースがない正しく発見されアプリケーション ランタイム場合に読み込ま。CPP ファイルをリソースへの参照は再コンパイルされません。このような場合に、明示的にも再コンパイルする必要があります。あなたが知っている CPP ファイルは、リソースのシンボルの変更の影響を受けます。H または選択すべてを再構築します。頻繁に特定のグループのリソースのシンボル値を変更する必要がある場合は、おそらくより便利でより安全にこれらのシンボルを別の読み取り専用ヘッダー ファイルに、上記のセクションを含む追加のヘッダー ファイルでとおり打破するでしょう。

Visual C を管理する方法の情報が含まれます

上記で説明したように、[ファイル] メニュー コマンドの設定を含む 3 つの種類の情報を指定できます。:

次の Visual C でこの情報を保持する方法について説明します、します。RC ファイル。Visual C を使用するには、この情報を必要はありませんより自信を持っての設定機能を使用できるように、あなたの理解を高める可能性があります。

各、上記の 3 種類の設定が含まれている情報の格納は。2 つのフォームで RC ファイル: (1) としてインクルードや他のディレクティブ正しく解釈、リソース コンパイラと (2) 特別な TEXTINCLUDE のリソースは Visual C によって正しく解釈。

TEXTINCLUDE リソースの目的は Visual C のインクルードの設定] ダイアログ ボックスでは容易に見栄えが、フォームの設定などの情報を安全に保存することです。TEXTINCLUDE Visual C によって定義されたリソースの種類です。Visual C リソース 1、2、3 の id 番号を持つ 3 つの特定 TEXTINCLUDE リソースを認識します。:

TEXTINCLUDE リソース アイディー。 設定が含まれている情報の種類
1 シンボル ヘッダー ファイル
2 読み取り専用シンボル ディレクティブ
3 コンパイル時ディレクティブ

3 種類の設定が含まれている情報の各既定 MYAPP を示しています。RC およびリソース。H ファイルを AppWizard では、以下の手順に従って作成します。追加 \0 と」「BEGIN と END ブロック間のトークン、RC の構文でゼロ終端文字列と二重引用符文字をそれぞれ指定する必要が。

シンボル ヘッダー ファイル

リソース コンパイラによって解釈のシンボル ヘッダー ファイル情報の形式は、#include ステートメントです。:

#include"resource.h"

対応する TEXTINCLUDE リソースです。:

1 TEXTINCLUDE 破棄できます。開始# resource.h\0」終了

読み取り専用シンボル ディレクティブ

読み取り専用シンボル ディレクティブは、MYAPP の上部に含まれています。RC で、次のフォームのリソース コンパイラで正しく解釈:

#include「afxres.h」

対応する TEXTINCLUDE リソースです。:

2 TEXTINCLUDE 破棄できます。開始「#include」「afxres.h""\r\n」「\0」終了

コンパイル時ディレクティブ

コンパイル時ディレクティブは、MYAPP の最後に含まれています。RC で、次のフォームのリソース コンパイラで正しく解釈:

#ifndef APSTUDIO_INVOKED/////////////////////////・ TEXTINCLUDE 3 から//#include"res\myapp.rc2"nbsp;//Visual C 以外編集リソース#include「afxres.rc」//標準コンポーネント#include"afxprint.rc"・ ・印刷印刷プレビュー リソース#endif ・しないか APSTUDIO_INVOKED(&N)

#Ifndef APSTUDIO_INVOKED ディレクティブ Visual C コンパイル時ディレクティブ上をスキップするように指示します。

対応する TEXTINCLUDE リソースです。:

3 TEXTINCLUDE 破棄できます。開始「#include」「res\myapp.rc2""nbsp;//Visual C 以外編集 resources\r\n」"\r\n"「#include」「afxres.rc」「・ ・標準 components\r\n」「#include」「afxprint.rc」「・ ・印刷印刷/プレビュー resources\r\n」「\0」終了(&N)

番号順テクニカル ノート|nbsp;カテゴリ別テクニカル ノート(&N)

Index