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

embedded/2024/10/15 15:44:10/

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博客


http://www.ppmy.cn/embedded/127935.html

相关文章

重学SpringBoot3-集成Redis(九)之共享Session

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;九&#xff09;之共享Session 1. 为什么需要 Session 共享2. Spring Session 和 Redis 的集成2.1. 引入依赖2.2. 配置 Redis 连接…

Python脚本实现发送QQ邮件

需要发件人邮箱地址、授权码和收件人邮箱地址 1、登录QQ邮箱后台&#xff0c;点击右上角设置&#xff0c;下拉找到第三方服务&#xff0c;开启SMTP服务&#xff0c;复制生成的授权码 2、新建一个python文件&#xff0c;输入以下源码&#xff0c;更替参数后运行即可 import smt…

<Rust>iced库(0.13.1)学习之部件(三十二):使用markdown部件来编辑md文档

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 注:新版本已更新为0.13 概述 这是本专栏的第三十二篇,主要介绍一…

WebGl 如何给页面绑定点击事件

在WebGL中给页面绑定点击事件&#xff0c;可以通过为WebGL的绘图上下文所在的<canvas>元素添加事件监听器来实现点击事件的处理。 1. 画布添加点击事件 const ctx document.getElementById(canvas) const gl ctx.getContext(webgl)ctx.onclick function (e) {// 给ca…

如何获取网页内嵌入的视频?

如何获取网页内嵌入的视频&#xff1f; 有时插件无法识别的视频资源&#xff0c;可以通过手动使用浏览器的开发者工具来抓取。你可以按照以下步骤操作&#xff1a; 步骤&#xff1a; 打开网页并按 F12&#xff1a;在视频页面按下 F12 或右键点击网页并选择“检查”或“Inspe…

Spring Boot 进阶-Spring Boot如何整合AOP实现自定义注解

通过之前的文章,我们知道在Spring Boot中使用了大量的注解,而对于注解大家应该不陌生。 Java注解是在JDK1.5的时候引入的新特性,它提供了一种类似注释的机制,用来将任何的信息或者元数据与类、方法,或者是成员变量来进行关联。在注解中附带了一些信息,这些信息可以在编译…

QT文件操作【记事本】

mainwindow.h核心函数 QFileDialog::getOpenFileName()QFileDialog::getSaveFileName() #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include<QFileDialog> #include<QMessageBox> #include<QDebug> #include<QFile> #…

PHP-FPM和FastCGI

文章目录 前言一. FastCGI1.定义2.工作方式3.协议4.架构5.工作原理&#xff08;请求生命周期&#xff09; 二. PHP-FPM1.定义&#xff1a;2.特性3.进程管理模式4.工作流程 三.关系与应用四.配置示例五.性能优化六.配置选项七.常见问题及解决方案 前言 PHP-FPM 是基于 FastCGI …