1. 程式人生 > >VC SDK下如何設定對話方塊左上角的圖示

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