在 .rc 檔案中手動加入 #include "MyFile.h" 以使用第三方定義的資源 ID,但每次在 Visual Studio 資源編輯器開啟專案時,該行都會被自動刪除。
Visual Studio 資源編輯器 (AppStudio) 在載入 .rc 時會重寫檔案,它**只保留一個** #include 陳述式 (預設為 resource.h),其餘手動添加的均會被移除。此行為在儲存時觸發,非編譯階段。
APSTUDIO_INVOKED 巨集資源編輯器處理 .rc 時會定義 APSTUDIO_INVOKED,而資源編譯器 (RC.exe) **不會** 定義。利用此差異:
#ifndef APSTUDIO_INVOKED
#include "MyOtherHeader.h"
#endif
APSTUDIO_INVOKED 已定義 → 忽略該區塊 → **不刪除** 程式碼 (識別為非編輯器管理區塊)。APSTUDIO_INVOKED 未定義 → 正常展開 #include → 第三方 ID 可用。資源編輯器將對話框邊界資訊存放於特殊區塊:
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_MYDIALOG, DIALOG
BEGIN
LEFTMARGIN, 8
RIGHTMARGIN, 502
TOPMARGIN, 8
BOTTOMMARGIN, 273
END
END
#endif // APSTUDIO_INVOKED
此區塊僅供資源編輯器讀寫,RC 編譯器完全忽略 (不認識 GUIDELINES 關鍵字)。
.rc 檔 (用文字編輯器,非 VS 內建編輯器)。#ifndef APSTUDIO_INVOKED 區塊。resource.h 檔名,可在方案總管右鍵專案 → Resource Includes 修改「Symbol header file」。#ifndef APSTUDIO_INVOKED 區塊外手寫任何資源編譯器指令,否則仍會被清除。