资源脚本文件(*.rc) 资源是在资源脚本 (*.rc) 文件中进行配置的。比如下面是一个程序的界面: [attachment=203] 它所对应的资源脚本文件内容为:
- #include <Windows.h>
#include "resource.h" #pragma code_page(936) / // // Dialog // 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 / // // Menu // IDR_MENU_MAIN MENU //MENU RESOURCE BEGIN POPUP "File" // POPUP RESOURCE BEGIN MENUITEM "&Open", ID_FILE_COPY // MENUITEM STATEMENT MENUITEM "&Save", ID_FILE_SAVE40002// MENUITEM STATEMENT MENUITEM SEPARATOR // MENUITEM STATEMENT MENUITEM "E&xit", ID_FILE_EXIT // MENUITEM STATEMENT END POPUP "Eidt" // POPUP RESOURCE BEGIN MENUITEM "&Copy", ID_EIDT_COPY// MENUITEM STATEMENT MENUITEM "&Paste", ID_EIDT_PASTE// MENUITEM STATEMENT END POPUP "Help" // POPUP RESOURCE BEGIN MENUITEM "&About", ID_HELP_ABOUT// MENUITEM STATEMENT END END IDR_MENU_POPUP MENU BEGIN POPUP "POPUP" BEGIN MENUITEM "&Copy", ID_POPUP_COPY MENUITEM "&Paste", ID_POPUP_PASTE MENUITEM "Cu&t", ID_POPUP_CUT POPUP "&Info" BEGIN MENUITEM "Co&unt", ID_INFO_A MENUITEM "&Size", ID_INFO_B END END END / // // Icon // IDI_ICON_MAIN ICON "res\\icon.ico" //ICON RESOURCE
rc 文件的语法包括注释,预处理命令,编译指令和资源定义声明等。其中注释方式和 C 语言相通,单行注释用 // 符号,多行注释用 /* ... */ 符号。 预处理指令包括一些头文件的引用(使用 #include ,也同 C 语言),预定义(#define,常量和宏,不支持带参数的宏) 和 条件编译(#if, #ifdef, #undef, #ifndef, #else, #elif, #endif 等)。 在上面示例中,#pragma code_page(936) 用来指定文本的编码方式,pragma 的语法格式为:
#pragma code_page( [ DEFAULT | CodePageNum ] )
如上,当 CodePageNum 值为 936 时表示使用的是简体中文编码方式。
资源定义的声明中包括“资源”(Resources),"控件"(Controls) 和 “声明”(Statements) 3 类。 1、资源 “资源”具有资源 ID,在程序中可以使用 FindResource ,LoadResource,LoadMenu 等资源相关 API 来操作。有的资源支持子控件,各种资源的声明各不相同,以下是常用的几种系统资源类型。 (1) 从文件导入的资源类型 比如 BITMAP,ICON,HTML,FONT 等,如:
nameID BITMAP filename
在上面的实例中,使用的图标资源 IDI_ICON_MAIN 如下定义:
IDI_ICON_MAIN ICON "res\\icon.ico" //ICON RESOURCE
上面告诉我们图标文件 icon.ico 放在项目目录下的 res 子文件中。 (2) 对话框资源类型 如 DIALOG,DIALOGEX 等,对话框可以包括若干子控件,如菜单,按钮等,定义语法如下:
nameID DIALOGEX x, y, width, height [ , helpID]] [[ optional-statements]] {control-statements }
上面实例中的 IDD_DIALOG_ABOUT 就是 DIALOGEX 类型的资源。 (3) 菜单资源类型 MENU 包括如下菜单选项:
menuID MENU [[optional-statements]] { item-definitions ... }
通常,菜单资源中一般会包括 POPUP 资源,如下所示:
POPUP text, [[optionlist]] { item-definitions ... }
上面实例中的 IDR_MENU_POPUP, IDR_MENU_MAIN 这些都是 MENU 类型的资源。 (4) 字符串表类型 STRINGTABLE 包括若干字符串,如下所示:
STRINGTABLE [[optional-statements]] {stringID string ...}
(5) 自定义类型 此外,还允许我们自定义资源类型,如下所示:
nameID typeID filename
nameID typeID { raw-data }
2. 控件 “控件” 与系统通用控件相对应,编译器会解析脚本,在程序运行时,脚本中相关声明被引用时会创建控件:
<控件类型> text, id, x, y, width, height [[, style [[, extended-style]]]]
或
<控件类型>, id, x, y, width, height [[, style [[, extended-style]]]]
如在上面实例中对话框资源中包括的 TEXT 控件为:
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
如下图所示: [attachment=204] 3. 声明 “声明”用于设置“资源”的相关属性。根据资源的不同而不同,有的资源有“声明”,有的资源则没有,且每一种资源对应特定的声明。比如 MENU 的资源就会具有 MENUITEM 声明,用于指定菜单项;对话框资源(DIALOG,DIALOGEX)具有 CAPTION 声明,用于指定对话框标题。 | |