1. 程式人生 > WINDOWS開發 >WIN32開發下設定對話方塊左上角的圖示

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