第十章 菜单及其它资源part1

资源不能从程序原始码中定义的变量直接存取,Windows提供函数直接或间接地把它们加载内存以备使用。

代表函数:即LoadIcon和LoadCursor。它们从Windows中加载二进制图标和光标映象,并传回该图标或光标的句柄。

 

10.1 图标、光标、字符串和自订资源

将图标添加到程序

RESOURCE.H:列出了程序的所有资源和一个让程序引用资源的表头文件.

扩展名为RC的文件:资源描述档.

不必直接建立RESOURCE.H文件,而是由Developer  Studio为您建立一个。这个时候就有RESOURCE.H文件了

刚开始上面的代码是编译不过的。往RC文件里面加入一个资源(这里的资源是指图标),然后修改其ID为:IDI_ICON,

中加入宏定义了,这个时候就可以编译通过了.

取得图示的句柄。使用叙述

cxIcon = GetSystemMetrics (SM_CXICON);

cyIcon = GetSystemMetrics (SM_CYICON);

取得图示的大小。然后,程序通过多次呼叫

DrawIcon(hdc, x, y, hIcon);

 

 

取得图示句柄

ICONDEMO.RC里面的有AFXRES.H头文件:它包含了在建立由机器产生的

 MFC项目时由Developer Studio使用的常用标识符。

IDI_ICON ICON DISCARDABLE "icondemo.ico" 是资源描述档的ICON叙述

DISCARDABLE关键词:必要时Windows可以从内存中丢弃图标

程序可以通过呼叫LoadIcon函数取得此图示的句柄:

  hIcon = LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ICON));

LoadIcon传回HICON型态的值,它是图示的句柄

LoadIcon的第一个参数,是指出资源来自哪个文件的执行实体句柄。使用hInstance表示它来自程序自己的.EXE文件。

LoadIcon的第二个参数实际上被定义为指向字符串的指针。

 

默认情况下的定义:IDI_APPLICATION也在WINUSER.H中用MAKEINTRESOURCE定义,#define IDI_APPLICATION MAKEINTRESOURCE(32512) 

可以使用两种方法之一引用图示:1.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE (125));

                                           2.另一个不易阅读的方式是:hIcon = LoadIcon(hInstance, TEXT ("#125")) ;

 

 

在程序中使用图标

想在程序执行的时候,动态地更改程序的图标, 可以使用SetClassLong来达到目的

SetClassLong (hwnd, GCL_HICON,  LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ALTICON)));

可以使用GetClassLong获得句柄DrawIcon(hdc, x, y, GetClassLong(hwnd, GCL_HICON));

LoadIcon是取得句柄但不需要清除句柄的少数几个函数之一。

 

 

使用自订光标

自订游标一般为单色,大小为32×32图素。

可以在对象类别定义中设定自订光标

wndclass.hCursor  =  LoadCursor(hInstance, MAKEINTRESOURCE (IDC_CURSOR));

如果光标用文字名称定义wndclass.hCursor = LoadCursor (hInstance, szCursor) ;

如果使用了预先定义的子窗口控件,就可以使用以下方法改变窗口类别的hCursor字段:

SetClassLong (hwndChild, GCL_HCURSOR, LoadCursor(hInstance, TEXT("childcursor"));

 

 

字符串资源

字符串资源主要是为了让程序转换成其它语言时更为方便。

可以使用LoadString呼叫把字符串复制到程序数据段的缓冲区中:

  LoadString(hInstance, id, szBuffer, iMaxLength);

参数id是ID,它加在资源描述文件中每个字符串的前面;szBuffer是指向接收字符串的字符数组的指针

iMaxLength是送入szBuffer中的最大字符数。 函数传回字符串中的字符数。

所有资源文字-包括字符串表中的文字-以Unicode格式储存在.RES编译资源文件以及最终的EXE文件中。

每一个字符串资源在[RESOURCE.H]里都定义了一个标示符,在资源描述文件具有此字符串表。

 

 

自订的资源

自订资源让连结.EXE文件中的各种数据更为方便,对取得程序中的数据也是如此。

在程序的初始化(比如,在处理WM_CREATE消息时)期间,您可以获得资源的句柄:

hResource = LoadResource (hInstance, FindResource (hInstance, TEXT ("BINTYPE"), MAKEINTRESOURCE(IDR_BINTYPE1))) ;

事实上,LoadIcon和LoadCursor函数就用到了LoadResource和FindResource函数。

您需要存取文字时,呼叫:pData = LockResource(hResource);

LockResource将资源加载内存(如果还没有加载的话),然后它会传回一个指向资源的指标。

 

在WndProc处理WM_CREATE时,使用FindResource和LoadResource取得资源句柄。

使用LockResource锁定资源,并且使用一个小程序将文件末尾的反斜线(/)换成0,这有

于后面WM_PAINT消息处理期间使用的DrawText函数。

子窗口的滚动条有一个自动的键盘接口,因此在POEPOEM中没有处理WM_KEYDOWN。

IDS_APPNAME和IDS_CAPTIONPOEPOEM字符串在程序的开始由LoadString加载内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值