static HICON hIcon1 = LoadIcon(hApp, MAKEINTRESOURCE(IDI_ICON1));
SendMessage(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon1); //任務欄 alt + tab
SendMessage(hMainWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon1); //標題欄 程序exe圖標
<1> HWNDCreateDialog( HINSTANCE hInstance, // handle to module
LPCTSTRlpTemplate, // dialog box template name
HWNDhWndParent, // handle to owner window
DLGPROClpDialogFunc // dialog box procedure);
<2> HWND CreateDialogIndirect( HINSTANCE hInstance, // handle to module
LPCDLGTEMPLATE lpTemplate, //dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc //dialog box procedure);
<3> HWND CreateDialogIndirectParam( HINSTANCE hInstance, // handle to module
LPCDLGTEMPLATE lpTemplate, // dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc, // dialog box procedure
LPARAM lParamInit // initialization value);
<4> HWND CreateDialogParam( HINSTANCE hInstance, // handle to module
LPCTSTR lpTemplateName, //dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc, //dialog box procedure
LPARAM dwInitParam //initialization value);
參數跟非模態對話框一致。CreateDialogParam會調用CreateWindowExe去創建一個窗口,所以這樣的對話框其實就是窗口。當然單獨一個對話框可以沒有父窗口直接單獨存在。
2 含有父窗口的對話框程序
3 自定義窗口類(無父窗口)的對話框程序
<1>在腳本中指定對話框的類型以及各種控件假定腳本名稱爲new.dlg
<2>然後在rc文件中添加腳本
<3>在WinMain函數註冊窗口類
注意這裏的CreateDialog的最後一個參數DLGPROC爲NULL,因爲在窗口類中指定了窗口過程函數。
- int WINAPI WinMain (HINSTANCE hInstance, HINSTANCEhPrevInstance,PSTR szCmdLine, intiCmdShow)
- {
- staticTCHAR szAppName[] = TEXT ("HexCalc");
- HWND hwnd ;
- MSG msg ;
- WNDCLASS wndclass ;
- wndclass.style = CS_HREDRAW | CS_VREDRAW ;
- wndclass.lpfnWndProc = WndProc ;
- wndclass.cbClsExtra = 0 ;
- wndclass.cbWndExtra = DLGWINDOWEXTRA ; // note here
- wndclass.hInstance = hInstance ;
- wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
- wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
- wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
- wndclass.lpszMenuName = NULL ;
- wndclass.lpszClassName =szAppName ;
- if(!RegisterClass (&wndclass))
- {
- MessageBox ( NULL, TEXT ("Thisprogram requires Windows NT!"), szAppName, MB_ICONERROR) ;
- return0 ;
- }
- hwnd =CreateDialog(hInstance,szAppName,NULL,NULL); //note here
- ShowWindow (hwnd, iCmdShow) ;
- UpdateWindow (hwnd) ;
- while(GetMessage (&msg, NULL, 0, 0))
- {
- TranslateMessage (&msg) ;
- DispatchMessage (&msg) ;
- }
- returnmsg.wParam ;
- }
12 從資源加載(無父窗口)的對話框程序
- LRESULT CALLBACKWndProc(HWND,UINT,WPARAM,LPARAM) ;
- int WINAPI WinMain (HINSTANCE hInstance, HINSTANCEhPrevInstance,PSTR szCmdLine, intiCmdShow)
- {
- HWND hwnd ;
- MSG msg ;
- //hwnd =CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)WndProc);
- hwnd =CreateDialogParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)WndProc,NULL);
- ShowWindow (hwnd, iCmdShow) ;
- UpdateWindow (hwnd) ;
- while(GetMessage (&msg, NULL, 0, 0))
- {
- TranslateMessage (&msg) ;
- DispatchMessage (&msg) ;
- }
- returnmsg.wParam ;
- }
生成的單獨對話框程序如下圖所示:
轉自:http://blog.csdn.net/ddupd/article/details/24491201