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

统一资源管理:

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

Java代码  

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

(2) 对话框资源类型:(DIALOG,DIALOGEX 等)(对话框可以包括若干子控件,如菜单,按钮等,定义语法如下)

Cpp代码  

  1. //模板
  2. nameID DIALOGEX x, y, width, height [ , helpID]] [[ optional-statements]]  {control-statements }
  3. //例子
  4. IDD_DIALOG_ABOUT DIALOGEX 0, 0, 290, 59        //DIALOGEX RESOURCE
  5. STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
  6. CAPTION "Dialog"        // CAPTION   STATEMENT
  7. FONT 8, "MS Shell Dlg", 400, 0, 0x1        // FONT  STATEMENT
  8. BEGIN
  9. LTEXT           "Windows Resource Demo",3001,26,14,119,8,SS_NOPREFIX    //  CONTROL
  10. LTEXT           "Copyright (C) 2008",3002,26,30,119,8                        //  CONTROL
  11. DEFPUSHBUTTON   "OK",IDOK,234,14,32,14,WS_GROUP                //  CONTROL
  12. DEFPUSHBUTTON   "Quit",IDCANCEL,234,31,32,14,WS_GROUP            //   CONTROL
  13. END
//模板
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) 菜单资源类型:

Cpp代码  

  1. //定义:
  2. //MENU:
  3. menuID MENU [[optional-statements]] { item-definitions ... }
  4. //POPUP:
  5. POPUP text, [[optionlist]] { item-definitions ... }
  6. //例子
  7. //MENU:
  8. IDR_MENU_MAIN MENU        //MENU RESOURCE
  9. BEGIN
  10. POPUP "File"        // POPUP RESOURCE
  11. BEGIN
  12. MENUITEM "&Open",        ID_FILE_COPY    // MENUITEM  STATEMENT
  13. MENUITEM "&Save",        ID_FILE_SAVE40002// MENUITEM  STATEMENT
  14. MENUITEM SEPARATOR            // MENUITEM  STATEMENT
  15. MENUITEM "E&xit",         ID_FILE_EXIT  // MENUITEM  STATEMENT
  16. END
  17. POPUP "Eidt"        // POPUP RESOURCE
  18. BEGIN
  19. MENUITEM "&Copy",        ID_EIDT_COPY// MENUITEM  STATEMENT
  20. MENUITEM "&Paste",     ID_EIDT_PASTE// MENUITEM  STATEMENT
  21. END
  22. POPUP "Help"        // POPUP RESOURCE
  23. BEGIN
  24. MENUITEM "&About",    ID_HELP_ABOUT// MENUITEM  STATEMENT
  25. END
  26. END
  27. //POPUP:
  28. IDR_MENU_POPUP MENU
  29. BEGIN
  30. POPUP "POPUP"
  31. BEGIN
  32. MENUITEM "&Copy",        ID_POPUP_COPY
  33. MENUITEM "&Paste",        ID_POPUP_PASTE
  34. MENUITEM "Cu&t",        ID_POPUP_CUT
  35. POPUP "&Info"
  36. BEGIN
  37. MENUITEM "Co&unt",         ID_INFO_A
  38. MENUITEM "&Size",            ID_INFO_B
  39. END
  40. END
  41. END
//定义:
//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)字符串表类型:

Cpp代码  

  1. //定义
  2. STRINGTABLE [[optional-statements]] {stringID string ...}
  3. //例子
  4. STRINGTABLE
  5. BEGIN
  6. IDS_1 L"5\x00BC-Inch Floppy Disk"
  7. IDS_1a "5\xBC-Inch Floppy Disk"
  8. IDS_2 L"Don‘t confuse \x2229 (intersection) with \x222A (union)"
  9. IDS_3 "Copyright \xA92001"
  10. IDS_3a L"Copyright \x00a92001"
  11. END
//定义
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)自定义类型:

Cpp代码  

  1. nameID typeID filename
  2. nameID typeID { raw-data }
nameID typeID filename
nameID typeID { raw-data }

