`

.rc Windows资源文件定义和使用

    博客分类:
  • C++
阅读更多

统一资源管理:

在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 等

 

//格式:
nameID BITMAP filename
//例子:
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
 

 

 

(3) 菜单资源类型:

 

//定义:
//MENU:
menuID MENU [[optional-statements]] { item-definitions ... }
//POPUP:
POPUP text, [[optionlist]] { item-definitions ... }

//例子
//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

//POPUP:
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
 

 

(4)字符串表类型:

 

//定义
STRINGTABLE [[optional-statements]] {stringID string ...}

//例子
STRINGTABLE
BEGIN
IDS_1 L"5\x00BC-Inch Floppy Disk"
IDS_1a "5\xBC-Inch Floppy Disk"
IDS_2 L"Don't confuse \x2229 (intersection) with \x222A (union)"
IDS_3 "Copyright \xA92001"
IDS_3a L"Copyright \x00a92001"
END
 

 

(5)自定义类型:

 

nameID typeID filename
nameID typeID { raw-data }

 

2. 控件(Controls):

//定义
<控件类型> text, id, x, y, width, height [[, style [[, extended-style]]]]
<控件类型>, id, x, y, width, height [[, style [[, extended-style]]]]

//例子
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
 

 

3. 声明(Statements):根据资源的不同而不同,有的资源有“声明”,有的资源则没有,且每一种资源对应特定的声明。比如 MENU 的资源就会具有 MENUITEM 声明,用于指定菜单项;对话框资源(DIALOG,DIALOGEX)具有 CAPTION 声明,用于指定对话框标题。


另外:资源 ID 是一个资源或资源子项的唯一标识,很多资源和子项都具有标识。在上面的实例中,IDD_DIALOG_ABOUT ,ID_FILE_COPY 等都是资源 ID 。这些 ID 实际是有用户定义的常数,都定义在 Resource.h 头文件中。如下:

 

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Windows.rc
//
#define IDD_DIALOG_ABOUT                101
#define IDR_MENU_MAIN                   101
#define IDR_MENU_POPUP                  102
#define IDI_ICON_MAIN                   103
#define IDC_EDIT_ABOUT                  1001
#define ID_FILE_COPY                    40001
#define ID_FILE_SAVE40002               40002
#define ID_FILE_EXIT                    40003
#define ID_EIDT_COPY                    40004
#define ID_EIDT_PASTE                   40005
#define ID_HELP_ABOUT                   40006
#define ID_COPY_PASTE                   40007
#define ID_COPY_PASTE40008              40008
#define ID_POPUP_COPY                   40009
#define ID_POPUP_PASTE                  40010
#define ID_POPUP_CUT                    40011
#define ID_POPUP_INFO                   40012
#define ID_INFO_A                       40013
#define ID_INFO_B                       40014

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        104
#define _APS_NEXT_COMMAND_VALUE         40015
#define _APS_NEXT_CONTROL_VALUE         1000
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

 

 

在程序中使用资源:

case WM_COMMAND:
        {
            switch (LOWORD(wParam))
            {
                // 在“帮助”菜单中选择“关于”
            case ID_HELP_ABOUT:
                {
                    DialogBox(
                        hinst, (LPCTSTR)IDD_DIALOG_ABOUT, hwnd, (DLGPROC)About
                        );
                    return 0;
                }
            default:
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
            }
        }
 

其中,如果处理的是 WM_COMMAND 消息时(当用户从菜单选中一个命令项目、当一个控件发送通知消息给去父窗口或者按下一个快捷键将发送 WM_COMMAND 消息),我们首先一般会用 LOWORD 宏来检查 wParam 参数,从而得出“菜单 ID”或“控件ID”,这两者都是资源 ID,像上面的 ID_HELP_ABOUT 和 IDD_DIALOG_ABOUT 都是资源 ID 。

在使用资源 ID 时经常会看到一个宏 MAKEINTRESOURCE ,这个宏的功能是将资源 ID 转换为资源名(字符串形式),很多 API 函数在引用资源时都是通过资源名来引用的。

 

 

分享到:
评论

相关推荐

    vc编写中国象棋-源码注释_chess_vc编写中国象棋源码+注释_象棋_

    resource.hchess.rc这是整个工程中使用的Windows资源列表。包括置于res子目录下的图标,位图以及光标等内容。define.h这是一个包含程序中的数据表示的定义的头文件。NewGame.hNewGame.cpp这一对文件定义并实现用于新...

    精通WindowsAPI.pdf

    第1章 Windows应用程序开发入门..........................................................................................16 1.1 第一个实例程序...............................................................

    HA_Passolo2011CollaborationSP6_gnatix.rar

    它支持众多文件格式,包括可执行程序文件、资源文件和基于 XML 的文件。文本可以被翻译为多种语言,包括亚洲语系(Unicode 码)以及书写方式为从右向左的语言,比如希伯来语和阿拉伯语。 可用 Passolo 本地化的文件...

    精通Windows.API-函数、接口、编程实例.pdf

    9.5.2 资源ID定义和头文件 272 9.5.3 在程序中使用资源 273 9.6 菜单 273 9.6.1 菜单资源和菜单句柄 273 9.6.2 动态增加、删除、设置菜单及菜单项 274 9.6.3 菜单消息处理 274 9.7 对话框 275 9.7.1 ...

    计算机病毒与木马程序设计剖析- 修改系统文件(源代码)

    含在主资源文件 modifyfile.rc 中。 res\modifyfile.rc2 此文件包含不由 Microsoft Visual C++ 编辑的资源。 应将所有不能由资源编辑器编辑的资源放在此文件中。 ////////////////////////////////////////////...

    ZLG_UDS_DEMO.rar

    此图标包括在主资源文件 ZLG_UDS_DEMO.rc 中。 res\ZLG_UDS_DEMO.rc2 此文件包含不在 Microsoft Visual C++ 中进行编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。 应用程序向导创建一个对话...

    ZLG_OBD_2_DEMO.rar

    此图标包括在主资源文件 ZLG_UDS_DEMO.rc 中。 res\ZLG_UDS_DEMO.rc2 此文件包含不在 Microsoft Visual C++ 中进行编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。 应用程序向导创建一个对话...

    ZLG_ISO_TP_DEMO.rar

    此图标包括在主资源文件 ISO_TP_15765_DEMO.rc 中。 res\ISO_TP_15765_DEMO.rc2 此文件包含不在 Microsoft Visual C++ 中进行编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。 应用程序向导创建...

    公式分析器

    这是程序使用的所有 Microsoft Windows 资源的列表。 它包含存储在 RES 子目录下的图标、位图和光标。 此文件可在 Microsoft Visual C++ 中直接编辑。 resExpressionProcess.rc2 此文件包含不由 ...

    C++单双游戏

    这是程序使用的所有 Microsoft Windows 资源的列表。 它包含存储在 RES 子目录下的图标、位图和光标。 此文件可在 Microsoft Visual C++ 中直接编辑。 res\GameServer.rc2 此文件包含不由 Microsoft Visual...

    停等协议模拟与实现 mfc界面

    图标包含在主资源文件 StopWaitComm.rc 中。 res\StopWaitComm.rc2 此文件包含不由 Microsoft Visual C++ 编辑的资源。 应将所有不能由 资源编辑器编辑的资源放在此文件中。 ///////////////////////////////...

    精通WindowsAPI 函数 接口 编程实例

    9.5.2 资源ID定义和头文件 272 9.5.3 在程序中使用资源 273 9.6 菜单 273 9.6.1 菜单资源和菜单句柄 273 9.6.2 动态增加、删除、设置菜单及菜单项 274 9.6.3 菜单消息处理 274 9.7 对话框 275 9.7.1 ...

    自行复制软件

     图标包含,由主资源文件UThief.rc的。 水库\ UThief.rc2中  此文件中包含的资源,由Microsoft编辑 的Visual C + +。你应该将所有资源不可编辑 在这个文件中的资源编辑器。 应用程序向导将创建一个对话框类: ...

    vc 文件加密代码

    图标包含在主资源文件 xmlEnctry.rc 中。 res\xmlEnctry.rc2 此文件包含不由 Microsoft Visual C++ 编辑的资源。 应将所有不能由 资源编辑器编辑的资源放在此文件中。 /////////////////////////////////////...

    学生成绩管理(Visual C++ )

    这些文件定义和实现 CChildFrame 类,此类 支持 MDI 应用程序中的子窗口。 ////////////////////////////////////////////////////////// 应用程序向导将创建一种文档类型和一个视图: StudentScoreDoc.h、...

    vs2010聊天程序

    此图标包括在主要资源文件 NetChatClient.rc 中。 res\NetChatClient.rc2 此文件包含不在 Microsoft Visual C++ 中进行编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。 /////////////////////...

    SDL Passolo 2011 合作版 SP9 (11.9.0.53) 已注册中文版

    它支持众多文件格式,包括可执行程序文件、资源文件和基于 XML 的文件。文本可以被翻译为多种语言,包括亚洲语系(Unicode 码)以及书写方式为从右向左的语言,比如希伯来语和阿拉伯语。 Passolo 的使用非常容易,...

    ScreenCapture

    图标包含在主资源文件 ScreenCapture.rc 中。 res\ScreenCapture.rc2 此文件包含不由 Microsoft Visual C++ 编辑的资源。 应将所有不能由 资源编辑器编辑的资源放在此文件中。 /////////////////////////////...

    PCRecord 项目您可以二次开发,增减功能,文件及支持的芯片

    &lt;br&gt;PCRecord.rc 这是项目的主要资源文件,列出项目使用的所有 Microsoft Windows 资源。它包括 RES 子目录中存储的图标、位图和光标。此文件可以直接在 Microsoft Visual C++ 中进行编辑。项目资源位于 2052...

Global site tag (gtag.js) - Google Analytics