(17)DialogBox和DialogBoxParam函数
生活随笔
收集整理的這篇文章主要介紹了
(17)DialogBox和DialogBoxParam函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對話框是比較常用的窗口,比如當你想讓用戶輸入一些參數時就可以使用對話框?;蛘咛崾疽恍┚娴男畔?#xff0c;都是可以使用對話框的。比如當你拷貝文件時,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是定義一個按鈕。
消息響應函數:
BOOL?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:?? ????????????return?TRUE;?? ???????????? ????????case?WM_COMMAND:?? ????????????switch(LOWORD(wParam))?? ????????????{?? ????????????case?IDOK:?? ????????????case?IDCANCEL:?? ????????????????EndDialog(hwndDlg,LOWORD(wParam));?? ????????????????break;?? ????????????}?? ????????????return?TRUE; ????????????default:?? ????????????????break;?? ????}?? ???? ??????????return?FALSE;??? }
消息響應函數:
總結
以上是生活随笔為你收集整理的(17)DialogBox和DialogBoxParam函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XX网站搭建全程
- 下一篇: 离散数学-第八章图论及其应用