版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第七章一、用戶對話框:用戶在使用應(yīng)用程序時,可以對控件進行輸入、輸出操作,而控件是通過對話框的數(shù)據(jù)交換機制與對話框進行數(shù)據(jù)交換的,本節(jié)主要介紹對話框數(shù)據(jù)交換與驗證。1數(shù)據(jù)交換對話框數(shù)據(jù)交換(DDX,Dialog Data Exchange)用于對話框及其相關(guān)控件的初始化,并實現(xiàn)控件與對話框之間的數(shù)據(jù)交換。DDX機制的實現(xiàn)函數(shù)語法如下:void nDlg:DoDataExchange( CDataExchange* pDX )CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(nDlg)DDX_Custom(pDX, nIDC, field);/AFX_DATA_
2、MAP參數(shù)說明:nDlg:是進行數(shù)據(jù)交換機制的對話框類。DDX_Custom:DDX函數(shù),使用的函數(shù)根據(jù)進行數(shù)據(jù)交換時成員變量的數(shù)據(jù)類型和控件決定。pDX:是一個指向CDataExchange對象的指針。nIDC:表示進行數(shù)據(jù)交換的控件ID。field:表示對話框類中和控件進行關(guān)聯(lián)的成員變量。在對話框中的數(shù)據(jù)需要進行交換時,DoDataExchange函數(shù)就被調(diào)用進行數(shù)據(jù)交換。但是還需要調(diào)用函數(shù)UpdateData來實現(xiàn)數(shù)據(jù)的更新,UpdateData函數(shù)語法如下:BOOL UpdateData( BOOL bSaveAndValidate = TRUE );參數(shù)說明:bSaveAndVali
3、date:該參數(shù)是一個標(biāo)志,取值如下:l 當(dāng)參數(shù)值為TRUE時,就用對話框界面上顯示的值來設(shè)置對話框類的成員變量的值。l 當(dāng)參數(shù)值為FALSE時,則按照對話框類的成員變量的值來更新對話框界面上顯示的值。一般情況下,數(shù)據(jù)交換只在對話框初始化時才發(fā)生,所以在對話框類中的其他函數(shù)如果要在設(shè)置成員變量以后,及時的顯示或者獲取對話框上最新的輸入值,就必須顯式地調(diào)用UpdateData函數(shù)。 2數(shù)據(jù)驗證對話框數(shù)據(jù)驗證
4、(DDV,Dialog Data Validation)用于驗證對話框輸入數(shù)據(jù)的有效性。DDV機制的實現(xiàn)函數(shù)語法如下:void nDlg:DoDataExchange( CDataExchange* pDX )CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(nDlg)DDV_Customi(pDX, field, .);/AFX_DATA_MAP參數(shù)說明:nDlg:是進行數(shù)據(jù)交換機制的對話框類。DDV_Custom:DDV函數(shù),使用的函數(shù)根據(jù)進行數(shù)據(jù)驗證時成員變量的數(shù)據(jù)類型決定。field:表示對話框類中和控件進行關(guān)聯(lián)的成員變量。.:表示進行數(shù)據(jù)驗證時輸入數(shù)
5、據(jù)的有效范圍。下面通過實例來演示一下對話框是如何進行數(shù)據(jù)交換和數(shù)據(jù)驗證的。步驟如下:(1)創(chuàng)建一個基于對話框的應(yīng)用程序。(2)向?qū)υ捒蛑刑砑?個靜態(tài)文本控件、8個編輯框控件和一個按鈕控件。打開類向?qū)?,為編輯框控件添加變量,單擊“Add Variable”按鈕彈出Add Member Variable對話框,在Add Member Variable對話框中Category下拉列表中選擇Value,在Variable Type下拉列表中選擇double,添加的變量分別為m_Edit1到m_Edit8,單擊OK按鈕,返回到類向?qū)Т翱凇T陬愊驅(qū)Т翱谥袨閙_Edit1到m_Edit7這7個變量設(shè)置范圍,
6、如圖所示。(3)先看一下通過類向?qū)砑幼兞恳院笤诔绦蛑凶詣由傻拇a。 CDataChangeDlg:CDataChangeDlg(CWnd* pParent /*=NULL*/): CDialog(CDataChangeDlg:IDD, pParent)/AFX_DATA_INIT(CDataChangeDlg)m_Edit1 = 0.0;m_Edit2 = 0.0;m_Edit4 = 0.0;m_Edit3 = 0.0;m_Edit5 = 0.0;m_Edit6 = 0.0;m_Edit7 = 0.0;m_Edit8 = 0.0;/AFX_DATA_INIT/ Note that Load
7、Icon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); void CDataChangeDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CDataChangeDlg)DDX_Text(pDX, IDC_EDIT1, m_Edit1);DDV_MinMaxDouble(pDX, m_Edit1, 0., 100.);DDX
8、_Text(pDX, IDC_EDIT2, m_Edit2);DDV_MinMaxDouble(pDX, m_Edit2, 0., 100.);DDX_Text(pDX, IDC_EDIT4, m_Edit4);DDV_MinMaxDouble(pDX, m_Edit4, 0., 100.);DDX_Text(pDX, IDC_EDIT3, m_Edit3);DDV_MinMaxDouble(pDX, m_Edit3, 0., 100.);DDX_Text(pDX, IDC_EDIT5, m_Edit5);DDV_MinMaxDouble(pDX, m_Edit5, 0., 100.);DDX
9、_Text(pDX, IDC_EDIT6, m_Edit6);DDV_MinMaxDouble(pDX, m_Edit6, 0., 100.);DDX_Text(pDX, IDC_EDIT7, m_Edit7);DDV_MinMaxDouble(pDX, m_Edit7, 0., 100.);DDX_Text(pDX, IDC_EDIT8, m_Edit8);/AFX_DATA_MAP在構(gòu)造函數(shù)CDataChangeDlg中對添加的變量進行初始化,為double型變量賦初值為0.0。在DoDataExchange函數(shù)中實現(xiàn)了對話框的數(shù)據(jù)交換與驗證。其中DDX_Text函數(shù)將控件與成員變量關(guān)聯(lián)起
10、來,DDV_MinMaxDouble函數(shù)則實現(xiàn)了對成員變量值的驗證,保證輸入的數(shù)在0到100之間。(4)設(shè)置按鈕的Caption為“計算總成績”,處理“計算總成績”按鈕的單擊事件,使各科成績相加得到總成績,代碼如下。void CDataChangeDlg:OnButton1() UpdateData(TRUE);m_Edit8 = m_Edit1 + m_Edit2 + m_Edit3 + m_Edit4 + m_Edit5 + m_Edit6 + m_Edit7;UpdateData(FALSE);使用UpdateData(TRUE);語句獲得編輯框中的各科成績,再通過UpdateData(
11、FALSE);語句將變量m_Edit8中的數(shù)據(jù)輸出到編輯框中。程序運行結(jié)果如圖所示。3消息對話框消息對話框是Windows系統(tǒng)中自帶的最簡單的對話框,用于提示一些簡單的信息。在MFC中,消息對話框通過CWnd:MessageBox和AfxMessageBox兩個函數(shù)進行調(diào)用。前一個函數(shù)是CWnd的成員函數(shù),而AfxMessageBox則是全局函數(shù)。MessageBox函數(shù)可以調(diào)用一個消息對話框。語法:int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );參數(shù)說明:lpszText:消
12、息框中顯示的文本。lpszCaption:消息框的標(biāo)題。nType:消息框中顯示的按鈕風(fēng)格和圖標(biāo)風(fēng)格的組合,可以使用“|”操作符來組合各種風(fēng)格。默認(rèn)為MB_OK。按鈕風(fēng)格如表7-1所示。 圖標(biāo)風(fēng)格如表所示。 4通用對話框通用對話框是由操作系統(tǒng)提供的任何應(yīng)用程序都可獲得的對話框,使用這些對話框,可以為用戶提供他們所期望的一致性的標(biāo)準(zhǔn)界面。在Visual C+中,這些對話框被封裝在CCommonDialog及其派生類中,在開發(fā)程序過程中,常用的通用對話框控件主要有文件對話框、查找、替換對話框、字體對話框等。1. 文件對話框CFileDialog類是文件對話框類,通過CFileDialog類可以在程
13、序中嵌入文件對話框,從而實現(xiàn)標(biāo)準(zhǔn)的“打開”和“另存為”對話框。“打開”對話框如圖7-30所示,“另存為”對話框如圖7-31所示。 文件對話框以模態(tài)對話框形式顯示,用戶可以從對話框中讀取磁盤中的文件,也可以在指定目錄下創(chuàng)建新的文件。它提供了多個方法用于動態(tài)獲取或設(shè)置文件名,其主要方法如下:(1)CFileDialog方法:該方法用于構(gòu)造文件對話框。語法如下:CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADON
14、LY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );參數(shù)說明:bOpenFileDialog:確定構(gòu)造“打開”對話框還是構(gòu)造“另存為”對話框,如果為TRUE,構(gòu)造“打開”對話框,為FALSE,構(gòu)造“另存為”對話框。lpszDefExt:用于確定文件默認(rèn)的擴展名,如果為NULL,沒有擴展名被插入到文件名中。lpszFileName:確定編輯框中初始化時的文件名稱,如果為NULL,編輯框中沒有文件名稱。dwFlags:用于自定義文件對話框。lpszFilter:用于指定對話框過濾的文件類型。P
15、parentWnd:標(biāo)識文件對話框的父窗口指針。 (2)DoModal方法:該方法用于顯示文件對話框,供用戶選擇文件。語法如下:virtual int DoModal( );返回值:如果用戶在對話框中單擊“OK”按鈕,返回值為IDOK,如果單擊“CANCEL”按鈕,返回值為“IDCANCEL”。(3)GetPathName方法:該方法用于返回用戶選擇文件的完整路徑,包括文件的路徑、文件名和文件擴展名。語法如下:CString GetPathName( ) const;(4)GetFileName方法:該方法用于返回用戶選擇的文件名稱,包括文件名和擴展名,不包含路徑。語法如下:CString G
16、etFileName( ) const;(5)GetFileExt方法:該方法用于返回文件對話框中輸入的文件擴展名。語法如下:CString GetFileExt( ) const;(6)GetFileTitle方法:該方法用于返回文件對話框中輸入的文件名稱,不包含路徑和擴展名。語法如下:CString GetFileTitle( ) const;(7)GetStartPosition方法:當(dāng)數(shù)據(jù)成員m_ofn的Flags成員包含OFN_ALLOWMULTISELECT標(biāo)記時,允許文件對話框同時選擇多個文件。GetStartPosition方法用于返回文件列表中第一個文件的位置。語法如下:PO
17、SITION GetStartPosition( ) const;返回值:如果文件列表為空,返回值為NULL;否則返回一個POSITION值,該值可以用于GetNextPathName方法。(8)GetNextPathName方法:該方法用于在文件列表中指定當(dāng)前位置的下一個文件全路徑,包括文件的路徑、文件名和文件擴展名。語法如下:CString GetNextPathName( POSITION& pos ) const;參數(shù)說明:pos:標(biāo)識文件在列表中的位置,通常來自于GetStartPosition方法的返回值。如果文件列表中只有一個文件,則返回該文件全路徑。(9)GetRead
18、OnlyPref方法:該方法用于確定文件對話框中的“只讀”復(fù)選框是否被選中。語法如下:BOOL GetReadOnlyPref( ) const;返回值:如果返回值為非零,表示“只讀”復(fù)選框被選中,否則復(fù)選框沒有被選中。(10)OnFileNameOK方法:該方法用于檢查文件名稱是否正確。通常情況下,系統(tǒng)會進行默認(rèn)的檢查。用戶可以改寫該方法,進行自定義文件名驗證。語法如下:virtual BOOL OnFileNameOK( );返回值:返回值為1,表示文件名稱合法;返回值為0,表示文件名不合法。 (11)OnLBSelChangedNotify方法:該方法在文件對話框中的列表框選項即將改變時
19、調(diào)用。改寫該方法可以進行額外的處理工作。語法如下:virtual void OnLBSelChangedNotify( UINT nIDBox, UINT iCurSel, UINT nCode);參數(shù)說明:nIDBox:標(biāo)識列表框ID。iCurSel:標(biāo)識當(dāng)前選項的索引。nCode:標(biāo)識控制通知代碼,可選值如下:l CD_LBSELCHANGE:表示iCurSel標(biāo)識的項目在一個單選列表框中被選中。l
20、CD_LBSELSUB:表示iCurSel標(biāo)識的項目在一個多選列表框中不再被選中。l CD_LBSELADD:表示iCurSel標(biāo)識的項目在一個多選列表框中被選中。l CD_LBSELNOITEMS:表示在多選列表框中沒有項目被選中。(12)OnInitDone方法:該方法用于處理WM_NOTIFY、CDN_INITDONE消息。用戶可以改寫該方法,在WM_NOTIFY、CDN_INITDONE消息發(fā)生時
21、執(zhí)行特殊的處理。語法如下:virtual void OnInitDone( );(13)OnFileNameChange方法:該方法用于處理WM_NOTIFY、CDN_SELCHANGE消息。當(dāng)用戶在文件列表中選擇一個新的文件或文件夾時將發(fā)送WM_NOTIFY、CDN_SELCHANGE消息。用戶可以改寫該方法,在事件發(fā)生時進行特殊的處理。語法如下:virtual void OnFileNameChange( );(14)OnFolderChange方法:該方法用于處理WM_NOTIFY、CDN_FOLDERCHANGE消息。當(dāng)用戶在文件對話框中打開一個文件夾時將發(fā)送WM_NOTIFY、CDN
22、_FOLDERCHANGE消息,用戶可以改寫該方法,在事件發(fā)生時進行特殊的處理。語法如下:virtual void OnFolderChange( );(15)OnTypeChange方法:該方法用于處理WM_NOTIFY、CDN_TYPECHANGE消息。當(dāng)用戶在文件列表中選擇一個新的文件類型時,觸發(fā)WM_NOTIFY、CDN_TYPECHANGE消息。用戶可以改寫該方法,在事件發(fā)生時進行特殊的處理。語法如下:virtual void OnTypeChange( );在開發(fā)程序時,當(dāng)用戶需要從磁盤中選擇一個文件或者將數(shù)據(jù)保存到磁盤文件時,需要使用文件對話框。例如在程序中備份數(shù)據(jù)庫時,需要用戶
23、指定備份文件。在設(shè)計程序時,可以使用文件對話框讓用戶輸入或選擇一個備份文件。下面的代碼演示了文件對話框的創(chuàng)建和使用。void COpenFileDlg:OnOK()CFileDialog* filedialog;filedialog = new CFileDialog(true,"bak");/創(chuàng)建“打開”對話框if (filedialog->DoModal()=IDOK )/顯示“打開”對話框CString str;str = filedialog->GetPathName();/讀取用戶選擇的文件delete (filedialog);執(zhí)行效果如圖示。 2.
24、 查找/替換對話框CFindReplaceDialog類封裝了通用的“查找”和“替換”對話框。它提供了多個方法用于獲取查找數(shù)據(jù)時的選項。例如,查找時是否區(qū)分大小寫、向前查找還是向后查找等。用戶可以在回調(diào)函數(shù)中根據(jù)這些方法確定查找數(shù)據(jù)時的選項,根據(jù)各個選項實現(xiàn)其查找或替換功能?!安檎摇?對話框如左圖所示,“替換”對話框如右圖所示。 下面以具體實例來介紹如何使用查找、替換對話框。(1)新建一個基于對話框的應(yīng)用程序。(2)在窗口中添加CRichEditCtrl控件,設(shè)置控件屬性,如圖所示。 (3)在對話框類的頭文件中定義CFindReplaceDialog* m_finddlg;在對話框的消息映射部
25、分添加如下映射宏:ON_REGISTERED_MESSAGE(WM_FINDMESSAGE, OnFindReplace )(4)添加OnFindReplace消息處理函數(shù),代碼如下:long CAaaDlg:OnFindReplace(WPARAM wParam, LPARAM lParam)if (m_finddlg->ReplaceCurrent() /用戶單擊替換按鈕str = m_finddlg->GetReplaceString(); /讀取替換的對話框findstr = m_finddlg->GetFindString(); /讀取查找的對話框FINDTEXTE
26、X temp; /設(shè)置查找范圍和查找內(nèi)容temp.lpstrText = findstr.GetBuffer(str.GetLength();m_richedit.SetFocus();temp.chrg.cpMin = 0;temp.chrg.cpMax = -1;int result = m_richedit.FindText(0,&temp); /開始查找if (result =-1)return 0;int num = findstr.GetLength();m_richedit.SetSel(temp.chrgText.cpMin,temp.chrgText.cpMax);m
27、_richedit.ReplaceSel(str);/替換選中的文本return 0;(5)處理按鈕的單擊事件,創(chuàng)建并顯示“替換”對話框,代碼如下:void CAaaDlg:OnOK() m_finddlg = new CFindReplaceDialog();m_finddlg->Create(FALSE,NULL);m_finddlg->ShowWindow(SW_SHOW);3. 字體對話框(1)創(chuàng)建一個基于對話框的應(yīng)用程序。(2)在對話框中放置靜態(tài)文本、編輯框等控件,如圖所示。(3)為編輯框控件設(shè)置相應(yīng)的變量。處理按鈕的單擊事件,代碼如下:void CFontDlgDlg:
28、OnOK() CFont* tempfont = m_edit1.GetFont(); /獲取編輯框當(dāng)前字體LOGFONT logfont;CFont m_font;tempfont->GetLogFont(&logfont);CFontDialog fontdlg(&logfont);/初始化字體信息if (fontdlg.DoModal()=IDOK)m_font.Detach();LOGFONT temp;fontdlg.GetCurrentFont(&temp);/獲取當(dāng)前字體信息m_font.CreateFontIndirect(&temp);/直接創(chuàng)建字體m_edit1.SetFont(&m_font);/設(shè)置字體4. 顏色對話框CColorDialog類是標(biāo)準(zhǔn)的“顏色”對話框,利用“顏色”對話框,可以選擇一種顏色,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司制度管理流程
- 綠化管理員崗位職責(zé)(共8篇)-
- 體育中的數(shù)學(xué)課件
- 信息安全風(fēng)險評估-第17篇-洞察分析
- 第01講 正數(shù)和負(fù)數(shù)、有理數(shù)5個知識點+3個考點+5個易錯分析(解析版)
- 維管束對植物生長發(fā)育的影響研究-洞察分析
- 碳酸飲料市場細(xì)分策略-洞察分析
- 醫(yī)生評職稱工作總結(jié)范文(8篇)
- 網(wǎng)絡(luò)文摘與新媒體的融合模式研究-洞察分析
- 外周阻力影響因素分析-洞察分析
- 2024年度院線電影導(dǎo)演聘請合同書3篇
- 《腦出血的診斷和治》課件
- 高中政治8.3.1 《區(qū)域性國際組織》(歐洲聯(lián)盟、亞太經(jīng)合組織)教學(xué)設(shè)計
- 通信網(wǎng)絡(luò)練習(xí)題庫+參考答案
- 專項11-角度計算的綜合大題-專題訓(xùn)練(培優(yōu)+拔尖)30道
- 2024青海海東市水務(wù)集團限責(zé)任公司招聘27人高頻難、易錯點500題模擬試題附帶答案詳解
- 人教版六年級上冊道德與法治知識點
- 人工智能學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 樂理三級考試題及答案
- 年產(chǎn)10萬噸燒堿10萬噸聚氯乙烯項目可行性研究報告
- 2024年國家氣象系統(tǒng)招聘(864人)高頻難、易錯點500題模擬試題附帶答案詳解
評論
0/150
提交評論