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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

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

創(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)之分,兩者的差別在于對話框是否壟斷應(yīng)用程序的所有消息。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ù)檢驗(yàn)MFC提供了DDX(X表示eXchange)機(jī)制,允許程序員實(shí)現(xiàn)設(shè)定控件與變量之間的對應(yīng)關(guān)系,并正確的傳遞數(shù)據(jù)。使用UpdateData(TRUE):控件的值傳給變量使用UpdateData(FALSE):變量的值傳給控件對話框退出時(shí),控件里的值自動(dòng)傳到對應(yīng)的變量上去。MFC提供了DDV(V表示Validation)機(jī)制,保證輸入的數(shù)據(jù)在你要求的范圍之內(nèi)。借助ClassWizard方便的完成這些工作。4.2.2對話框數(shù)據(jù)交換和數(shù)據(jù)檢驗(yàn)1.數(shù)據(jù)交換:DDX(DialogDataeXchange)DataControl顯示保存ControlMemoryVariablesBinding如何實(shí)現(xiàn)?2.數(shù)據(jù)檢驗(yàn)(DDV,DialogDataValidation)MFC中提供了以DDV_為前綴的函數(shù),用于輸入數(shù)據(jù)的檢驗(yàn)。DDX函數(shù)MFC定義了大量的以DDX_為前綴的函數(shù),用來實(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)沒有自己的、獨(dú)立的消息循環(huán),而是與應(yīng)用程序使用同一個(gè)消息循環(huán),從而使它不能壟斷用戶消息。2)設(shè)計(jì)非模態(tài)對話框的方法和過程與模態(tài)對話框(ModalDialog)相同,即設(shè)計(jì)對話框模板資源,然后是創(chuàng)建對話框類。使用非模態(tài)對話框:與模態(tài)對話框的使用方法不同,非模態(tài)對話框,1)打開對話框,使用CDialog::Create(),因?yàn)镃reate()不會(huì)啟動(dòng)新的消息循環(huán)。2)銷毀,使用CWnd::DestroyWindow()銷毀,即關(guān)閉對話框3)在動(dòng)態(tài)存儲器中創(chuàng)建,即使用new操作符。關(guān)閉之后使用delete操作符4)使用標(biāo)志性變量跟蹤非模態(tài)對話框的運(yùn)行狀態(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)建一個(gè)對話框?qū)ο?、調(diào)用對話框類的Create()函數(shù)來創(chuàng)建對話框窗口6、重載對話框類的Ok和Cancel按鈕的消息處理函數(shù)。步驟:建立一個(gè)對話框資源及相應(yīng)的類。修改對話框中默認(rèn)的OnOK及OnCancel函數(shù),使其不調(diào)用默認(rèn)的函數(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屬性頁對話框?qū)傩员淼墓δ芏急环庋b在一對MFC類中:CPropertySheet和CPropertyPage。CPropertySheet代表屬性表自身,是從CWnd派生而來。CPropertyPage代表屬性表的頁,是從CDialog派生而來。創(chuàng)建屬性表的步驟1、針對屬性表的每一頁創(chuàng)建一個(gè)對話框模板,定義頁的內(nèi)容和特性。將對話框標(biāo)題設(shè)成你希望在屬性表頁上方標(biāo)簽中顯現(xiàn)的標(biāo)題。2、針對屬性表的每一頁由CPropertyPage派生出一個(gè)類似對話框的類。3、由CPropertySheet定義一個(gè)屬性表對象。將屬性表類和第二步中得到的屬性表頁類實(shí)例化。在構(gòu)造函數(shù)中利用CPropertySheet::AddPage將各頁按期望中的顯示順序添加到屬性表中。4、調(diào)用屬性表的DoModal函數(shù)將屬性表顯示在屏幕上(也可以像對話框那樣建立無模式的屬性表)。AfxFormatString1替換字符用字符串由lpsz1指向“%1的所有實(shí)例”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消息對話框

一種簡單的對話框,用戶可以直接調(diào)用消息對話框函數(shù)來使用它,而不需要自己創(chuàng)建。VisualC++提供三個(gè)消息對話框函數(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,

//消息框標(biāo)題欄顯示文本

UINT

uType

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

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

MB_OKCANCEL|

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

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

顏色選擇對話框(CColorDialog)文件選擇對話框(CFileDialog)字體選擇對話框(CFontDialog)打印和打印設(shè)置對話框(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:默認(rèn)的擴(kuò)展名。ifNULL,則無默認(rèn)擴(kuò)展名lpszFileName:初始的文件名,ifNULL,則顯示空文件名dwFlags:不同的組合來自定義對話框lpszFilter:文件名過濾參數(shù),用于篩選指定的文件pParentWnd:父窗口更多信息參考MSDN,或4.4

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

指明。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()

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

2、CStringCFileDialog::GetFileName()

得到文件名,包括擴(kuò)展名如:test1.txt

3、CStringCFileDialog::GetExtName()

得到完整的文件擴(kuò)展名,如:txt

4、CStringCFileDialog::GetFileTitle()

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

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

6、CStringCFileDialog::GetNextPathName(POSITION&pos)對于選擇了多個(gè)文件的情況得到下一個(gè)文件位置,并同時(shí)返回當(dāng)前文件名。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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論