概述
首先解释一下句柄:
win32中的句柄在数值上表示一个32位的数,用来标识应用程序/进程中不同对象以及同类对象中的不同实例,而所谓实例就是指被实例化的对象,实例化的过程就是通过类创建对象的过程。实例化对象的目地是为对象开辟内存空间。所以句柄是指向一片内存空间的。
句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。也就是说句柄是指向指针的指针。
资源加载过程简单来说,rc资源通过编译成为二进制res资源,通过链接加载到程序中,程序运行过程中通过句柄以及资源ID找到资源的内存空间,进而将资源加载展示。
1、菜单资源
1、添加资源文件
2、加载资源文件(三种方式)
1、注册窗口类时加载菜单资源
2、创建窗口时传参(菜单资源句柄)设置
3、在主窗口产生WM_CREATE消息后,通过SetMenu函数设置
获取menu句柄函数:
HMENU LoadMenuA(
[in, optional] HINSTANCE hInstance,
[in]
LPCSTR
lpMenuName
);
2、图标资源
1、添加资源
2、加载资源
注册窗口类时加载图标资源
获取图标句柄函数:
HICON LoadIconA(
[in, optional] HINSTANCE hInstance,
[in]
LPCSTR
lpIconName
);
3、光标资源
1、添加资源
2、加载资源
1、注册窗口类时加载光标资源 (仅对客户区生效)
2、通过SetCursor函数设置 (对客户区、标题栏区域均生效)
获取光标句柄函数:
HCURSOR LoadCursorA(
[in, optional] HINSTANCE hInstance,
[in]
LPCSTR
lpCursorName
);
SetCursor设置时机:
鼠标移动会产生WM_SETCURSOR消息:
WPARAM 当前使用光标句柄
LPARAM
LOWDRD 当前区域 (HTCLIENT / HTCAPTION)
HIWORD 当前鼠标消息ID(左/右 up/down)
4、字符串资源
int LoadStringA(
[in, optional] HINSTANCE hInstance,
[in]
UINT
uID,
[out]
LPSTR
lpBuffer,
[in]
int
cchBufferMax
);
5、加速键资源
1、添加加速表资源,增加命令ID对应的加速键
2、使用
1、加载加速键表
HACCEL LoadAccelerators(
HINSTANCE hlnstance,
//模块的一个实例的句柄
LPCTSTR lpTableName //指向即将调入的加速键表的名字字符串。
);
//返回 加速键表 句柄
2、翻译加速键表
int
WINAPI
TranslateAcceleratorW(
_In_ HWND hWnd,//处理消息的窗口句柄
_In_ HACCEL hAccTable,//快捷键表句柄。快捷键表由前面LoadAccelerators函数调用装入
_In_ LPMSG lpMsg//消息结构指针
); //如果时加速键,返回非0
在WM_COMMAND中相应的消息参数:
WPARAM :HIWORD == 1 为加速键消息 0表示菜单消息
LOWARD 为命令ID
LPARAM : 为0
最后
以上就是虚心早晨为你收集整理的WIN32 资源的全部内容,希望文章能够帮你解决WIN32 资源所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复