對話框編程(修改版)_第1頁
對話框編程(修改版)_第2頁
對話框編程(修改版)_第3頁
對話框編程(修改版)_第4頁
對話框編程(修改版)_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第4章對話框(DIALOG)編程4.1對話框簡介4.2創(chuàng)建與銷毀對話框4.3消息對話框4.4通用對話框CWndCDialog對話框(Dialog):是用戶與應用程序交互的重要的界面(輸入數(shù)據(jù),顯示數(shù)據(jù))。對話框實質是一個窗口,在MFC中用CDialog類來描述。MFC用來創(chuàng)建對話框的類除了CDialog類外,還有CPropertySheet(屬性單)和CPropertyPage(屬性頁)。

CObject└CCmdTarget└CWnd└CDialog4.1對話框簡介對話框分為兩類:模態(tài)對話框和非模態(tài)對話框。模態(tài)對話框是這樣的對話框,當它彈出后,本應用程序其他窗口將不再接受用戶輸入,只有該對話框響應用戶輸入,在對它進行相應操作退出后,其他窗口才能繼續(xù)與用戶交互。非模態(tài)對話框則是,它彈出后,本程序其他窗口仍能響應用戶輸入。非模態(tài)對話框一般用來顯示提示信息等。4.1對話框簡介4.1.1對話框的控件簡介對控件的理解:控件是可以處理與發(fā)送消息的對象。首先,控件是一個對象;其次控件可以處理消息(自身處理消息很少用)與發(fā)送消息(當自身狀態(tài)發(fā)生改變的時候向父窗口發(fā)送消息,由父窗口負責消息響應)。常用控件StaticTextEditboxButtonCheckboxComboboxListboxGroupbox對話框的控件編排TabOrder及快捷鍵通過菜單Layout->TabOrder設置用戶使用Tab鍵在控件間移動時的移動順序。(控件必須含有樣式TABSTOP)通過設置控件名稱加上“&”指定快捷鍵通過指定DEFAULTBUTTON指定默認按鈕4.1.1對話框控件操作演示上面的控件。4.2創(chuàng)建與銷毀對話框MFC中對話框的描述(1)對話框模板資源,表示對話框的外觀(2)定義一個對話框類,描述對話框的功能

創(chuàng)建對話框的步驟:

(1)創(chuàng)建對話框資源(2)創(chuàng)建對話框類(3)為對話框類添加成員變量(4)對話框的初始化和添加消息處理函數(shù)(5)

創(chuàng)建并顯示對話框模式對話框和非模式對話框的區(qū)別主要在創(chuàng)建方式不同。4.2.1模態(tài)對話框(ModalDialogBox)對話框分為模態(tài)和非模態(tài)之分,兩者的差別在于對話框是否壟斷應用程序的所有消息。Modaldialogboxes,whichrequiretheusertorespondbeforecontinuingtheprogramModelessdialogboxes,whichstayonthescreenandareavailableforuseatanytimebutpermitotheruseractivities模態(tài)對話框的創(chuàng)建:virtualintCDialog::DoModal();Example:CMyDialogdlg;dlg.DoModal();載入對話框模板UpdateData()OnInitDialog()消息循環(huán)OnOK()UpdateData()EndDialog()returnIDOKOnCancel()EndDialog()returnIDCANCELOK按鈕消息Cancel按鈕消息DoModal()執(zhí)行過程壟斷消息4.2.1模態(tài)對話框(ModalDialogBox)4.2.1模態(tài)對話框(ModalDialogBox)講解演示模態(tài)對話框的演示。與對話框中控件相互作用方法1CWnd*pWnd=GetDlgItem(IDC_CHECK);pWnd->EnableWindow(TRUE);方法2通過ClassWizard添加Control類型變量4.2.2對話框數(shù)據(jù)交換和數(shù)據(jù)檢驗MFC提供了DDX(X表示eXchange)機制,允許程序員實現(xiàn)設定控件與變量之間的對應關系,并正確的傳遞數(shù)據(jù)。使用UpdateData(TRUE):控件的值傳給變量使用UpdateData(FALSE):變量的值傳給控件對話框退出時,控件里的值自動傳到對應的變量上去。MFC提供了DDV(V表示Validation)機制,保證輸入的數(shù)據(jù)在你要求的范圍之內。借助ClassWizard方便的完成這些工作。4.2.2對話框數(shù)據(jù)交換和數(shù)據(jù)檢驗1.數(shù)據(jù)交換:DDX(DialogDataeXchange)DataControl顯示保存ControlMemoryVariablesBinding如何實現(xiàn)?2.數(shù)據(jù)檢驗(DDV,DialogDataValidation)MFC中提供了以DDV_為前綴的函數(shù),用于輸入數(shù)據(jù)的檢驗。DDX函數(shù)MFC定義了大量的以DDX_為前綴的函數(shù),用來實現(xiàn)變量與控件的綁定以及數(shù)據(jù)交換。如,DDX_Text()、DDX_Radio()、DDX_Check()等。DDX_TextvoidAFXAPIDDX_Text(CDataExchange*pDX,intnIDC,BYTE&value);voidAFXAPIDDX_Text(CDataExchange*pDX,intnIDC,short&value);……UpdateData()DoDataExchange()DDX_XXXX()非模態(tài)對話框(ModelessDialog),1)沒有自己的、獨立的消息循環(huán),而是與應用程序使用同一個消息循環(huán),從而使它不能壟斷用戶消息。2)設計非模態(tài)對話框的方法和過程與模態(tài)對話框(ModalDialog)相同,即設計對話框模板資源,然后是創(chuàng)建對話框類。使用非模態(tài)對話框:與模態(tài)對話框的使用方法不同,非模態(tài)對話框,1)打開對話框,使用CDialog::Create(),因為Create()不會啟動新的消息循環(huán)。2)銷毀,使用CWnd::DestroyWindow()銷毀,即關閉對話框3)在動態(tài)存儲器中創(chuàng)建,即使用new操作符。關閉之后使用delete操作符4)使用標志性變量跟蹤非模態(tài)對話框的運行狀態(tài),避免多次打開4.2.2非模態(tài)對話框4.2.2非模態(tài)對話框

