WIN32開發下設定對話方塊左上角的圖示
阿新 • • 發佈:2020-04-11
目錄
實現方法
通過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; }