VC SDK下如何設置對話框左上角的圖標

鬱悶,今天弄了一下午就爲了弄明白一件事,爲什麼我之前創建的對話框左上角有圖標,而今天它死活不肯出來,搞了半天終於知道原來是用錯函數了。。。


SetClassLong(hwndDlg,GCL_HICON,(long)hIcon);
SendMessage(hwndDlg,WM_SETICON,ICON_BIG,(long)hIcon);
SendDlgItemMessage(hwndDlg,IDD_DIALOG,WM_SETICON,ICON_BIG,(long)hIcon);

這三個咋一看長得差不多,尤其是最後兩個

SendDlgItemMessage是爲了方便向對話框中的控件發送消息而設立的,而我卻剛好栽在這個函數上

實踐證明,要向對話框窗口發送消息,還是SendMessage函數靠譜些,SendDlgItemMessage可能會不起效果

SetClassLong是個非常好的函數,可以用它來設置圖標、光標(光標一定要用這個函數,用WM_SETCURSOR沒用的)等等,其他的我也沒用過就不清楚了

最後附上源碼吧,其實現在想起來也感覺當時蠻傻的,居然糾結了一下午,還以爲是編譯器出問題了,連電腦都重啓過。。。

#include "stdafx.h"
#include "resource.h"
HICON hIcon;
int CALLBACK DialogProc(    HWND hwndDlg,  // handle to dialog box
							UINT uMsg,     // message
							WPARAM wParam, // first message parameter
							LPARAM lParam  // second message parameter
						)
{
    switch (uMsg)
    {
	case WM_INITDIALOG:
		//SetClassLong(hwndDlg,GCL_HICON,(long)hIcon);//有效
		SendMessage(hwndDlg,WM_SETICON,ICON_BIG,(long)hIcon);//有效
		//SendDlgItemMessage(hwndDlg,IDD_DIALOG,WM_SETICON,ICON_BIG,(long)hIcon);//無效
		break;
	case WM_CLOSE:
		//DeleteObject(hIcon);
		EndDialog(hwndDlg,NULL);
		break;
	default:
		return FALSE;
	}
	return TRUE;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	// TODO: Place code here.
	hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON2));
	DialogBoxParam(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,DialogProc,0);
	return 0;
}


發佈了4 篇原創文章 · 獲贊 21 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章