與模式對話框的區(qū)別:CDialog::DoModal()~CDialog::Create()EndDialog~DestroyWindow創(chuàng)建無模式對話框的步驟

1、創(chuàng)建對話框資源模板2、創(chuàng)建對話框類3、為對話框類添加成員變量4、用NEW操作符在堆上創(chuàng)建一個對話框對象5、調用對話框類的Create()函數(shù)來創(chuàng)建對話框窗口6、重載對話框類的Ok和Cancel按鈕的消息處理函數(shù)。步驟:建立一個對話框資源及相應的類。修改對話框中默認的OnOK及OnCancel函數(shù),使其不調用默認的函數(shù),而是改為DestroyWindow()創(chuàng)建并顯示對話框

CMyDLg*dlg=newCMyDLg(); dlg->Create(IDD_DIALOG1); dlg->ShowWindow(SW_SHOW);Example:CNonMdlDlg*m_pNameDlg;boolm_bActive;m_pNameDlg=newCNonMdlDlg;……m_bActive=TRUE;CDialog::Create(CNonMdlDlg::IDD);……m_bActive=FALSE;DestroyWindow();……m_pNameDlg->SetActiveWindow();……deletem_pNameDlg;4.2.3屬性頁對話框屬性表的功能都被封裝在一對MFC類中:CPropertySheet和CPropertyPage。CPropertySheet代表屬性表自身,是從CWnd派生而來。CPropertyPage代表屬性表的頁,是從CDialog派生而來。創(chuàng)建屬性表的步驟1、針對屬性表的每一頁創(chuàng)建一個對話框模板,定義頁的內容和特性。將對話框標題設成你希望在屬性表頁上方標簽中顯現(xiàn)的標題。2、針對屬性表的每一頁由CPropertyPage派生出一個類似對話框的類。3、由CPropertySheet定義一個屬性表對象。將屬性表類和第二步中得到的屬性表頁類實例化。在構造函數(shù)中利用CPropertySheet::AddPage將各頁按期望中的顯示順序添加到屬性表中。4、調用屬性表的DoModal函數(shù)將屬性表顯示在屏幕上(也可以像對話框那樣建立無模式的屬性表)。AfxFormatString1替換字符用字符串由lpsz1指向“%1的所有實例”nIDS確定模板的字符串資源。voidAfxFormatString1(CString&rString,UINTnIDS,LPCTSTRlpsz1);rString將包含提供的字符串的CString

引用,在執(zhí)行后替換。nIDS將執(zhí)行模板替換字符串的資源ID。lpsz1將替換%1格式字符“"在模板字符串。備注:新窗體的字符串存儲在rString中。例如,在中,如果字符串在字符串表中%1“找不到的文件”和lpsz1與“C:\MYFILE.TXT",rString相等將包含字符串“找不到該文件的C:\MYFILE.TXT”。此函數(shù)用于格式字符串為有用發(fā)送到消息和其他窗口。4.2.3屬性頁對話框講解演示屬性頁的使用。4.3消息對話框

