Windows api资源篇

WIndows的资源有:

Icons
Cursors
Character strings
Custom resources
Menus
Keyboard accelerators
Dialog boxes
Bitmaps

资源:Resources是数据,保存在.EXE文件中,但是却不在程序段中,所以没办法像int a;这样引用它,Windows提供了函数把资源load到memory,我们才能用。

resource script (.rc)列出了程序所有资源,RESOURCE.h头文件让你的程序可以引用这些资源。

resource.h头文件允许C源文件使用与source script同名的identifiers

resource script 就是一个文本文件,它包含了能够表示问文本的资源(菜单,对话框)的文本表达式,包含了不能表示为文本的资源(图标,光标)的二进制文件的引用。



Icon:

resource script把ICONDEMO.ico图标文件与IDI_ICON等同起来
资源文件会被资源编译器RC.EXE编译,resource script转换成二进制文件,最后被编译了的.res文件在连接阶段与.OBJ and .LIB这些文件一样被指定连接形成.EXE

获取Icon句柄:
hIcon = LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ICON)) ;
LoadIcon函数返回HICON,第一个参数是资源所在的实例句柄,第二个参数是指向字符串的指针,MAKEINTRESOURCE是把资源标示符由数字变成指向字符串的指针
Icon的ID可以是字符串(要用""括起来)那么.h文件就没有define语句把字符串定义成一个Int,就不用再MAKRINTRESOURCE,可以直接用ID的字符串。


GetSystemMetrics(SM_CXICON/SM_CYICON)一般返回都是32*32,客户区的Icon和桌面上的Icon都是32*32的
GetSystemMetrics(SM_CXSMSIZE/SM_CYSMSIZE)返回的是16*16,小型Icon的size,标题栏的和任务栏的图标都是这个size

SetClassLong (hwnd, GCL_HICON,LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ALTICON))) ;//动态改变窗口的icon


Cursor:

自定义cursor一般都是32*32的,同时不好忘记设置cursor的hot spot,VS2012有个设置作用点工具来设hot spot的
如果使用了子窗口,那么子窗口设计类的时候hCursor这项可以修改,如果是Windows定义好的类,可以利用SetClassLong来修改
SetClassLong (hwndChild, GCL_HCURSOR,LoadCursor (hInstance, TEXT ("childcursor")) ;

如果只是窗口的一个逻辑分区,可以利用SetCursor来修改,防止闪烁则把类的hCursor设为NULL就不会自动用类的光标去刷新了
SetCursor (hCursor) ;


String Resource:

把字符串作为资源使用,可能会令理解更费力
LoadString (hInstance, id, szBuffer, iMaxLength) ;
LoadString()函数用于加载字符串资源,id是字符串资源的id,szBuffer则是用来接收字符串的字符串数组,iMaxLength是szBuffer数组的最大长度,函数返回值是加载到的字符串的实际长度。

字符串的ID通常define在头文件中,所以编程的时候记得包含头文件


自定义资源:

VS2012插入自定义资源的方法是直接import,它没custom选的,接着要写自定义资源的type,接着resource script就多了如下的语句,IDR_BINTYPE1是数字标示符,可以用字符串代替
IDR_BINTYPE1 BINTYPE BINDATA.BIN

hResource = LoadResource (hInstance,FindResource (hInstance, TEXT ("BINTYPE"),MAKEINTRESOURCE (IDR_BINTYPE1))) ;
hResource是HGLOBAL类型的,是内存块的句柄
LoadResource并不真正把资源加载到内存上

pData = LockResource (hResource) ;
LockResource加载资源到内存,并且返回指向它的指针:

FreeResource (hResource) ;
完成对自定义资源的操作,可以free it from memory


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值