VC SDK下如何設定對話方塊左上角的圖示
阿新 • • 發佈:2019-02-15
鬱悶,今天弄了一下午就為了弄明白一件事,為什麼我之前建立的對話方塊左上角有圖示,而今天它死活不肯出來,搞了半天終於知道原來是用錯函數了。。。
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; }