MFC的.rc 和.rc2文件【常见问题】

MFC的.rc 和.rc2文件

目录

一、介绍

.rc 文件

.rc2 文件

使用上的建议

二、实例

工程截图

rc文件

rc2文件

注意:

三、使用

能否删除?


一、介绍

在MFC项目中,.rc和.rc2文件都是资源脚本文件,但它们有不同的用途和管理方式。它们两指向的是同一个资源。

两者不同在于:

.rc 文件

  • 主要资源文件:这是项目的主资源文件,通常由Visual Studio自动生成和管理。
  • 内容:包含了应用程序的大部分资源定义,如对话框、菜单、字符串表、图标、位图等。
  • 自动管理:使用Visual Studio的资源编辑器时,这个文件会被自动更新。
  • 包含其他资源文件:通常会包含其他资源文件,如.rc2文件。例如:
#include "MFCApplicationImageDeal.rc2" 

.rc2 文件

  • 附加资源文件:这是一个附加资源文件,开发者可以手动管理它的内容。
  • 内容:通常包含一些额外的资源定义,或是那些不希望被Visual Studio的资源编辑器自动修改的资源。比如自定义的资源类型、版本信息等。
  • 手动管理:这个文件不受Visual Studio资源编辑器的管理,开发者需要手动编辑。这样可以防止在使用资源编辑器时无意中覆盖这些资源。
  • 包含方式.rc2文件的内容通过在主资源文件 .rc 中的包含语句被引入。

使用上的建议

  • 自动生成 vs 手动管理
    • .rc 文件主要用于自动生成和管理资源,是通过Visual Studio的资源编辑器直接操作的。
    • .rc2 文件适用于那些需要手动管理的资源,防止在使用资源编辑器时被覆盖或修改。
  • 组织和管理资源
    • 使用 .rc2 文件可以帮助你更好地组织和管理资源,特别是那些不常变更或不希望被自动修改的资源。
  • 防止冲突
    • 对于一些需要手动调整的资源或自定义的资源类型,放在 .rc2 文件中可以防止每次使用资源编辑器时被自动覆盖。

二、实例

工程截图

rc文件

// Microsoft Visual C++ 生成的资源脚本。
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/
//
// 从 TEXTINCLUDE 2 资源生成。
//
#ifndef APSTUDIO_INVOKED
#include "targetver.h"
#endif
#include "afxres.h"
#include "verrsrc.h"

/
#undef APSTUDIO_READONLY_SYMBOLS

#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_SPLITTER_RESOURCES\r\n"
    "#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_CHS)\r\n"
    "LANGUAGE 4, 2\r\n"
    "#include ""res\\MFCApplicationImageDeal.rc2""  // 非 Microsoft Visual C++ 编辑的资源\r\n"
    "#include ""l.CHS\\afxres.rc""      // 标准组件\r\n"
    "#if !defined(_AFXDLL)\r\n"
    "#include ""l.CHS\\afxribbon.rc""   // MFC 功能区和控制条资源\r\n"
    "#endif\r\n"
    "#endif\r\n"
    "\0"
END

/
#endif    // APSTUDIO_INVOKED


/
//
// 图标
//

// ID 值最低的图标放在最前面,以确保应用程序图标
// 在所有系统中保持一致。
IDR_MAINFRAME           ICON         "res\\MFCApplicationImageDeal.ico"


#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE 4, 2

/
//
// 对话框
//

IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "关于 MFCApplicationImageDeal"
FONT 9, "MS Shell Dlg"
BEGIN
    ICON            IDR_MAINFRAME,IDC_STATIC,14,14,21,20
    LTEXT           "MFCApplicationImageDeal,版本 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
    LTEXT           "版权所有 (C) 2024",IDC_STATIC,42,26,114,8
    DEFPUSHBUTTON   "确定",IDOK,113,41,50,14,WS_GROUP
END

IDD_MFCAPPLICATIONIMAGEDEAL_DIALOG DIALOGEX  0, 0, 320, 200
STYLE DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION
 | WS_THICKFRAME
 | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION ""
FONT 9, "MS Shell Dlg"
BEGIN
    DEFPUSHBUTTON   "确定",IDOK,209,179,50,14
    PUSHBUTTON      "取消",IDCANCEL,263,179,50,14
    CTEXT           "TODO: 在此放置对话框控件。",IDC_STATIC,10,96,300,8
END

/
//
// 版本
//