一種簡單的對話框,用戶可以直接調用消息對話框函數(shù)來使用它,而不需要自己創(chuàng)建。VisualC++提供三個消息對話框函數(shù),它們的原型為:intAfxMessageBox(LPCTSTRlpText,UINTnType=MB_OK,UINTnIDHelp=0);intMessageBox(HWNDhWnd,LPCTSTRlpText,LPCTSTRlpCaption,UINTnType);intCWnd::MessageBox(LPCTSTRlpText,LPCTSTRlpCaption=NULL,UINTnType=MB_OK);MessageBox函數(shù)用于顯示信息int //返回用戶所選按鈕代表的數(shù)值MessageBox(

HWND

hWnd,

//窗口句柄 LPCTSTR

lpText,

//消息框主體顯示的文本 LPCTSTR

lpCaption,

//消息框標題欄顯示文本

UINT

uType

//代表消息框風格的常數(shù)組合);

消息框風格以MB_開始的常數(shù)組合代表消息框的風格多種風格之間用“|”分隔if(IDOK==MessageBox( NULL, "是否退出本程序?", "退出",

MB_OKCANCEL|

MB_ICONQUESTION))MessageBox(NULL,"再見!","退出",MB_OK);4.3消息對話框4.3消息對話框4.4

通用對話框MFC專門提供了一些通用的對話框類,如,

顏色選擇對話框(CColorDialog)文件選擇對話框(CFileDialog)字體選擇對話框(CFontDialog)打印和打印設置對話框(CPrintDialog)1.文件對話框(CFileDialog)TheCFileDialogclassencapsulatestheWindowscommonfiledialogbox,whichprovidesaneasywaytoimplementthestandardFileOpenandFileSaveAsdialogboxes.X:\PROGRAMFILES\...\TEXT.ABC.TXTPATHFILENAMETITLEEXTENDCFileDialog(

BOOL

bOpenFileDialog,

LPCTSTR

lpszDefExt

=

NULL,

LPCTSTR

lpszFileName

=

NULL,

DWORD

dwFlags

=

OFN_HIDEREADONLY

|

OFN_OVERWRITEPROMPT,

LPCTSTR

lpszFilter

=

NULL,

CWnd*

pParentWnd

=

NULL

);ParametersbOpenFileDialog:TRUE-文件打開對話框;FALSE-保存文件對話框lpszDefExt:默認的擴展名。ifNULL,則無默認擴展名lpszFileName:初始的文件名,ifNULL,則顯示空文件名dwFlags:不同的組合來自定義對話框lpszFilter:文件名過濾參數(shù),用于篩選指定的文件pParentWnd:父窗口更多信息參考MSDN,或4.4

通用對話框用來指明對話框文件類型框中所使用的過濾參數(shù),每一個參數(shù)由兩項組成:第一項:顯示的文本第二項:文件的類型,即第一項|第二項如果使用多個過濾器,則使用“|”連接起來;同種類型文件的擴展名間可以用“;”分割,末尾用“||”

指明。lpszFilterparameter4.4

通用對話框Example:Word文檔(*.doc)|*.doc||Word文檔(*.doc)|*.doc|位圖(*.bmp)|*.bmp;*.dib|全部文件(*.*)|*.*||char*pFilters="Word文檔(*.doc)|*.doc|位圖(*.bmp)|*.bmp|全部文件(*.*)|*.*||";CFileDialogfileDlg(TRUE,NULL,"*.doc",NULL,pFilters);intresult=fileDlg.DoModal();4.4

通用對話框常用的成員函數(shù)及其功能1、CStringCFileDialog::GetPathName()

得到完整的文件名,包括目錄名和擴展名如:c:\test\test1.txt

2、CStringCFileDialog::GetFileName()

得到文件名,包括擴展名如:test1.txt

3、CStringCFileDialog::GetExtName()

得到完整的文件擴展名,如:txt

4、CStringCFileDialog::GetFileTitle()

得到文件主名,不包括目錄名和擴展名如:test1

5、POSITIONCFileDialog::GetStartPosition()對于選擇了多個文件的情況得到第一個文件位置。

6、CStringCFileDialog::GetNextPathName(POSITION&pos)對于選擇了多個文件的情況得到下一個文件位置,并同時返回當前文件名。7、POSITIONCFileDialog::GetStartPosition()來得到最初的POSITION變量。2.字體選擇對話框(CFontDialog)CFontDialog(

LPLOGFONT

lplfInitial

=

NULL,

DWORD

dwFlags

=

CF_EFFECTS

|

CF_SCREENFONTS,

CDC*

pdcPrinter

=

NULL,

CWnd*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論