六: Windows应用程序开发界面资源

资源在应用程序开发中具有重要的作用。尤其是将界面元素(菜单、图标、位图等)作为资源,对降低程序设计的工作量大有帮助。

资源脚本(. rc)

资源是在资源脚本(. rc)中进行配置的。例如,把资源名字起为Window,再对Window进行如下配置,

1 添加资源

通过添加资源窗口,可以向.rc文件中添加需要的资源,比如常用的Dialog,Bitmap,Menu等。
这里写图片描述
添加完相应的资源后,Window.rc 文件内容如下:
这里写图片描述

2 绘制资源

这部不需要写代码,智能的Visual Studio允许使用“所见即所得”的方式来对资源的界面进行开发,姑且使用“绘制”来表示吧。这步主要使用工具箱中的控件来“绘制”出需要的各种资源。这里需要注意资源ID的命名,起的名字要便于记忆且符合一定的规律,因为这样便于之后的开发与程序的维护。
Dialog:
这里写图片描述
Icon:
这里写图片描述
MENU_MAIN:
这里写图片描述
MENU_POPUP:
这里写图片描述

资源ID定义和头文件

资源 ID 是一个资源或资源子项的唯一标识,很多资源和子项都具有标识。上文中已经提过资源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

资源脚本文件和需要使用资源的程序文件都需要包含 Resource.h。在引用资源时,需要指明资源的 ID,资源 ID 在资源和程序中都是唯一标识,作为程序和资源的接口。

在程序中使用资源

图形用户界面一文中,也涉及到了如何在程序中使用资源。该文提供的源码内也有相应的实现。这里就详细的介绍在程序中使用资源。
源代码中引用图标和菜单资源,如下所示:

wcx.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON_MAIN)); // 图标
......
wcx.lpszMenuName = MAKEINTRESOURCE(IDR_MENU_MAIN); // 菜单资源

源代码中引用菜单项 ID 和对话框资源,如下所示:

        case ID_HELP_ABOUT:
        {
            DialogBox(
                hinst, (LPCTSTR)IDD_DIALOG_ABOUT, hwnd, (DLGPROC)About
                );
            return 0;
        }

这里的IDI_ICON_MAIN、IDR_MENU_MAIN、ID_HELP_ABOUT 和 IDD_DIALOG_ABOUT都是资源 ID。在 Resource.h 可以查找到其定义。
MAKEINTRESOURCE 是一个宏,这个宏的功能是将资源 ID 转换为资源名(字符串型),很多 API 函数在引用资源时都是通过资源名。
当然不是只有界面才会使用资源,任何程序都可以使用资源。资源中程序中也并非只用与图形用户界面。资源可以是任意的数据。比如完全可以将一些配置信息、动态连接库文件编译为exe的资源。在程序运行后,将资源数据写入到文件再使用。这样就可以将所有程序和数据集中在一个可执行文件里。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值