VS_VERSION_INFO     VERSIONINFO
  FILEVERSION       1,0,0,1
  PRODUCTVERSION    1,0,0,1
 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
 FILEFLAGS VS_FF_DEBUG
#else
 FILEFLAGS 0x0L
#endif
 FILEOS VOS_NT_WINDOWS32
 FILETYPE VFT_APP
 FILESUBTYPE VFT2_UNKNOWN
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "080404B0"
        BEGIN
            VALUE "CompanyName", "TODO: <公司名>"
            VALUE "FileDescription", "MFCApplicationImageDeal"
            VALUE "FileVersion",     "1.0.0.1"
            VALUE "InternalName",    "MFCApplicationImageDeal.exe"
            VALUE "LegalCopyright", "TODO:  (C) <公司名>。  保留所有权利。"
            VALUE "OriginalFilename","MFCApplicationImageDeal.exe"
            VALUE "ProductName", "TODO: <产品名>"
            VALUE "ProductVersion",  "1.0.0.1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0804, 1200
    END
END

/
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
    IDD_ABOUTBOX, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 163
        TOPMARGIN, 7
        BOTTOMMARGIN, 55
    END
    IDD_MFCAPPLICATIONIMAGEDEAL_DIALOG, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 313
        TOPMARGIN, 7
        BOTTOMMARGIN, 193
    END
END
#endif    // APSTUDIO_INVOKED



/
//
// 字符串表
//

STRINGTABLE
BEGIN
    IDS_ABOUTBOX            "关于 MFCApplicationImageDeal(&A)..."
END


#endif

#ifndef APSTUDIO_INVOKED
/
//
// 从 TEXTINCLUDE 3 资源生成。
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE 4, 2
#include "res\\MFCApplicationImageDeal.rc2"  // 非 Microsoft Visual C++ 编辑的资源
#include "l.CHS\\afxres.rc"      // 标准组件
#if !defined(_AFXDLL)
#include "l.CHS\\afxribbon.rc"   // MFC 功能区和控件条资源
#endif
#endif
/
#endif    // 不是 APSTUDIO_INVOKED

rc2文件

//
// MFCApplicationImageDeal.rc2 - Microsoft Visual C++ 不会直接编辑的资源
//

#ifdef APSTUDIO_INVOKED
#error 此文件不能用 Microsoft Visual C++ 编辑
#endif //APSTUDIO_INVOKED


/
// 在此处添加手动编辑的资源...

/

注意:

你不可能同时打开这俩个文件,必须要关闭其中一个,才能打开另一个!!!!

三、使用

创建了rc文件后,系统会创建Resource.h头文件,它把每一个资源都定义一个整数值

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 由 MFCApplicationImageDeal.rc 使用
//
#define IDR_MAINFRAME					128
#define IDM_ABOUTBOX					0x0010
#define IDD_ABOUTBOX					100
#define IDS_ABOUTBOX					101
#define IDD_MFCAPPLICATIONIMAGEDEAL_DIALOG				102

// 新对象的下一组默认值
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE	129
#define _APS_NEXT_CONTROL_VALUE		1000
#define _APS_NEXT_SYMED_VALUE		101
#define _APS_NEXT_COMMAND_VALUE		32771
#endif
#endif

能否删除?

在使用Microsoft Foundation Classes (MFC)进行Windows应用程序开发时,.rc.rc2文件都有其特定的用途。

  • .rc文件:这是主资源脚本文件,其中包含应用程序的所有资源定义,如菜单、对话框、图标、字符串等。这个文件通常由开发环境自动生成并更新,是项目中不可缺少的部分。
  • .rc2文件:这个文件通常用于包含一些不希望由资源编辑器(如Visual Studio的资源编辑器)自动修改的资源。.rc2文件允许你手动添加或编辑资源,而不受资源编辑器的干扰。常见的使用场景包括第三方资源或者一些自定义的资源。

鉴于两者的用途,您不应该删除.rc文件,因为它是主资源文件,删除它会导致项目资源丢失,导致应用程序无法正常编译和运行。

至于.rc2文件,如果您的项目中没有使用任何需要手动维护的资源,且您确定没有特殊的资源需要保留在该文件中,那么可以考虑删除它。但要注意,如果项目中包含了对.rc2文件中资源的引用,删除它可能会导致编译错误或应用程序运行时的问题。

  • 不要删除.rc文件
  • 谨慎处理.rc2文件,确保没有重要资源后才可以删除。

原文链接:MFC的.rc 和.rc2文件-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深耕AI

谢谢鼓励~我将继续创作优质博文

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值