--- tags: MFC, C++, C --- # MFC 中的 .rc 與 .rc2 檔案 rc和rc2都是资源文件,包含了应用程序中用到的所有的资源。它们两指向的是同一个资源。 两者不同在于:rc2文件中的资源可以直接在VS集成环境中以可视化的方法进行编辑和修改; 而rc中的资源是根据需要手工地进行编辑。 # 用意 1. 類似config、ini,等等的檔案 2. vs架構都有類似統一資源管理的文件 ex: resource manager 3. 用外部檔案方式,有時會出錯[這裡](https://blog.csdn.net/fevershen/article/details/71479973?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-71479973-blog-45643813.pc_relevant_multi_platform_whitelistv6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-71479973-blog-45643813.pc_relevant_multi_platform_whitelistv6&utm_relevant_index=6) 4. **重複利用設計不錯的視窗(dialog)** # rc文件 ``` // Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #ifndef APSTUDIO_INVOKED #include "targetver.h" #endif #include "afxres.h" #include "verrsrc.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // 中文 (繁體,台灣) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT) LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL #pragma code_page(950) #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // 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" "\0" END 3 TEXTINCLUDE BEGIN "#define _AFX_NO_OLE_RESOURCES\r\n" "#define _AFX_NO_TRACKER_RESOURCES\r\n" "#define _AFX_NO_PROPERTY_RESOURCES\r\n" "\r\n" "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)\r\n" "LANGUAGE 4, 1\r\n" "#include ""res\\ATLAgent45.rc2"" // 非 Microsoft Visual C++ 編輯過的資源\r\n" "#include ""l.CHT\\afxres.rc"" // 標準元件\r\n" "#endif\r\n" "\0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDR_MAINFRAME ICON "res\\LOGO.ico" IDI_MAIN_ICON ICON "LOGO.ico" ///////////////////////////////////////////////////////////////////////////// // // Bitmap // IDR_MAINFRAME BITMAP "res\\Toolbar.bmp" ///////////////////////////////////////////////////////////////////////////// // // Toolbar // IDR_MAINFRAME TOOLBAR 16, 15 BEGIN BUTTON ID_EDIT_CUT BUTTON ID_EDIT_COPY BUTTON ID_EDIT_PASTE SEPARATOR BUTTON ID_APP_ABOUT END ///////////////////////////////////////////////////////////////////////////// // // Menu // IDR_MAINFRAME MENU BEGIN POPUP "檔案(&F)" BEGIN MENUITEM "結束(&X)", ID_APP_EXIT END POPUP "編輯(&E)" BEGIN MENUITEM "復原(&U)\tCtrl+Z", ID_EDIT_UNDO MENUITEM SEPARATOR MENUITEM "剪下(&T)\tCtrl+X", ID_EDIT_CUT MENUITEM "複製(&C)\tCtrl+C", ID_EDIT_COPY MENUITEM "貼上(&P)\tCtrl+V", ID_EDIT_PASTE END POPUP "檢視(&V)" BEGIN MENUITEM "工具列(&T)", ID_VIEW_TOOLBAR END POPUP "說明(&H)" BEGIN MENUITEM "關於 ATLAgent45(&A)...", ID_APP_ABOUT END END IDR_POPUP_MENU MENU BEGIN POPUP "POPUP" BEGIN MENUITEM "自訂選項 ...", ID_APP_Options MENUITEM "顯示執行記錄", ID_APP_ShowLog MENUITEM "版本說明", ID_APP_ABOUT MENUITEM SEPARATOR MENUITEM "重新啟動", ID_APP_Restart MENUITEM SEPARATOR MENUITEM "結束", ID_APP_EXIT END END ///////////////////////////////////////////////////////////////////////////// // // Accelerator // IDR_MAINFRAME ACCELERATORS BEGIN "C", ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT "V", ID_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT VK_BACK, ID_EDIT_UNDO, VIRTKEY, ALT, NOINVERT VK_DELETE, ID_EDIT_CUT, VIRTKEY, SHIFT, NOINVERT VK_F6, ID_NEXT_PANE, VIRTKEY, NOINVERT VK_F6, ID_PREV_PANE, VIRTKEY, SHIFT, NOINVERT VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT VK_INSERT, ID_EDIT_PASTE, VIRTKEY, SHIFT, NOINVERT "X", ID_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT "Z", ID_EDIT_UNDO, VIRTKEY, CONTROL, NOINVERT END ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO BEGIN IDD_ABOUTBOX, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 163 TOPMARGIN, 7 BOTTOMMARGIN, 55 END IDD_SHOWLOG, DIALOG BEGIN END END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // LOCALHOST // IDR_LOCAL_CERT LOCALHOST "localhost.crt" IDR_LOCAL_KEY LOCALHOST "localhost.key" ///////////////////////////////////////////////////////////////////////////// // // AFX_DIALOG_LAYOUT // IDD_ABOUTBOX AFX_DIALOG_LAYOUT BEGIN 0 END IDD_SHOWLOG AFX_DIALOG_LAYOUT BEGIN 0 END ///////////////////////////////////////////////////////////////////////////// // // String Table // STRINGTABLE BEGIN IDP_OLE_INIT_FAILED "OLE 初始化失敗。請確認 OLE 程式庫的版本是否正確。" IDP_SOCKETS_INIT_FAILED "Windows 通訊端安裝失敗。" END STRINGTABLE BEGIN IDR_MAINFRAME "ATLAgent45" END STRINGTABLE BEGIN AFX_IDS_APP_TITLE "ATLAgent45" AFX_IDS_IDLEMESSAGE "就緒" END STRINGTABLE BEGIN ID_INDICATOR_EXT "EXT" ID_INDICATOR_CAPS "CAP" ID_INDICATOR_NUM "NUM" ID_INDICATOR_SCRL "SCRL" ID_INDICATOR_OVR "OVR" ID_INDICATOR_REC "REC" END STRINGTABLE BEGIN ID_APP_ABOUT "顯示程式資訊、版本號碼及著作權\n關於" ID_APP_EXIT "結束應用程式; 提示使用者儲存文件\n結束" END STRINGTABLE BEGIN ID_NEXT_PANE "切換至下一窗格\n下一個窗格" ID_PREV_PANE "切換至上一個窗格\n上一個窗格" END STRINGTABLE BEGIN ID_WINDOW_SPLIT "將使用中視窗切割成窗格\n分割視窗" END STRINGTABLE BEGIN ID_EDIT_CLEAR "清除選取範圍\n清除" ID_EDIT_CLEAR_ALL "清除所有的項目\n全部清除" ID_EDIT_COPY "複製選取項目並放到剪貼簿\n複製" ID_EDIT_CUT "剪下選取項目並放到剪貼簿\n剪下" ID_EDIT_FIND "尋找指定的文字\n尋找" ID_EDIT_PASTE "插入剪貼簿的內容\n貼上" ID_EDIT_REPEAT "重複上次的動作\n重複" ID_EDIT_REPLACE "用不同的文字取代指定文字\n取代" ID_EDIT_SELECT_ALL "選取整份文件\n全選" ID_EDIT_UNDO "復原上次的動作\n復原" ID_EDIT_REDO "取消復原上次的動作\n取消復原" END STRINGTABLE BEGIN ID_VIEW_TOOLBAR "顯示或隱藏工具列\n切換工具列" END STRINGTABLE BEGIN AFX_IDS_SCSIZE "變更視窗大小" AFX_IDS_SCMOVE "變更視窗位置" AFX_IDS_SCMINIMIZE "將視窗縮成一個圖示" AFX_IDS_SCMAXIMIZE "將視窗放到最大" AFX_IDS_SCNEXTWINDOW "切換至下一個文件視窗" AFX_IDS_SCPREVWINDOW "切換至上一個文件視窗" AFX_IDS_SCCLOSE "關閉使用中視窗並提示使用者儲存文件" END STRINGTABLE BEGIN AFX_IDS_SCRESTORE "將視窗還原成標準大小" AFX_IDS_SCTASKLIST "啟動工作清單" END #endif // 中文 (繁體,台灣) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // #define _AFX_NO_OLE_RESOURCES #define _AFX_NO_TRACKER_RESOURCES #define _AFX_NO_PROPERTY_RESOURCES #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT) LANGUAGE 4, 1 #include "res\ATLAgent45.rc2" // 非 Microsoft Visual C++ 編輯過的資源 #include "l.CHT\afxres.rc" // 標準元件 #endif ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED ``` # 規範 1. 你不可能同时打开这俩个文件,必须要关闭其中一个,才能打开另一个 ![](https://i.imgur.com/vLaLKU6.png) 2. 你创建了rc文件后,系统会创建Resource.h头文件,它把每一个资源都定义一个整数值 ``` //{{NO_DEPENDENCIES}} // Microsoft Visual C++ 產生的 Include 檔案。 // 由 ATLAgent45.rc 使用 // #define IDD_ABOUTBOX 100 #define IDP_OLE_INIT_FAILED 100 #define IDP_ALREADY_EXISTS_FAILED 101 #define IDP_SOCKETS_INIT_FAILED 104 #define IDR_MAINFRAME 128 #define IDR_ATLAgent3TYPE 130 #define IDR_LOCAL_CERT 311 #define IDR_LOCAL_KEY 312 #define IDR_POPUP_MENU 313 #define IDD_SHOWLOG 318 #define IDI_MAIN_ICON 327 #define IDC_LOG 1000 #define IDC_ClearLog 1001 #define IDC_CopyLog 1002 #define IDC_VerInfo 1007 #define ID_APP_Restart 32773 #define ID_APP_Options 32775 #define ID_APP_ShowLog 32777 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 313 #define _APS_NEXT_COMMAND_VALUE 32771 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 310 #endif #endif ``` 3. 资源与cpp文件相关联 ![](https://i.imgur.com/lka6TJZ.png)