2. 控件(Controls):

Cpp代码  

  1. //定义
  2. <控件类型> text, id, x, y, width, height [[, style [[, extended-style]]]]
  3. <控件类型>, id, x, y, width, height [[, style [[, extended-style]]]]
  4. //例子
  5. LTEXT           "Windows Resource Demo",3001,26,14,119,8,SS_NOPREFIX    //  CONTROL
  6. LTEXT           "Copyright (C) 2008",3002,26,30,119,8                        //  CONTROL
  7. DEFPUSHBUTTON   "OK",IDOK,234,14,32,14,WS_GROUP                //  CONTROL
  8. DEFPUSHBUTTON   "Quit",IDCANCEL,234,31,32,14,WS_GROUP            //   CONTROL
//定义
<控件类型> 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 头文件中。如下:

Cpp代码  

  1. //{{NO_DEPENDENCIES}}
  2. // Microsoft Visual C++ generated include file.
  3. // Used by Windows.rc
  4. //
  5. #define IDD_DIALOG_ABOUT                101
  6. #define IDR_MENU_MAIN                   101
  7. #define IDR_MENU_POPUP                  102
  8. #define IDI_ICON_MAIN                   103
  9. #define IDC_EDIT_ABOUT                  1001
  10. #define ID_FILE_COPY                    40001
  11. #define ID_FILE_SAVE40002               40002
  12. #define ID_FILE_EXIT                    40003
  13. #define ID_EIDT_COPY                    40004
  14. #define ID_EIDT_PASTE                   40005
  15. #define ID_HELP_ABOUT                   40006
  16. #define ID_COPY_PASTE                   40007
  17. #define ID_COPY_PASTE40008              40008
  18. #define ID_POPUP_COPY                   40009
  19. #define ID_POPUP_PASTE                  40010
  20. #define ID_POPUP_CUT                    40011
  21. #define ID_POPUP_INFO                   40012
  22. #define ID_INFO_A                       40013
  23. #define ID_INFO_B                       40014
  24. // Next default values for new objects
  25. //
  26. #ifdef APSTUDIO_INVOKED
  27. #ifndef APSTUDIO_READONLY_SYMBOLS
  28. #define _APS_NEXT_RESOURCE_VALUE        104
  29. #define _APS_NEXT_COMMAND_VALUE         40015
  30. #define _APS_NEXT_CONTROL_VALUE         1000
  31. #define _APS_NEXT_SYMED_VALUE           101
  32. #endif
  33. #endif
//{{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

在程序中使用资源:

Cpp代码  

  1. case WM_COMMAND:
  2. {
  3. switch (LOWORD(wParam))
  4. {
  5. // 在“帮助”菜单中选择“关于”
  6. case ID_HELP_ABOUT:
  7. {
  8. DialogBox(
  9. hinst, (LPCTSTR)IDD_DIALOG_ABOUT, hwnd, (DLGPROC)About
  10. );
  11. return 0;
  12. }
  13. default:
  14. return DefWindowProc(hwnd, uMsg, wParam, lParam);
  15. }
  16. }
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 函数在引用资源时都是通过资源名来引用的。

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

时间: 2024-10-15 00:47:30

.rc Windows资源文件定义和使用的相关文章

DuiVision开发教程(3)-XML资源文件定义介绍

全局资源定义-resource.xml 基于DuiVision界面库的程序,需要有一个默认的资源定义XML文件,此文件默认的位置是exe文件所在路径下的xml\resource.xml文件,如果使用了zip压缩文件来保存所有资源文件,则此文件的位置是在压缩包中的xml\resource.xml文件.此文件中可以定义程序的全局配置.XML文件.字体.图片.文字等资源,示例如下: <?xml version="1.0" encoding="utf-8"?>

解决windows server 2003在center中克隆提示无法找到windows资源

