1. 程式人生 > >Windows API一日一練 17 DialogBox和DialogBoxParam函數

Windows API一日一練 17 DialogBox和DialogBoxParam函數

常用 gin sdn 進度 靜態 函數 win 選項 感覺

對話框是比較常用的窗口,比如當你想讓用戶輸入一些參數時就可以使用對話框。或者提示一些警告的信息,都是可以使用對話框的。比如當你拷貝文件時,Windows就會提示一個拷貝文件的進度對話框。對話框的使用範圍比較廣,並且它在設計時就可以看到運行的結果模樣,這樣方便設計。但對話框又分為兩類,一種對話框運行後,一定要用戶關閉那個對話框後才能返回到父窗口;一種對話框是不需要關閉後就可以直接返回父窗口。因此,軟件開發人員就要考慮這個對話框的結果是否會影響後面的操作,如果這個對話框的結果跟後面的操作沒有因果關系的,可以設置為第二種對話框。像拷貝文件的對話框就是第二種的對話框,稱作無模式的對話框。如果設置為第一類,非要等那裏拷貝文件才可以去操作其它東西,那麽
Windows就不方便使用了,這樣會浪費大量的時間。讓人等待,就是一個不好用的軟件,所以軟件開發人員設計軟件時,要站在用戶的立場思考問題,在保持軟件正確的情況下,不要讓人等待,任何讓人等待超過20秒以上的軟件,會讓用戶煩躁不安。如果非要等待的話,也要加入進度條對話框提示,這樣可以有效地緩解用戶煩躁不安的心情。這就跟你去銀行排隊時,可以坐在那裏看著電視,感覺不到時間長的道理一樣的。 函數DialogBox函數和DialogBoxParam函數聲明如下: #define DialogBoxA(hInstance, lpTemplate, hWndParent, lpDialogFunc) / DialogBoxParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L)
#define DialogBoxW(hInstance, lpTemplate, hWndParent, lpDialogFunc) / DialogBoxParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L) #ifdef UNICODE #define DialogBox DialogBoxW #else #define DialogBox DialogBoxA #endif // !UNICODE WINUSERAPI INT_PTR WINAPI DialogBoxParamA( __in_opt HINSTANCE hInstance,
__in LPCSTR lpTemplateName, __in_opt HWND hWndParent, __in_opt DLGPROC lpDialogFunc, __in LPARAM dwInitParam); WINUSERAPI INT_PTR WINAPI DialogBoxParamW( __in_opt HINSTANCE hInstance, __in LPCWSTR lpTemplateName, __in_opt HWND hWndParent, __in_opt DLGPROC lpDialogFunc, __in LPARAM dwInitParam); #ifdef UNICODE #define DialogBoxParam DialogBoxParamW #else #define DialogBoxParam DialogBoxParamA #endif // !UNICODE hInstance是當前應用程序的實例句柄。 lpTemplateName是對話框的資源模板。 hWndParent是父窗口的句柄。 lpDialogFunc是對話框的消息處理函數。 dwInitParam是初始化參數,這裏缺省設置為0 調用這個函數的例子如下: #001 // #002 // 目的: 處理主窗口的消息. #003 // #004 // 蔡軍生 2007/07/12 QQ:9073204 #005 // #006 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) #007 { #008 int wmId, wmEvent; #009 PAINTSTRUCT ps; #010 HDC hdc; #011 #012 switch (message) #013 { #014 case WM_COMMAND: #015 wmId = LOWORD(wParam); #016 wmEvent = HIWORD(wParam); #017 // 菜單選項命令響應: #018 switch (wmId) #019 { #020 case IDM_ABOUT: #021 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); #022 break; #023 case IDM_EXIT: #024 DestroyWindow(hWnd); #025 break; #026 default: #027 return DefWindowProc(hWnd, message, wParam, lParam); #028 } #029 break; #030 case WM_PAINT: #031 hdc = BeginPaint(hWnd, &ps); #032 // #033 EndPaint(hWnd, &ps); #034 break; #035 case WM_DESTROY: #036 PostQuitMessage(0); #037 break; #038 default: #039 return DefWindowProc(hWnd, message, wParam, lParam); #040 } #041 return 0; #042 } 21行就是調用函數DialogBox來顯示對話框窗口。 對話框的模板如下: ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_ABOUTBOX DIALOGEX 22, 17, 230, 75 STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "關於" FONT 9, "新宋體", 400, 0, 0x86 BEGIN ICON IDI_TESTWIN,IDC_MYICON,14,9,21,21 LTEXT "TestWin Version 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX LTEXT "Copyright (C) 2007",IDC_STATIC,49,20,119,8 DEFPUSHBUTTON "確定",IDOK,185,51,38,16,WS_GROUP END IDD_ABOUTBOX是對話框模板的名稱。 DIALOGEX是對話框定義的關鍵字。 22, 17, 230, 75是對話框的坐標和大小。 STYLE是設置對話框的顯示類型。 CAPTION是定義標題名稱。這裏是"關於" FONT是定義對話的字體。 ICON是定義一個圖標顯示。 LTEXT是定義顯示靜態文本。 DEFPUSHBUTTON是定義一個按鈕。

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

Windows API一日一練 17 DialogBox和DialogBoxParam函數