1.Windows资源
1.图标资源
· 添加资源
注意图标的大小,一个图标文件中,可以有多个不同大小的图标。
· 加载
HICON LoadIcon(
HINSTANCE hInstance,
LPCTSTR lpIconName
);//成功后返回HICON句柄
· 设置:注册窗口类
资源
重画了16x16和32x32图标后保存
在注册窗口类中,挂上图标
wc.hIcon = LoadIcon(hInstance,(LPCWSTR)IDI_ICON1);//默认图标
2.光标资源
· 添加光标的资源
光标的大小默认是32x32像素,每个光标有HotSpot,是当前鼠标的热点
· 加载资源
HCURSOR LoadCursor(
HINSTANCE hInstance,
LPCTSTR lpCursorName
);//可以为NULL,获取系统默认的Cursor
· 设置资源
在注册窗口是,设置光标
使用SetCursor设置光标
资源管理器添加光标资源
左上角选择作用点,也就是光标图案真正能点击的作用域,不设置的话默认是图标左上角
wc.hCursor = LoadCursor(hInstance,(LPCWSTR)IDC_CURSOR1);//默认光标
在注册窗口类中挂上光标资源
另一种挂光标资源的方式:
HCURSOR SetCursor(
HCURSOR hCursor//光标句柄
)
WM_SETCURSOR消息参数
wPARAM - 当前使用的光标句柄
lPARAM - LOWORD 当前区域的代码(Hit - Test code)
HTCLIENT/HTCAPTION
HIWORD - 当前鼠标消息ID
SetCursor()函数必须在WM_SETCURSOR消息中调用
case WM_SETCURSOR:
{
HCURSOR hCur = LoadCursor(G_HINS, (LPCWSTR)IDC_CURSOR1);
SetCursor(hCur);
return 0;
}
3.字符串资源
1.添加字符串资源
添加字符串表,在表中增加字符串
可以自定义ID和字符串内容,我输入了两个中文字符串,一个是窗口,一个是帮助,并且修改了它们的id
2.在窗口中挂上字符串资源
int LoadString(
HINSTANCE hInstance,
UINT uID,//字符串ID
LPTSTR lpBuffer,//存放字符串BUFF
int nBufferMax//字符串BUFF长度
)
wchar_t TEXT[256] = {0};
LoadString(hInstance,IDS_help, TEXT, 256);
HWND hwnd = CreateWindow((LPCWSTR)L"main", TEXT, WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hInstance, NULL);
4.加速键资源
· 添加 资源添加加速键表,增加命令ID对应的加速键
添加了两个加速键,并修改了ID和修饰以及键符
· 使用
//加载加速键表
HACCEL LoadAccelerators(
HINSTANCE hInstance,
LPCTSTR lpTableName
)
//翻译加速键
int TranslateAccelerator(
HWND hWnd,//处理消息的窗口句柄
HACCEL hAccTable,//加速键句柄
LPMSG lpMsg//消息
)//如果不是加速键,返回零
TranslateAccelerator在加速键表中找到对应键值(例如:Ctrl+M)会发送一个WM_COMMAND消息
在消息循环中翻译处理:
HACCEL hacc = LoadAccelerators(hInstance, (PCWSTR)IDR_ACCELERATOR1);
while (GetMessage(&nMSG, NULL, 0, 0))
{
if(!TranslateAccelerator(hwnd, hacc, &nMSG));
{
TranslateMessage(&nMSG);
DispatchMessage(&nMSG);//派发消息,将消息交给窗口处理函数处理
}
}
由于加速键的ID (ID_NEW\ID_OUT)和菜单的中新建和退出的ID是一样的,即绑定了,所以在摁下加速键以后应该会产生同样的效果。
LRESULT CALLBACK test(HWND hwnd, UINT msgID, WPARAM wParam, LPARAM lParam)
{
switch (msgID)
{
case WM_SETCURSOR:
{
HCURSOR hCur = LoadCursor(G_HINS, (LPCWSTR)IDC_CURSOR1);
SetCursor(hCur);
return 0;
}
break;
case WM_COMMAND:
ON_COM(hwnd, wParam);
break;
case WM_CONTEXTMENU:
ON_CONTEXT(hwnd, lParam);
break;
}
return DefWindowProc(hwnd, msgID, wParam, lParam);
}
void ON_COM(HWND hwnd, WPARAM wParam)
{
switch (LOWORD(wParam))
{
case ID_OUT:
if (MessageBox(hwnd, L"是否关闭?", L"infor", MB_OKCANCEL | MB_ICONEXCLAMATION) == IDOK)
{
PostQuitMessage(0);
}
break;
case ID_NEW:
MessageBox(hwnd, L"新建了", L"infor", MB_OK);
break;
}
}