问题: 在center中克隆windows server2003的时候我们会遇到下面的问题,提示未在服务器上找到windows自定义资源 产生原因: 这是由于系统本身的原因,windows server 2008 以后的版本默认都把sysprep集成在了内核中,所以克隆的时候可以直接调用该程序,而windows server2003以前的版本默认没有该程序,所以在克隆的时候会提示没有在服务器上找到windows资源,其实就是没有找到sysprep这个程序. 解决办法: 我们手动把windows

文件操作 - Windows资源文件的读取

=============== Windows资源文件的读取 =============== Windows资源操作函数 12 LoadAccelerators 加载快捷键资源 14 LoadBitmap 加载位图资源 16 LoadCursor 加载光标资源 18 LoadIcon 加载图标资源 20 LoadMenu 加载菜单资源 22 LoadString 加载字符串资源 Windows资源操作函数 29 FindResource 从指定模块中加载指定名称.类型的资源 31 SizeofR

Windows 资源计数器

对象 计数器 描述 度量值 System %Total Processor Time 系统上所有处理器都忙于执行非空闲线程的时间的平均百分比,体现整体的处理器利用率.例如在多处理器系统上,当所有处理器始终处于忙碌状态,则此值为100%:当所有处理器中的1/4处于100%忙碌状态,则此值为25% 该值若持续高于80%~90%,则系统面临处理器方面的瓶颈.可通过升级CPU或者增加CPU的方式改善 Process Queue Length 线程在等待分配CPU资源所排队列的长度,此长度不包括正在占有C

LR监控Windows资源

1.监控准备: 监控方: 1)安装tcp/ip协议下的netbios 2)用administrator登录 被监控方: 1)被监控的Windows开启两个服务: Remote ProcedureCall(RPC)和Remote Registry Service 开启位置:右键“我的电脑”->管理->服务和应用程序->服务 2)被监控的Windows中要有C$共享文件夹 查看位置:右键“我的电脑”->管理->共享文件夹->共享,在这里面要有C$这个共享文件夹,要是没有自己

Qt之Windows资源文件(.rc文件)

简述 在Windows下使用Qt时,通常会用到Windows的资源文件 - 为exe设置信息,其中包括:文件说明.产品名称.产品版本.版权等信息... 由于是Windows平台相关的东西,Qt助手中对于rc文件几乎没有任何介绍(在Setting the Application Icon一文中简单提到). 简述 资源信息 效果 实现 图标 参数 示例 VERSIONINFO 格式化VERSIONINFO 参数 资源信息 效果 实现 首先,我们添加一个名为version.h的头文件,包含资源信息.

WINDOWS资源编译器出错信息

ACCELERATORS语句的type域应包含ASCⅡ值或VIRTKEY值.        BEGIN expected in table        BEGIN关键字应紧跟在ACCELERATORS关键字后        BEGIN expected in dialog        BEGIN关键字应紧跟在DIALOG关键字后        BEGIN expected in menu        BEGIN关键字应紧跟在MENU关键字后        BEGIN expected in

使用Loadrunner监控Windows资源

为了区分把装有loadrunner的机器称作A,被监控资源的服务器(windows)称作B 1.确保B机器Administrator账户是可使用状态:右键计算机→ 管理→ 本地用户和组→ 用户,其中Administrator用户账户非禁用,密码永不过期,设置好密码 2.确保机器B的Remote ProcedureCall(RPC)和Remote Registry Service服务开启:右键"我的电脑"->管理->服务和应用程序->服务里设置 3.修改机器B的网络安全

Windows资源监视器软件的原理

微软给我们提供了一些很好的程序,比如资源监视器,可以从这个软件里获取分析windows的自身的一些性能数据,比如CPU.内存.磁盘数据.文件读写.进程线程等,他具体怎么实现呢,今天这天文章就带你去获取其真实的原理. 1.分析 打开windows任务栏管理器,在其性能选项里,可以看到性能监控的一些机器性能图表 这个只是一些概要数据,如果要看详细的内容,可以点击左下角的“打开资源监视器”,会自己开启一个进程perfmon.exe的进程,这个进程界面会显示详细的资源信息 我们可以看到每个进程打开了什么