目录
一、介绍
.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"
END2 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"
END3 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"
BEGINICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20LTEXT "MFCApplicationImageDeal,版本 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIXLTEXT "版权所有 (C) 2024",IDC_STATIC,42,26,114,8DEFPUSHBUTTON "确定",IDOK,113,41,50,14,WS_GROUP
ENDIDD_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"
BEGINDEFPUSHBUTTON "确定",IDOK,209,179,50,14PUSHBUTTON "取消",IDCANCEL,263,179,50,14CTEXT "TODO: 在此放置对话框控件。",IDC_STATIC,10,96,300,8
END/
//
// 版本
//VS_VERSION_INFO VERSIONINFOFILEVERSION 1,0,0,1PRODUCTVERSION 1,0,0,1FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUGFILEFLAGS VS_FF_DEBUG
#elseFILEFLAGS 0x0L
#endifFILEOS VOS_NT_WINDOWS32FILETYPE VFT_APPFILESUBTYPE VFT2_UNKNOWN
BEGINBLOCK "StringFileInfo"BEGINBLOCK "080404B0"BEGINVALUE "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"ENDENDBLOCK "VarFileInfo"BEGINVALUE "Translation", 0x0804, 1200END
END/
//
// DESIGNINFO
//#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGINIDD_ABOUTBOX, DIALOGBEGINLEFTMARGIN, 7RIGHTMARGIN, 163TOPMARGIN, 7BOTTOMMARGIN, 55ENDIDD_MFCAPPLICATIONIMAGEDEAL_DIALOG, DIALOGBEGINLEFTMARGIN, 7RIGHTMARGIN, 313TOPMARGIN, 7BOTTOMMARGIN, 193END
END
#endif // APSTUDIO_INVOKED/
//
// 字符串表
//STRINGTABLE
BEGINIDS_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博客