MFC關於.rc文件 .rc2文件

 

.rc文件和.rc2文件html

c和rc2都是資源文件,包含了應用程序中用到的全部的資源。編程

二者不一樣在於:rc文件中的資源能夠直接在VC集成環境中以可視化的方法進行編輯和修改;編輯器

而rc2中的資源不能在VC的集成環境下直接進行編輯和修改, 而是由根據須要手工地進行編輯。ide

 (函數

// xxx.RC2 - Microsoft Visual C++ 不會直接編輯的資源工具

字體

在下面的地址找到關於RC2文件的描述: 
http://msdn.microsoft.com/zh-cn/library/y3sk7e6b(VS.80).aspx ui


RC2文件:包含項目使用的附加資源的腳本文件。能夠在項目的 .rc 文件的頂部包括 .rc2 文件。 spa

.rc2 文件用於存放由多個不一樣項目使用的資源。沒必要爲不一樣的項目屢次建立相同的資源,而是能夠將它們放在一個 .rc2 文件中,而後將該 .rc2 文件包括在主 .rc 文件中。code

.rc2 擴展資源文件,當調用到其它project的資源的時候就會產生,用到資源的時候,好比說一個圖片等等……
---------------------

 

MFC中的.rc文件.

統一資源管理:

在win32編程中,爲方便項目中的資源統一管理,提供了一個格式統一的資源文件,對各類資源進行管理。它的擴展名是.rc,在程序編譯時它會被資源編譯器編譯生成一個.res的二進制文件

 

rc文件的語法:

1.註釋:註釋方式和 C 語言相通,單行註釋用 // 符號,多行註釋用 /* ... */ 符號。

2.預處理命令:預處理指令包括一些頭文件的引用(使用 #include ,也同 C 語言)。

3.編譯指令:預約義(#define,常量和宏,不支持帶參數的宏) 和 條件編譯(#if, #ifdef, #undef, #ifndef, #else, #elif, #endif 等)。

4.資源定義聲明:資源定義的聲明中包括「資源」(Resources),"控件"(Controls) 和 「聲明」(Statements) 3 類。

 

資源定義聲明:

 

1.資源(Resources):「資源」具備資源 ID,在程序中可使用 FindResource ,LoadResource,LoadMenu 等資源相關 API 來操做。常見的定義以下:

(1)從文件導入的資源類型:(BITMAP,ICON,HTML,FONT,CURSOR 等)

 

 
  1. //格式:  
  2. nameID BITMAP filename  
  3. //例子:  
  4. IDI_ICON_MAIN       ICON       "res\\icon.ico"  //ICON RESOURCE  

 

 

(2) 對話框資源類型:(DIALOG,DIALOGEX 等)(對話框能夠包括若干子控件,如菜單,按鈕等,定義語法以下)

//模板
nameID DIALOGEX x, y, width, height [ , helpID]] [[ optional-statements]] {control-statements }

//例子
IDD_DIALOG_ABOUT DIALOGEX 0, 0, 290, 59 //DIALOGEX RESOURCE
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog" // CAPTION STATEMENT
FONT 8, "MS Shell Dlg", 400, 0, 0x1 // FONT STATEMENT
BEGIN
LTEXT "Windows Resource Demo",3001,26,14,119,8,SS_NOPREFIX // CONTROL
LTEXT "Copyright (C) 2008",3002,26,30,119,8 // CONTROL
DEFPUSHBUTTON "OK",IDOK,234,14,32,14,WS_GROUP // CONTROL
DEFPUSHBUTTON "Quit",IDCANCEL,234,31,32,14,WS_GROUP // CONTROL
END

 

MFC resource.h 和.rc文件的關係。

xx.rc包含了resource.h 

咱們能夠打開xx.rc文件,內容以下:

 

// Microsoft Visual C++ 生成的資源腳本。
//
#include "resource.h" 
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// 從 TEXTINCLUDE 2 資源生成。
//

#include "afxres.h"
#include "verrsrc.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE
BEGIN
   
    "#include ""afxres.h""\r\n"
    "#include ""verrsrc.h""\r\n"
    "\0"
END

 

.

resource.h就是.rc文件的頭文件
.rc文件裏的常量全在resource.h定義

.rc文件包含了整個工程的全部資源信息,包括對話框、位圖、菜單、圖標、工具欄以及字符串等資源;他們

的大小,風格,字體等屬性信息,都包含在其中;
通常狀況下不用你去寫和修改
vc會幫你寫和改
可是若是你想用之前的.rc中的資源好比你之前作的對話框
你只需複製粘貼就好了
就象下面這段

IDD_JK_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "jk"
FONT 9, "宋體"
BEGIN
PUSHBUTTON "學號",IDC_BUTTON1,25,75,62,22
PUSHBUTTON "姓名",IDC_BUTTON2,179,75,64,24
EDITTEXT IDC_EDIT1,105,75,57,24,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT2,261,75,46,24,ES_AUTOHSCROLL
END
你能夠複製到你新的工程裏去。
方法是用記事本打開.rc文件而後粘貼進去
可是vc可能會提示IDD_JK_DIALOG IDC_BUTTON1,IDC_BUTTON2,IDC_EDIT1,IDC_EDIT2沒有定義
這時你只須要用記事本打開resource.h
在裏面加
#define IDD_JK_DIALOG 102
#define IDC_BUTTON1 1000
#define IDC_BUTTON2 1001
#define IDC_EDIT1 1002
#define IDC_EDIT2 1003
若是你須要作一個有不少控件的對話框
可是之前作過一個同樣的對話框
這時你就可使用這種方法
---------------------

 

找不到資源的解決辦法

沒有包含資源文件,在這個對話框的頭文件首位包含:#include 「resource.h」能夠解決

 

參考:

http://www.javashuo.com/article/p-uodtbnbn-gp.html

 

error MSB6006: 「rc.exe」已退出,代碼爲 1:

 

\Microsoft.CppCommon.targets(1267,5): error MSB6006: 「rc.exe」已退出,代碼爲 1

 

緣由在與xx.rc文件中引用了#include "targetver.h" 。

可是我把這個targetver.h文件移除了。

 

 

VC 中clw、ncb、aps文件的做用

.clw文件記錄了類的信息,若是classView中某個類不見了,從新生成該文件就能夠了,方法:刪除此文件,點擊「創建類嚮導」,根據提示輸入工程名稱就能夠了;


.ncb文件記錄了類的提示信息,若是類的成員函數和變量的提示不見了,從新生成該文件便可,方法同上;

.aps文件記錄了資源信息,要利用現成的資源,須要修改3個文件,.rc文件,Resource.h文件和.aps文件,.aps直接刪除後,進入程序,VC會自動生成

有時候咱們改了rc不生效,直接 刪除.aps文件從新打開便可

 

 

vs中資源管理器刪除控件:

刪除控件(如static),不會自動更新resource.h,並且修改static控件id,會在resource.h中同時記錄修改先後的兩個id,但後面的數值(1072)是相同的,下圖:

  驗證,手動從窗體上刪除static控件 ,resource.h並不會自動更新。這樣就有個風險就是,resourc.h中的控件ID在代碼中農工仍然是能夠被使用的,須要注意!

  有次,手動刪除新添加的static後,編譯竟然報錯了,查了下,仍是由於id修改的緣由,屏蔽掉resource.h中的定義就行了。
 

 

vc6 報錯:

「old DIB in res XXX.ico; pass it through SDKPAINT」錯誤

 

VC中使用圖標發生的一個錯誤的解決辦法:

錯誤提示相似於:

old DIB in res XXX.ico; pass it through SDKPAINT

這個錯誤一般發生在你用你本身的圖標替換了原來的資源文件中的圖標以後,聽說是由於256色的圖標和真彩色的圖標之間的區別形成的。

解決辦法也很簡單:用 IconWorkshop 或者vs2010也能夠直接編輯,刪除256X256以上大小的圖形類型就能夠了,將出錯的圖標中的256色以上的「子圖標」所有刪除(衆所周知,一個圖標文件是包含N個子圖標的,不一樣的大小,不一樣的色深),再保存,而後再在VC中從新編譯,就應該能夠經過了。

 

 

打開xx.rc常常顯示  資源視圖--顯示在另外一個編輯器中打開

 

通常是有一些xx.rc文件已經打開了,關閉這個。我有時候關閉這個常常不起做用,這時候選擇【關閉全部文檔】,而後再點擊xx.rc就能夠打開了

 

 

resource.h id重複問題

咱們知道,經過MFC中工具欄拖動一個控件到相應的容器(好比對話框)上時,MFC會自動生成它的一個不重複的ID。可是咱們自定義一個ID,如何保證本身的ID不會和MFC生成的ID重複呢,經過對Resource.h文件分析可得出很是有用的信息,對如何自定義一個與MFC不衝突的ID值很是有指導意義。

/一個典型的resource.h文件

{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by DlgTest20150528.rc // #define IDM_ABOUTBOX 0x0010 #define IDD_ABOUTBOX 100 #define IDS_ABOUTBOX 101 #define IDD_DLGTEST20150528_DIALOG 102 #define IDS_MY_BTN 102 #define IDR_MAINFRAME 128 #define IDC_TREE1 1000 #define IDC_TREE2 1002 #define IDC_BUTTON1 1003 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 129 //下一個資源ID(插入的一些對話框、圖片、圖標等) #define _APS_NEXT_COMMAND_VALUE 32771 //下一個命令ID(主菜單、彈出菜單等) #define _APS_NEXT_CONTROL_VALUE 1004 //下一個控件ID(各類控件ID) #define _APS_NEXT_SYMED_VALUE 101 //狀態欄、工具欄上所用控件與標籤 //ID_(菜單項) IDI_(圖標) IDM_(菜單項) IDS_(字符串) IDC_(對話框控件) IDW_(鼠標) #endif #endif

有時候咱們爲了方便生成本身想要的id,能夠修改 

_APS_NEXT_CONTROL_VALUE 
這個值。

  關於Resource.h文件重複定義的問題,只要注意一些關鍵點,重複是沒有問題的,嚴格來講這個是有條件的重複,資源ID的惟一性是相對來講的,比

1. 在一個對話框內的全部同類型控件ID是不能夠重複的

2. 在一個工程內全部的DIALOG ID是不能夠重複. 可是不一樣DIALOG中的控件ID 值能夠重複

3.菜單與DIALOG 的ID 是能夠重複的

4.不一樣類型的控件ID能夠重複,

 

除此之外,若無心中設置到相同的ID,注意觀察編譯鏈接時警告或錯誤,如:

"type:GROUP_ICON, name:149, language:0x0804"

 

關於Resource文件的信息描述,下面是摘抄的一部份內容:

找到了其中宏定義的含義,知道了這些,控件ID就能夠隨便改啦。

_APS_NEXT_RESOURCE_VALUE is the next symbol value that will  be used for a dialog resource, menu resource, and so on. The valid range for resource symbol values is 1 to 0x6FFF.

下一個對話框或菜單等資源的ID,1----0x6FFF

_APS_NEXT_COMMAND_VALUE is the next symbol value that will be used for a command  identification. The valid range for command symbol values is 0x8000 to  0xDFFF.

下一個命令的ID,0x8000---0xDFFF

_APS_NEXT_CONTROL_VALUE is the next symbol value that will be used for a dialog control. The valid range for dialog  control symbol values is 8 to 0xDFFF.

下一個對話框控件的ID,8---0xDFFF

_APS_NEXT_SYMED_VALUE is the next symbol value that will be issued when you manually assign a symbol value using the New command in the Symbol Browser.

在符號瀏覽器中使用新增命令裏的預置ID 

相關文章
相關標籤/搜索