目录
实现方法
通过LoadIcon函数加载图标,然后通过SendMessage给自身窗口的WM_SETICON消息发送加载好的图标资源
(注:MFC下专门封装的函数为SetIcon,本质就是发送消息实现)
SendMessage函数和LoadIcon函数介绍
1.函数原型
HICON WINAPI LoadIcon(
_In_opt_ HINSTANCE hInstance,
_In_ LPCTSTR lpIconName
);
LRESULT WINAPI SendMessage(
_In_ HWND hWnd,
_In_ UINT Msg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
2.参数介绍(详细用法请参考MSDN)
hInstance : 资源句柄
lpIconName : 图标名称,需要把图标的ID通过MAKEINTRESOURCE这个宏转换一下
hWnd : 窗口句柄
Msg :目标消息类型
wParam :附加于消息信息
lParam : 附加于消息信息
3.返回值
HICON类型, 新加载图标的句柄,加载失败返回NULL
LRESULT类型,返回值指定消息处理的结果,取决于发送的消息
示例代码
备注:示例代码没有通过注册方式创建窗口,故需要自行通过VS添加窗口和图标资源
/*
* 图标ID:IDI_ICON
*
*/
#include <windows.h>
#include "resource.h"
HINSTANCE g_hInstance;
void OnInitDialog(HWND hwndDlg)
{
HICON hIcon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON));
SendMessage(hwndDlg, WM_SETICON, FALSE, (LPARAM)hIcon);
}
BOOL WINAPI MsgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
OnInitDialog(hwndDlg);
break;
case WM_CLOSE:
EndDialog(hwndDlg, IDCANCEL);
break;
default:
break;
}
return FALSE;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
g_hInstance = hInstance;
DialogBox(hInstance, (LPCTSTR)IDD_MAIN_DLG, NULL, MsgProc);
return 0;
}