Visual Studioのビルトインリソースエディタを実際に停止することはできません。リソースエディタ(、すなわち、GUI)を使用してリソースファイル内の項目を変更すると、リソースファイルのコードが再生成されます。これにより、シンボルファイルやリテラルの代入、条件付きで定義されたコードブロックの削除、慎重な手動書式の破棄など、リソースファイルに手動で行われるあらゆる手直しが行われます。そのため、リソースファイルを手動で編集することはお勧めしません。
リソースエディタが邪魔にならないリソースファイルを手動で編集できるようにする必要がある場合は、2番目のリソースファイルをプロジェクトに追加することで達成できます。慣例により、これは.rc2
拡張です。 Visual Studioのリソースエディタはこれらのリソースを直接編集することはありません。つまり、すべての編集を手動で行う必要があります。しかし、いったん正しく設定すると、そこに置かれたすべてのリソースがバイナリにリンクされ、最終結果が同等になります。
これは、正式なバージョン管理を取得する唯一の方法であり、自分のプロジェクトで使用します。例:
//
// MyProj.RC2 - resources Microsoft Visual C++ does not edit directly
//
#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
#include "Version.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION VERSION_MYPROJ_MAJOR,VERSION_MYPROJ_MINOR,VERSION_MYPROJ_REVISION,0
PRODUCTVERSION VERSION_MYPROJ_MAJOR,VERSION_MYPROJ_MINOR,VERSION_MYPROJ_REVISION,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Cody Gray"
VALUE "FileDescription", "The World's Greatest Application"
VALUE "FileVersion", VERSION_MYPROJ_FULL
VALUE "InternalName", "MyProj"
VALUE "LegalCopyright", "Copyrights are for suckers!"
VALUE "OriginalFilename", "MyProj.exe"
VALUE "ProductName", "MyProj"
VALUE "ProductVersion", VERSION_MYPROJ_FULL
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
他のリソースもここに入れることができます。たとえば、私が今作業している1つのアプリケーションでは、「デバッグ」ビルド(内部、デバッグ関連のオプションの設定用)にのみリンクしたいダイアログボックスリソースがあります。私は#ifdef DEBUG
でダイアログボックスの定義をラップしようとしましたが、リソースエディタは実行されるたびにそのブロック全体を取り除きました。代わりに、ダイアログボックスの定義を.rc2
ファイルに移動し、#ifdef
にラップさせたままにしました。私はリソースエディタでそれを編集する能力を失ったが、私は変更を行う必要があるまれなイベントで手で簡単に編集できるので、それについてはあまり気にしない。少なくとも、自動的には削除されません。
最終的なキーは、この.rc2
ファイルをリソースエディタでコンパイルし、バイナリにリンクさせることです。これを行うには、メインリソースファイル(.rc
)を編集する必要がありますが、この変更は保持されます。編集する部分はTEXTINCLUDE
のリソースです。私の.rc
ファイルでは、そのセクションは次のようになります。MyProj.rc2
は第三TEXTINCLUDE
セクションにインクルードされた場合
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"Resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#ifndef APSTUDIO_INVOKED\r\n"
"#include ""TargetVer.h""\r\n"
"#endif\r\n"
"#include ""AfxRes.h""\r\n"
"#include ""VerRsrc.h""\r\n"
"#include ""Version.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
"LANGUAGE 9, 1\r\n"
"#include ""MyProj.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
"#include ""AfxRes.rc"" // standard components\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
重要な部分です。
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE 9, 1
#include "MyProj.rc2" // non-Microsoft Visual C++ edited resources
#include "AfxRes.rc" // standard components
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
それは言及クマ、:ここでの任意のテキストは、リソース・ファイルの最後に、あなたのような見慣れた自動生成されたセクションが表示されますので、いつでもリソースコンパイラの実行リソースファイルに直接ダンプされますこの例をここでの例と一緒にまとめる方法がわからない場合は、this technical noteで説明されているように、Visual StudioのMFCプロジェクトテンプレートによって自動的にすべてが設定されます。