程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> Windows SDK筆記(四):模式對話框

Windows SDK筆記(四):模式對話框

編輯:關於VC++

一、概述

對話框是一種特殊的窗口,它依據對話框模板資源而建立。

它與一般的窗口有些不同,很多過程由系統完成了,雖然用戶還是要提供一個消息處理函數,但在此消息處理函數中,不需要將不關心的消息交由缺省消息處理函數。

實際上,調用缺省處理的過程又系統完成。

二、對話框消息處理函數

對話框也需要用戶提供一個消息處理函數,但這個處理函數沒有普通窗口的消息處理函數"權利大"。

對話框是一種系統定義的“窗口類”,它已經定義好了對應的消息處理函數。客戶所作的消息處理函數,並不是直接與窗口連接,而是對對話框消息處理函數的一種補充,或者說“嵌入”。

因此,對話框處理函數不需要調用“缺省消息處理函數”。

當有消息被處理時,返回TRUE,沒有消息需要處理時,返回FALSE,此時退出用戶消息處理函數後,系統會去調缺省消息處理函數。

//對話框消息處理函數
//返回值類型為BOOL,與普通窗口處理函數不同。
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG :
return TRUE ;  //返回真,表示消息被處理了。
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
case IDCANCEL :
EndDialog (hDlg, 0) ;  //使用EndDialog關閉對話框
return TRUE ; //返回真,表示消息被處理了。
}
break ;
}
return FALSE ; ////返回假,表示消息未被用戶處理,又缺省消息處理函數去處理。
}

三、模式對話框建立

使用DialogBox。INT_PTR DialogBox(
HINSTANCE hInstance, // handle to module
LPCTSTR lpTemplate,  // dialog box template
HWND hWndParent,   // handle to owner window
DLGPROC lpDialogFunc // dialog box procedure
);
例: case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_ABOUT:
DialogBox (hinst, MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc) ;
break;
}
return 0;
四、模式對話框與程序的交互

模式對話框中,可以對程序中的數據進行更改。

結束對話框時,在EndDialog第二個參數中傳入退出參數

這個參數將被DialogBox作為返回值,然後對話框的用戶根據此返回值作相應的操作。

1.初始化

對話框消息處理函數中,在接到WM_INITDIALOG消息時,作一些初始化工作。

如從全局變量讀取初始值來設置各控件狀態。

2.退出時

若退出時,更改需要生效,(如按了“確定”),則根據控件狀態設置全局變量,並相應的在EndDialg中使用一個表示成功的值(如TRUE)。

若更改不需要生效(如按了“取消”),則不保存結果,並相應的在EndDialg中使用一個表示取消的值(如FALSE)。

3.對話框用戶作出反應

根據DialogBox的返回值不同,而進行不同的操作

如,返回TRUE時,重繪窗口: if (DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc))
InvalidateRect (hwnd, NULL, TRUE) ;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved