目录
一、介绍
.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博客