第一次写博客,见谅
注意:
- 真的从0开始,只有一点C/C++基础
- 之前的学习记录都在电脑里,之后有空慢慢传上来
- 学的是win32,用的是vs2013,看的视频里老师用的是vs2010
- 写这个的主要目的是怕自己之后忘了,方便捡起来
--学习内容:资源文件:
1).rc文件:里面放着程序要用到的图片之类的(图标、按键用的图片)。需要一个resource.h(编译后变成.res)定义每个资源的ID(用户定义的一个整数)
2)使用RC资源
1.三个定义:资源,控件,声明。
图标、位图、对话框都是资源
有些资源里可以添加控件(比如对话框)
有些资源有声明(比如对话框的标题CAPTION就是一种声明)
2.创建描述(定义)资源使用方式的脚本.rc文件
然后弹出
(右键单击新建的标签页,打开所在文件夹,你会发现一波操作下来文件夹里多了以工程名命名的resource script类型文件(就是.rc,可以用记事本打开),resouce.h,以及一个.bmp(位图))保存之后.h文件中会自动给新建的资源define一个ID号,.rc文件里有对资源的一些描述(可以在.rc文件里直接修改)
对于对话框这个资源,vs工具箱里有可以加的控件(单选框、输入框之类的).rc文件里也可以对这些加入的控件进行修改
3.从资源文件里加载资源到程序中:Load系列函数
3-0.LoadImage
LoadImageW(
HINSTANCE hInst,//独立资源(非独立是指从解决方案资源文件中加载时)时为NULL
LPCWSTR name,//独立资源时为全路径 *:要用双斜杠,因为转义!
UINT type,//你加载的是光标(IMAGE_CURSOR),位图(IMAGE_BITMAP),图标(IMAGE_ICON)
int cx,//宽度(若为0:if(fuLoad==LR_DEFAULTSIZE)使用SM_CXICON/CXCURSOR;else则使用实际宽度
int cy,//高度同上
UINT fuLoad);//LR_DEFAULTCOLOR|LR_CREATEDIBSECTION|LR_LOADFROMFILE
3-1,3-2,3-3可用LoadImage替换,LoadImage可以直接Load位图图标光标,更好使。3-1,3-2只用于上载在.rc文件里的资源,而LoadImage可以通过资源的路径调用资源
MAKEINTRESOURCE能将整数强制类型转化为指针,此处用于将资源ID转化为指针作为LoadBitMap函数的第二个参数。要使用资源ID时,记得先include"resource.h"。
用完后要用DeleteObject删除资源句柄,避免内存泄露(有点像动态申请内存)
3-1.LoadBitMap
HBITMAP WINAPI LoadBitmapW(HINSTANCE hInstance, //要使用资源的模块的实例句柄,通常就是窗口句柄hInstance。
LPCWSTR lpBitmapName);//资源名称,可用MAKEINTRESOURCE宏获取此值
3-0,3-1上载之后要SendMessage向消息循环发送消息BM_SETIMAGE,关联位图与控件:
SendMessage(hBtn1,//控件句柄
BM_SETIMAGE,//发送的消息ID
(WPARAM)IMAGE_BITMAP,//这个消息ID下只能是IMAGE_BITMAP或者IMAGE_ICON
(LPARAM)hbmp);//将图像句柄与之关联
3-2LoadIcon
HICON WINAPI LoadIconW(HINSTANCE hInstance,//如果是系统图标,此处为NULL;如果从资源文件里加载自定义图标此处填hInstance
LPCWSTR lpIconName);
3-3.LoadCursor
HCURSOR WINAPI LoadCursor(HINSTANCE hInstance,LPCWSTR lpCursorName);
3-4.LoadString字符串资源上载到一个TCHAR数组中,可以作为窗口标题之类的东西
int WINAPI LoadStringW(HINSTANCE hInstance,//窗口hInstance,可以用GetMouduleHandle(NULL)获取当前程序实例句柄
UINT uID,//直接用资源ID
_Out_writes_to_(cchBufferMax, return + 1) LPWSTR lpBuffer,//TCHAR指针(通常是一个TCHAR数组名)
int cchBufferMax//sizeof(TCHAR数组)
);