欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > MFC的.rc 和.rc2文件【常见问题】

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

2024/10/23 23:30:02 来源:https://blog.csdn.net/weixin_45037357/article/details/142851591  浏览:    关键词: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"
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博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com