Try   HackMD

MFC 中的 .rc 與 .rc2 檔案

rc和rc2都是资源文件,包含了应用程序中用到的所有的资源。它们两指向的是同一个资源。

两者不同在于:rc2文件中的资源可以直接在VS集成环境中以可视化的方法进行编辑和修改;

而rc中的资源是根据需要手工地进行编辑。

用意

  1. 類似config、ini,等等的檔案

  2. vs架構都有類似統一資源管理的文件 ex: resource manager

  3. 用外部檔案方式,有時會出錯這裡

  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. 你不可能同时打开这俩个文件,必须要关闭其中一个,才能打开另一个

  1. 你创建了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

  1. 资源与cpp文件相关联