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

news2024/10/11 22:37:50

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2206093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS2022使用技巧

目录 如何打开资源管理器如何打开监视窗口 如何打开资源管理器 如何打开监视窗口 前提:必须先按f10 开始调试起来了

Typora+PicGo实现自动上传图片至图床

文章目录 前言图床选择图床去不图床 配置PicGo安装Typora对象存储七牛云又拍云 前言 使用过Typora的小伙伴应该已经发现&#xff0c;若是想分享给别人看不但需要发送md文件&#xff0c;还需要把对应的图片一起发给对方&#xff0c;否则图片无法显示。 但是每次都要打个压缩包发…

USIM 卡的鉴权原理

USIM 卡的一个重要功能是用来做鉴权。鉴权是移动通信中非常重要的概念&#xff0c;具体的实现需要很复杂的算法。 鉴权&#xff1a;就是鉴定你是否拥有访问网络的权利。用户在开卡后&#xff0c;手机的 USIM 卡里和运营商的核心网中都将存储一个密钥&#xff0c;或者说一个密码…

进程同步问题

在操作系统中引入进程后&#xff0c;一方面系统中多道程序可以并发进行&#xff0c;有效的改善了资源利用率&#xff0c;提高了系统的吞吐量。但另一方面&#xff0c;系统变得更加复杂了&#xff0c;如果不能通过有效措施对多个进程进行有效管理&#xff0c;那么必然会因为这些…

关于mac下的nvm设置淘宝镜像源

1. 进入配置文件修改镜像源 vim ~/.bash_profile增加下面内容 export NVM_NODEJS_ORG_MIRRORhttps://npmmirror.com/mirrors/node/2. 查看远程node镜像 nvm ls-remote3. 下载镜像 nvm install 14.17.64. 使用镜像 nvm use 14.17.6

Windows系统编程 - 目录操作、磁盘、卷信息

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天继续讲解Windows系统编程的相关知识:目录操作 目录 目录操作 创建目录 通过CreateDirectory函数创建目录 原型: BOOL CreateDirectoryA([in] LPCSTR lpPathName,//目录名称[in, opt…

ORA-01031 权限不足

目录 1. 问题描述2. 问题解决 1. 问题描述 通过PL/SQL客户端&#xff0c;使用scott账户登录后&#xff0c;创建用户时&#xff0c;提示ORA-01031. 2. 问题解决 通过 cmd sqlplus进入Oracle 通过system&#xff08;密码manager&#xff09;登录 要授权的是scott账户 gran…

Flutter包管理(三)

1、作用 在APP的实际开发过程中往往会依赖很多包&#xff0c;而这些包之间存在着交叉依赖、版本依赖&#xff0c;由开发者自己管理手动管理会非常麻烦&#xff0c;每种开发生态或编程官方会提供一些包的管理工具&#xff0c;在Flutter中我们在pubspec.yaml文件中来管理第三方依…

msvcp140.dll丢失的5个解决方法,全面解读msvcp140.dll丢失问题

msvcp140.dll文件的丢失可能会引发一系列潜在问题并对计算机系统产生多方面的影响。首先&#xff0c;这个文件是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows的应用程序运行至关重要。一旦丢失&#xff0c;可能会导致部分软件无法正常启…

【AI系统】AI系统的组成

AI系统的组成是实现其设计目标的基础。本文将详细介绍AI系统的各个组成部分&#xff0c;以及它们如何协同工作以支持AI应用程序的开发和运行。 I. 引言 AI系统的复杂性要求其组成不仅要关注单一的硬件或软件&#xff0c;而是需要一个多层次、多维度的架构设计。这包括从应用与…

JavaWeb三大组件之Servlet

1. Servlet 一、Servlet介绍 1、概念 Servlet&#xff08;Server Applet&#xff09;是Java Servlet的简称&#xff0c;称为小服务程序或服务连接器&#xff0c;用Java编写的服务器端程序&#xff0c;具有独立于平台和协议的特性&#xff0c;主要功能在于交互式地浏览和生成…

链表(3)_重排链表_面试题

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 链表(3)_重排链表_面试题 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 题…

Word排版 | 如何文字部分固定行距、图片(嵌入型)单倍行距

问题描述 在写一个要求比较高的项目报告&#xff0c;总共有109页 89张图片&#xff0c;而且必须用word写 因此&#xff1a; 文字部分需要固定行距23磅图片部分需要单倍行距&#xff08;不然无法使用嵌入式&#xff09; 难点 文字和图片难以有效分离&#xff0c;无法分别设…

Redis分布式锁-秒杀类锁不住及各种因为锁导致的“血案”现场全侦破代码详解

背景 继上文“详解Redis分布式锁在SpringBoot的Async方法中没锁住的坑”不少读者发觉用了我的方法还是在并发的情况下有锁不住&#xff01; 于是我和几个没有锁住的读者了解了它们的场景&#xff0c;才知道他们在认知上存在几个误区&#xff0c;同时也发现这一块内容、知识真…

【Docker】06-DockerCompose

1. Docker compose 2. Docker Compose部署项目 docker-compose.yml version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3307:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "/root/docker/mysql/…

【GESP】C++一级练习BCQM3037,简单计算,国庆七天乐收官

又回到了简单计算的题目&#xff0c;继续巩固练习。 题解详见&#xff1a;https://www.coderli.com/gesp-1-bcqm3037/ 【GESP】C一级练习BCQM3037&#xff0c;简单计算&#xff0c;国庆七天乐收官 | OneCoder又回到了简单计算的题目&#xff0c;继续巩固练习。https://www.cod…

Windows 部署 ollama

1.安装 官方地址&#xff1a;https://ollama.com/ 1.1 下载ollama 1.2 安装 1.3 运行 Ollama 1.4 测试ollama运行状态 http://localhost:11434 curl http://localhost:11434/api/generate -d "{ \"model\": \"qwen2:0.5b\", \"prompt\":…

深入理解 Java HashMap 的 get() 方法及其相关实现

在 Java 中&#xff0c;HashMap 是一个非常常用的数据结构&#xff0c;用于存储键值对。它提供了快速的查找、插入和删除操作。HashMap 的核心功能之一是根据键获取对应的值&#xff0c;这主要通过 get() 方法来实现。本文将详细介绍 HashMap 的 get() 方法及其相关的辅助方法&…

初中数学网上考试系统的设计与实现(论文+源码)_kaic

初中数学网上考试系统的设计与实现 学生&#xff1a; 指导教师&#xff1a; 摘 要&#xff1a;科技在人类的历史长流中愈洗愈精&#xff0c;不仅包括人们日常的生活起居&#xff0c;甚至还包括了考试的变化。之前的考试需要大量的时间和精力&#xff0c;组织者还需要挑选并考查…

【大模型部署】本地运行自己的大模型--ollama

ollama简介 ollama是一款开源的、轻量级的框架&#xff0c;它可以快速在本地构建及运行大模型&#xff0c;尤其是一些目前最新开源的模型&#xff0c;如 Llama 3, Mistral, Gemma等。 官网上有大量已经开源的模型&#xff0c;部分针对性微调过的模型也可以选择到&#xff0c;…