WIN32开发下设置对话框左上角的图标

实现方法

通过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;
}

猜你喜欢

转载自www.cnblogs.com/veis/p/12676769.html
今日推荐