第10講 乘法計(jì)算器._第1頁(yè)
第10講 乘法計(jì)算器._第2頁(yè)
第10講 乘法計(jì)算器._第3頁(yè)
第10講 乘法計(jì)算器._第4頁(yè)
第10講 乘法計(jì)算器._第5頁(yè)
已閱讀5頁(yè),還剩87頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、VC+程序設(shè)計(jì)程序設(shè)計(jì)基于對(duì)話(huà)框的應(yīng)用程序的開(kāi)發(fā)基于對(duì)話(huà)框的應(yīng)用程序的開(kāi)發(fā)第第8 8講講 乘法計(jì)算器乘法計(jì)算器2021-12-112本講主要內(nèi)容本講主要內(nèi)容1. 基于對(duì)話(huà)框的應(yīng)用程序基于對(duì)話(huà)框的應(yīng)用程序 2. 靜態(tài)文本控件靜態(tài)文本控件3. 文本編輯框控件文本編輯框控件4. 按鈕控件按鈕控件 5. 為控件定義關(guān)聯(lián)變量為控件定義關(guān)聯(lián)變量 6. DDX/DDV7. CString8.1 案例描述案例描述本章以計(jì)算器為案例背景,從簡(jiǎn)單到復(fù)雜逐步本章以計(jì)算器為案例背景,從簡(jiǎn)單到復(fù)雜逐步實(shí)現(xiàn)多個(gè)版本的計(jì)算器程序,從中學(xué)習(xí)實(shí)現(xiàn)多個(gè)版本的計(jì)算器程序,從中學(xué)習(xí)對(duì)話(huà)對(duì)話(huà)框框的工作原理以及各種的工作原理以及各種控件

2、控件的使用方法。的使用方法。 8.2 基于對(duì)話(huà)框的應(yīng)用程序基于對(duì)話(huà)框的應(yīng)用程序靜態(tài)文本控件文本編輯框控件按鈕控件8.2.1 基于對(duì)話(huà)框的應(yīng)用程序基于對(duì)話(huà)框的應(yīng)用程序通過(guò)前面章節(jié)通過(guò)前面章節(jié)C+的學(xué)習(xí),讀者已經(jīng)熟悉了的學(xué)習(xí),讀者已經(jīng)熟悉了如何構(gòu)建控制臺(tái)應(yīng)用程序,但它不是真正如何構(gòu)建控制臺(tái)應(yīng)用程序,但它不是真正意義上的意義上的Windows應(yīng)用程序。應(yīng)用程序。本講以構(gòu)建乘法計(jì)算器程序?yàn)槔?,開(kāi)始介紹本講以構(gòu)建乘法計(jì)算器程序?yàn)槔?,開(kāi)始介紹基于對(duì)話(huà)框的基于對(duì)話(huà)框的Windows應(yīng)用程序的編寫(xiě)方應(yīng)用程序的編寫(xiě)方法。法。 【例例8-1】乘法計(jì)算器。實(shí)現(xiàn)兩個(gè)十進(jìn)制數(shù)的乘法計(jì)算器。實(shí)現(xiàn)兩個(gè)十進(jìn)制數(shù)的相乘運(yùn)算。相

3、乘運(yùn)算。建立建立對(duì)話(huà)框應(yīng)用程序?qū)υ?huà)框應(yīng)用程序的的操作步驟操作步驟:(1)啟動(dòng))啟動(dòng)Visual C+ 6.0集成開(kāi)發(fā)環(huán)境,單集成開(kāi)發(fā)環(huán)境,單擊菜單欄中擊菜單欄中File|New命令,打開(kāi)命令,打開(kāi)New窗口。窗口?!纠?-1】(2)在)在New窗口中選擇窗口中選擇Projects選項(xiàng)卡,在選項(xiàng)卡,在列表中選擇列表中選擇MFC Appwizardexe項(xiàng),在項(xiàng),在Project name文本框中輸入工程名文本框中輸入工程名Multiplication,在,在Location文本框中設(shè)置文本框中設(shè)置工程文件存放的位置,如:工程文件存放的位置,如:“E:VCMultiplication” 。【例例

4、8-1】工程類(lèi)型工程類(lèi)型工程名工程名保存位置保存位置【例例8-1】(3)單擊)單擊OK按鈕,彈出按鈕,彈出MFC Appwizard Step 1窗口窗口 ;基于對(duì)話(huà)框的基于對(duì)話(huà)框的應(yīng)用程序應(yīng)用程序【例例8-1】(4)選擇)選擇Dialog based單選項(xiàng),單擊單選項(xiàng),單擊Next按按鈕,打開(kāi)鈕,打開(kāi)MFC AppWizard Step 2 of 4窗窗口口 ;【例例8-1】(5)保持默認(rèn)選項(xiàng),單擊)保持默認(rèn)選項(xiàng),單擊Next按鈕,打開(kāi)按鈕,打開(kāi)MFC AppWizard Step 3 of 4窗口窗口 ;【例例8-1】(6)保持默認(rèn)選項(xiàng),單擊)保持默認(rèn)選項(xiàng),單擊Next按鈕,打開(kāi)按鈕,打開(kāi)

5、MFC AppWizard Step 4 of 4窗口窗口 ;【例例8-1】(7)保持默認(rèn)選項(xiàng),單擊)保持默認(rèn)選項(xiàng),單擊Finish按鈕,打開(kāi)按鈕,打開(kāi)New Project Information窗口窗口 【例例8-1】(8)單擊)單擊OK按鈕完成對(duì)話(huà)框應(yīng)用程序的創(chuàng)建按鈕完成對(duì)話(huà)框應(yīng)用程序的創(chuàng)建,返回,返回Visual C+ 6.0集成開(kāi)發(fā)環(huán)境,開(kāi)始集成開(kāi)發(fā)環(huán)境,開(kāi)始進(jìn)入可視化程序設(shè)計(jì)階段。進(jìn)入可視化程序設(shè)計(jì)階段。 【例例8-1】8.2.2 控件的基本概念控件的基本概念控件控件就是編程開(kāi)發(fā)工具提供的、規(guī)范化的、獨(dú)就是編程開(kāi)發(fā)工具提供的、規(guī)范化的、獨(dú)立的立的小部件小部件,它是可視化開(kāi)發(fā)工具的重

6、要,它是可視化開(kāi)發(fā)工具的重要組成部分。在對(duì)話(huà)框與用戶(hù)的交互過(guò)程中,組成部分。在對(duì)話(huà)框與用戶(hù)的交互過(guò)程中,控件擔(dān)任著重要角色??丶?dān)任著重要角色。 8.2.3 對(duì)話(huà)框組成及運(yùn)行機(jī)制對(duì)話(huà)框組成及運(yùn)行機(jī)制 Multiplication.h和和Multiplication.cpp定定義義應(yīng)用程序類(lèi)應(yīng)用程序類(lèi),負(fù)責(zé)完成應(yīng)用程序的初始,負(fù)責(zé)完成應(yīng)用程序的初始化、程序的啟動(dòng)和程序運(yùn)行結(jié)束時(shí)的清理化、程序的啟動(dòng)和程序運(yùn)行結(jié)束時(shí)的清理工作;工作; MultiplicationDlg.h和和MultiplicationDlg.cpp定義定義主對(duì)話(huà)框類(lèi)主對(duì)話(huà)框類(lèi),負(fù)責(zé)完成對(duì)話(huà)框界面的生成和事件響應(yīng);負(fù)責(zé)完成對(duì)話(huà)框界

7、面的生成和事件響應(yīng); StdAfx.h和和StdAfx.cpp包含項(xiàng)目中常用包含項(xiàng)目中常用到的到的MFC頭文件;頭文件; Resource.h定義項(xiàng)目中所包含的資源標(biāo)定義項(xiàng)目中所包含的資源標(biāo)識(shí)符識(shí)符ID; MultiplicationDlg.rc用于定義項(xiàng)目中的用于定義項(xiàng)目中的資源。資源。 8.2.3 對(duì)話(huà)框組成及運(yùn)行機(jī)制對(duì)話(huà)框組成及運(yùn)行機(jī)制資源通過(guò)資源通過(guò)標(biāo)識(shí)符標(biāo)識(shí)符ID唯一標(biāo)識(shí),唯一標(biāo)識(shí),一個(gè)項(xiàng)目中所有的資源標(biāo)識(shí)符一個(gè)項(xiàng)目中所有的資源標(biāo)識(shí)符都放在都放在Resource.h文件中。文件中。 從從MFC編程的角度來(lái)看,一個(gè)編程的角度來(lái)看,一個(gè)對(duì)話(huà)框由兩部分組成:對(duì)話(huà)框由兩部分組成:對(duì)話(huà)框?qū)υ?huà)框

8、資源和對(duì)話(huà)框類(lèi)資源和對(duì)話(huà)框類(lèi),這也是,這也是Windows編程的一個(gè)主要特編程的一個(gè)主要特點(diǎn),即點(diǎn),即資源資源和和代碼代碼分離。分離。 那么程序是如何運(yùn)行的?那么程序是如何運(yùn)行的?對(duì)話(huà)框?qū)υ?huà)框是如何顯示的?是如何顯示的?程序是如何響應(yīng)程序是如何響應(yīng)按鈕按鈕單擊操作的?單擊操作的? 程序運(yùn)行機(jī)制程序運(yùn)行機(jī)制在在MFC應(yīng)用程序中有一個(gè)應(yīng)用程序中有一個(gè)CWinApp派生類(lèi)的派生類(lèi)的對(duì)象對(duì)象theApp(在(在Multiplication.cpp文件中文件中定義),它是一個(gè)全局變量,代表了應(yīng)用程定義),它是一個(gè)全局變量,代表了應(yīng)用程序運(yùn)行實(shí)例的主線(xiàn)程。序運(yùn)行實(shí)例的主線(xiàn)程。 在在CWinApp派生類(lèi)的所

9、有成員函數(shù)中,只有派生類(lèi)的所有成員函數(shù)中,只有InitInstance()函數(shù)是派生類(lèi)唯一需要重載的函數(shù)是派生類(lèi)唯一需要重載的函數(shù)。該函數(shù)負(fù)責(zé)應(yīng)用程序的初始化工作。函數(shù)。該函數(shù)負(fù)責(zé)應(yīng)用程序的初始化工作。 程序運(yùn)行機(jī)制程序運(yùn)行機(jī)制BOOL CMultiplicationApp:InitInstance()CMultiplicationDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK)else if (nResponse = IDCANCEL)return FALSE;定義了一個(gè)對(duì)話(huà)框?qū)?/p>

10、象定義了一個(gè)對(duì)話(huà)框?qū)ο骴lg DoModal()函數(shù)負(fù)責(zé)對(duì)話(huà)框的顯示和撤函數(shù)負(fù)責(zé)對(duì)話(huà)框的顯示和撤銷(xiāo),包括載入對(duì)話(huà)框資源,調(diào)用銷(xiāo),包括載入對(duì)話(huà)框資源,調(diào)用CDialog:OnInitDialog()函數(shù)初始化函數(shù)初始化對(duì)話(huà)框和將對(duì)話(huà)框顯示在屏幕上。然對(duì)話(huà)框和將對(duì)話(huà)框顯示在屏幕上。然后啟動(dòng)一個(gè)消息循環(huán),以響應(yīng)用戶(hù)的后啟動(dòng)一個(gè)消息循環(huán),以響應(yīng)用戶(hù)的輸入。輸入。 BOOL CMultiplicationApp:InitInstance()CMultiplicationDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nRes

11、ponse = IDOK)else if (nResponse = IDCANCEL)return FALSE;若用戶(hù)在對(duì)話(huà)框內(nèi)單擊了若用戶(hù)在對(duì)話(huà)框內(nèi)單擊了ID為為IDOK的按鈕,則的按鈕,則CDialog:OnOK()函數(shù)將被調(diào)用。函數(shù)將被調(diào)用。OnOK()函數(shù)函數(shù)調(diào)用調(diào)用CDialog:EndDialog()函數(shù)關(guān)閉對(duì)話(huà)框。關(guān)函數(shù)關(guān)閉對(duì)話(huà)框。關(guān)閉對(duì)話(huà)框后,閉對(duì)話(huà)框后,DoModal()會(huì)返回值會(huì)返回值IDOK。 若用戶(hù)在對(duì)話(huà)框內(nèi)單擊了若用戶(hù)在對(duì)話(huà)框內(nèi)單擊了ID為為IDCANCEL的按鈕,則的按鈕,則CDialog:OnCancel()函數(shù)被調(diào)用。該函數(shù)調(diào)用函數(shù)被調(diào)用。該函數(shù)調(diào)用CDialo

12、g:EndDialog()函數(shù)關(guān)閉對(duì)話(huà)框。關(guān)閉對(duì)話(huà)框函數(shù)關(guān)閉對(duì)話(huà)框。關(guān)閉對(duì)話(huà)框后,后,DoModal()會(huì)返回值會(huì)返回值IDCANCEL。 8.2.4 對(duì)話(huà)框的屬性對(duì)話(huà)框的屬性對(duì)話(huà)框的屬性都是由集成開(kāi)發(fā)環(huán)境設(shè)置的默認(rèn)對(duì)話(huà)框的屬性都是由集成開(kāi)發(fā)環(huán)境設(shè)置的默認(rèn)值,如果想重新設(shè)置對(duì)話(huà)框,只需在對(duì)話(huà)框值,如果想重新設(shè)置對(duì)話(huà)框,只需在對(duì)話(huà)框資源窗口中單擊資源窗口中單擊鼠標(biāo)右鍵鼠標(biāo)右鍵,在彈出的快捷菜,在彈出的快捷菜單中選擇單中選擇Properties命令命令,打開(kāi)對(duì)話(huà)框資源,打開(kāi)對(duì)話(huà)框資源的屬性窗口的屬性窗口 ?!纠?-1續(xù)續(xù)】【例例8-1續(xù)續(xù)】在例在例8-1基礎(chǔ)上,修改對(duì)話(huà)框的標(biāo)基礎(chǔ)上,修改對(duì)話(huà)框的

13、標(biāo)題。修改對(duì)話(huà)框?qū)傩缘念}。修改對(duì)話(huà)框?qū)傩缘牟僮鞑襟E:操作步驟:(1)單擊鼠標(biāo)右鍵,選擇)單擊鼠標(biāo)右鍵,選擇Properties命令,命令,打開(kāi)打開(kāi)Dialog Properties對(duì)話(huà)框。對(duì)話(huà)框。(2)在)在General選項(xiàng)卡中的選項(xiàng)卡中的Caption編輯框中編輯框中錄入錄入“乘法計(jì)算器乘法計(jì)算器”。(3)編譯、鏈接、運(yùn)行。)編譯、鏈接、運(yùn)行?!纠?-1續(xù)續(xù)】8.2.5 靜態(tài)文本控件靜態(tài)文本控件靜態(tài)文本控件用來(lái)顯示一個(gè)文本串。默認(rèn)情況靜態(tài)文本控件用來(lái)顯示一個(gè)文本串。默認(rèn)情況下 , 所 有 靜 態(tài) 文 本 控 件 的下 , 所 有 靜 態(tài) 文 本 控 件 的 I D 都 為都 為IDC_S

14、TATIC;如果需要單獨(dú)處理某個(gè)靜態(tài)文本控件,則需要如果需要單獨(dú)處理某個(gè)靜態(tài)文本控件,則需要為其重新設(shè)置一個(gè)唯一的為其重新設(shè)置一個(gè)唯一的ID值。值。靜態(tài)文本控件最長(zhǎng)能夠顯示靜態(tài)文本控件最長(zhǎng)能夠顯示255個(gè)字符個(gè)字符,可以,可以使用使用n實(shí)現(xiàn)換行。實(shí)現(xiàn)換行。 【例例8-1續(xù)續(xù)】【例例8-1續(xù)續(xù)】在在8.2.4節(jié)中的節(jié)中的例例8-1續(xù)續(xù)基礎(chǔ)上,基礎(chǔ)上,添加添加“*”和和“=”靜態(tài)文本控件。靜態(tài)文本控件。添加靜態(tài)文本控件的添加靜態(tài)文本控件的操作步驟如下。操作步驟如下。(1)打開(kāi))打開(kāi)Multiplication工程,刪除對(duì)話(huà)框上工程,刪除對(duì)話(huà)框上原有的靜態(tài)文本控件和兩個(gè)按鈕。原有的靜態(tài)文本控件和兩個(gè)

15、按鈕。(2)單擊控件工具欄中)單擊控件工具欄中“靜態(tài)文本控件靜態(tài)文本控件”按按鈕,當(dāng)鼠標(biāo)移動(dòng)到對(duì)話(huà)框上后變?yōu)槭中?,鈕,當(dāng)鼠標(biāo)移動(dòng)到對(duì)話(huà)框上后變?yōu)槭中?,然后在?duì)話(huà)框中單擊鼠標(biāo),生成一個(gè)靜態(tài)文然后在對(duì)話(huà)框中單擊鼠標(biāo),生成一個(gè)靜態(tài)文本控件。本控件?!纠?-1續(xù)續(xù)】( 3 ) 右 鍵 單 擊 該 靜 態(tài) 文 本 控 件 , 選 擇) 右 鍵 單 擊 該 靜 態(tài) 文 本 控 件 , 選 擇Properties命令,在命令,在Caption編輯框文本改編輯框文本改為為“*” ?!纠?-1續(xù)續(xù)】(4)調(diào)整對(duì)話(huà)框大小。)調(diào)整對(duì)話(huà)框大小。(5)重復(fù)步驟()重復(fù)步驟(3)添加靜態(tài)文本控件,將其)添加靜態(tài)文

16、本控件,將其Caption編輯框文本改為編輯框文本改為“=” 。(6)編譯、鏈接、運(yùn)行。)編譯、鏈接、運(yùn)行。【例例8-1續(xù)續(xù)】8.2.6 文本編輯框控件文本編輯框控件當(dāng)乘法計(jì)算器程序的提示信息設(shè)置完畢后,需要錄入計(jì)當(dāng)乘法計(jì)算器程序的提示信息設(shè)置完畢后,需要錄入計(jì)算數(shù)值,算數(shù)值,Visual C+提供了文本編輯框控件來(lái)完成此提供了文本編輯框控件來(lái)完成此項(xiàng)工作。項(xiàng)工作。文本編輯框是用戶(hù)從鍵盤(pán)輸入、編輯文本的矩形窗口,文本編輯框是用戶(hù)從鍵盤(pán)輸入、編輯文本的矩形窗口,既可以是既可以是單行單行,也可以是,也可以是多行多行,多行文本編輯框的行,多行文本編輯框的行號(hào)從零開(kāi)始。號(hào)從零開(kāi)始。在一個(gè)多行編輯框中,

17、除了最后一行外,每一行的結(jié)尾在一個(gè)多行編輯框中,除了最后一行外,每一行的結(jié)尾處都有一對(duì)處都有一對(duì)回車(chē)換行符回車(chē)換行符(“rn”),這對(duì)回車(chē)換行符),這對(duì)回車(chē)換行符是文本換行的標(biāo)志。是文本換行的標(biāo)志。 【例例8-1續(xù)續(xù)】【例例8-1續(xù)續(xù)】在在8.2.5節(jié)中的例節(jié)中的例8-1續(xù)基礎(chǔ)上,添續(xù)基礎(chǔ)上,添加加“操作數(shù)操作數(shù)”和和“計(jì)算結(jié)果計(jì)算結(jié)果”文本編輯框控文本編輯框控件。件。添加文本編輯框控件的添加文本編輯框控件的操作步驟:操作步驟:(1)單擊控件工具欄中)單擊控件工具欄中“文本編輯控件文本編輯控件”按按鈕,當(dāng)鼠標(biāo)移動(dòng)到對(duì)話(huà)框上后變?yōu)槭中危o,當(dāng)鼠標(biāo)移動(dòng)到對(duì)話(huà)框上后變?yōu)槭中?,然后在?duì)話(huà)框中單擊鼠

18、標(biāo),生成一個(gè)文本編然后在對(duì)話(huà)框中單擊鼠標(biāo),生成一個(gè)文本編輯控件。輯控件。(2)右鍵單擊該文本編輯框控件,選擇)右鍵單擊該文本編輯框控件,選擇Properties命令,將命令,將General選項(xiàng)卡中的選項(xiàng)卡中的ID修改為修改為IDC_OPERAND1,Styles選項(xiàng)卡中選項(xiàng)卡中的的Align text改為改為Right。(3)參照步驟()參照步驟(1)和步驟()和步驟(2),添加文本),添加文本編輯框,編輯框,ID修改為修改為IDC_ OPERAND2?!纠?-1續(xù)續(xù)】(4)參照步驟()參照步驟(1)和步驟()和步驟(2),添加文本),添加文本編輯框,編輯框,ID分別修改為分別修改為IDC

19、_RESULT。另外。另外由于計(jì)算結(jié)果不需要用戶(hù)輸入,所以將由于計(jì)算結(jié)果不需要用戶(hù)輸入,所以將Styles選項(xiàng)卡中的選項(xiàng)卡中的Read-only選中,編輯框選中,編輯框變?yōu)榛疑?,不能編輯。變?yōu)榛疑?,不能編輯。?)編譯、鏈接、運(yùn)行。)編譯、鏈接、運(yùn)行。 【例例8-1續(xù)續(xù)】8.2.7 為控件定義關(guān)聯(lián)變量為控件定義關(guān)聯(lián)變量當(dāng)用戶(hù)在文本編輯框中輸入數(shù)據(jù)時(shí),程序如何當(dāng)用戶(hù)在文本編輯框中輸入數(shù)據(jù)時(shí),程序如何獲得相應(yīng)的內(nèi)容呢?獲得相應(yīng)的內(nèi)容呢?MFC允許為每個(gè)控件定義關(guān)聯(lián)變量,該關(guān)聯(lián)變?cè)试S為每個(gè)控件定義關(guān)聯(lián)變量,該關(guān)聯(lián)變量可以與控件實(shí)現(xiàn)聯(lián)動(dòng)或數(shù)據(jù)交換。量可以與控件實(shí)現(xiàn)聯(lián)動(dòng)或數(shù)據(jù)交換。 【例例8-1續(xù)續(xù)】【

20、例例8-1續(xù)續(xù)】在在8.2.6節(jié)中的例節(jié)中的例8-1續(xù)基礎(chǔ)上,為續(xù)基礎(chǔ)上,為三個(gè)文本編輯框分別添加一個(gè)關(guān)聯(lián)變量。三個(gè)文本編輯框分別添加一個(gè)關(guān)聯(lián)變量。為控件定義關(guān)聯(lián)變量的為控件定義關(guān)聯(lián)變量的操作步驟:操作步驟:(1)選擇菜單)選擇菜單View|ClassWizard命令,在彈命令,在彈出的對(duì)話(huà)框中選擇出的對(duì)話(huà)框中選擇Member Variables選項(xiàng)卡選項(xiàng)卡。其中。其中Project列表框用于選擇列表框用于選擇工程名工程名,即,即Multiplication;Class name列表框指定列表框指定類(lèi)類(lèi)名名,選擇,選擇CMultiplicationDlg。選擇選擇CMultiplication

21、Dlg,其含義為添加的關(guān),其含義為添加的關(guān)聯(lián)變量作為該類(lèi)的成員變量;聯(lián)變量作為該類(lèi)的成員變量;Control IDs中中列出了列出了CMultiplicationDlg類(lèi)中所有控件的類(lèi)中所有控件的ID?!纠?-1續(xù)續(xù)】工程名工程名類(lèi)名類(lèi)名控件列表控件列表(2)在)在Control IDs處選擇處選擇IDC_OPERAND1選項(xiàng),單擊選項(xiàng),單擊Add Variable按鈕,從中可設(shè)置按鈕,從中可設(shè)置控件控件IDC_OPERAND1關(guān)聯(lián)的變量名稱(chēng)、類(lèi)別關(guān)聯(lián)的變量名稱(chēng)、類(lèi)別和數(shù)據(jù)類(lèi)型。在和數(shù)據(jù)類(lèi)型。在Member Variable name中輸中輸入入m_dOperand1,在,在Category

22、中選擇中選擇Value,在,在Variable type中選擇中選擇double,單擊,單擊OK按鈕。按鈕?!纠?-1續(xù)續(xù)】大多數(shù)控件的大多數(shù)控件的Category列表框都有列表框都有Value和和Control兩個(gè)可選項(xiàng)。兩個(gè)可選項(xiàng)。Control所對(duì)應(yīng)的所對(duì)應(yīng)的Variable type是是MFC為該控為該控件封裝的控件類(lèi);件封裝的控件類(lèi);Value所對(duì)應(yīng)的所對(duì)應(yīng)的Variable type各不相同,有各不相同,有CString、int、UINT、long、BOOL、float、double等類(lèi)型。等類(lèi)型。 【例例8-1續(xù)續(xù)】為控件添加Control類(lèi)型關(guān)聯(lián)變量可以控制該控件的行為,添加

23、Value類(lèi)型關(guān)聯(lián)變量可以方便獲取控件數(shù)據(jù)。MFC允許為同一控件最多關(guān)聯(lián)兩個(gè)變量,即為Value和Control各關(guān)聯(lián)一個(gè)變量。( 3 ) 用 同 樣 的 方 法 為 文 本 編 輯 框) 用 同 樣 的 方 法 為 文 本 編 輯 框IDC_OPERAND2和和IDC_RESULT添加關(guān)聯(lián)添加關(guān)聯(lián)變量變量m_dOperand2和和m_dResult。對(duì)于添加的關(guān)聯(lián)變量,根據(jù)不同的數(shù)據(jù)類(lèi)型,對(duì)于添加的關(guān)聯(lián)變量,根據(jù)不同的數(shù)據(jù)類(lèi)型,可以設(shè)置限制,如可以設(shè)置限制,如double類(lèi)型可設(shè)置最大、最類(lèi)型可設(shè)置最大、最小值;小值;CString類(lèi)型可設(shè)置最大字符數(shù)等類(lèi)型可設(shè)置最大字符數(shù)等 【例例8-1續(xù)

24、續(xù)】8.2.8 DDX/DDV機(jī)制機(jī)制當(dāng)關(guān)聯(lián)變量添加完畢后,當(dāng)關(guān)聯(lián)變量添加完畢后,ClassWizard自動(dòng)對(duì)源文件自動(dòng)對(duì)源文件做了如下修改。做了如下修改。 (1)在)在MultiplicationDlg.h文件中添加了關(guān)聯(lián)變量的聲明。文件中添加了關(guān)聯(lián)變量的聲明。class CMultiplicationDlg : public CDialog /AFX_DATA(CMultiplicationDlg) enum IDD = IDD_MULTIPLICATION_DIALOG ; doublem_dOperand1; doublem_dOperand2; doublem_dResult; /A

25、FX_DATA;(2)在)在MultiplicationDlg.cpp文件中文件中CMultiplicationDlg類(lèi)的構(gòu)造函數(shù)中添加了初始化代碼:類(lèi)的構(gòu)造函數(shù)中添加了初始化代碼:CMultiplicationDlg:CMultiplicationDlg(CWnd* pParent /*=NULL*/): CDialog(CMultiplicationDlg:IDD, pParent)/AFX_DATA_INIT(CMultiplicationDlg)m_dOperand1 = 0.0;m_dOperand2 = 0.0;m_dResult = 0.0;/AFX_DATA_INITDDX/D

26、DV機(jī)制機(jī)制(3)在)在MultiplicationDlg.cpp文件中文件中DoDataExchange函數(shù)函數(shù)中添加了如下代碼:中添加了如下代碼:void CMultiplicationDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CMultiplicationDlg)DDX_Text(pDX, IDC_OPERAND1, m_dOperand1);DDX_Text(pDX, IDC_OPERAND2, m_dOperand2);DDX_Text(pDX, IDC_RESULT

27、, m_dResult);/AFX_DATA_MAPMFC為了使控件與關(guān)聯(lián)變量能夠綁定,提供了為了使控件與關(guān)聯(lián)變量能夠綁定,提供了對(duì)話(huà)框數(shù)據(jù)交換(對(duì)話(huà)框數(shù)據(jù)交換(Dialog Data Exchange,DDX)和對(duì)話(huà)框數(shù)據(jù)驗(yàn)證有效性()和對(duì)話(huà)框數(shù)據(jù)驗(yàn)證有效性(Dialog Data Verify,DDV)機(jī)制。)機(jī)制。 DDX/DDV機(jī)制機(jī)制v DDX機(jī)制將對(duì)話(huà)框資源中的控件和對(duì)話(huà)框類(lèi)機(jī)制將對(duì)話(huà)框資源中的控件和對(duì)話(huà)框類(lèi)的一個(gè)成員變量之間建立關(guān)聯(lián),使成員變量的一個(gè)成員變量之間建立關(guān)聯(lián),使成員變量和控件之間的數(shù)據(jù)交換更加容易。和控件之間的數(shù)據(jù)交換更加容易。v DDV機(jī)制用于在返回成員變量之前自動(dòng)

28、校驗(yàn)機(jī)制用于在返回成員變量之前自動(dòng)校驗(yàn)數(shù)據(jù)的長(zhǎng)度和范圍,并發(fā)出相應(yīng)的警告信息數(shù)據(jù)的長(zhǎng)度和范圍,并發(fā)出相應(yīng)的警告信息。DDX/DDV機(jī)制機(jī)制DDX函數(shù)是一個(gè)全局函數(shù),其函數(shù)聲明如下:函數(shù)是一個(gè)全局函數(shù),其函數(shù)聲明如下: void AFXAPI DDX_type(CDataExchange *pDX,int CtrlID,VariableType& m_data);其中其中type表示成員變量的類(lèi)別,可以為表示成員變量的類(lèi)別,可以為Control或或Text;pDX是一個(gè)指向是一個(gè)指向CDataExchange數(shù)據(jù)交換類(lèi)對(duì)數(shù)據(jù)交換類(lèi)對(duì)象的指針;象的指針;CtrlID是進(jìn)行數(shù)據(jù)交換的控件是進(jìn)

29、行數(shù)據(jù)交換的控件ID;m_data是進(jìn)行數(shù)據(jù)交換的成員變量名。是進(jìn)行數(shù)據(jù)交換的成員變量名。如如 DDX_Text(pDX, IDC_OPERAND1, m_dOperand1);表示表示m_dOperand1是一個(gè)是一個(gè)Value值類(lèi)別的成員變量,值類(lèi)別的成員變量,用于與用于與IDC_OPERAND1文本編輯框控件實(shí)現(xiàn)數(shù)據(jù)文本編輯框控件實(shí)現(xiàn)數(shù)據(jù)交換。交換。DDX/DDV機(jī)制機(jī)制DDV函數(shù)也是全局函數(shù),有兩種重載形式,分別用于校驗(yàn)函數(shù)也是全局函數(shù),有兩種重載形式,分別用于校驗(yàn)字符串?dāng)?shù)據(jù)和數(shù)值數(shù)據(jù)。字符串?dāng)?shù)據(jù)和數(shù)值數(shù)據(jù)。void AFXAPI DDV_MaxChars(CDataExchange

30、*pDX,CString const& m_data ,int nChars);void AFXAPI DDV_MinMaxVariableType(CDataExchange *pDX, VariableType m_data, VariableType minVal, VariableType MaxVal);如如 DDV_MinMaxDouble(pDX, m_dOperand1, 0., 100.); 表示表示double類(lèi)型成員變量類(lèi)型成員變量m_dOperand1的最小值和最大的最小值和最大值分別是值分別是0.0和和100.0。DDX/DDV機(jī)制機(jī)制其中其中Variable

31、Type是成員變量的數(shù)據(jù)類(lèi)型,是成員變量的數(shù)據(jù)類(lèi)型,m_data是成員變量,是成員變量,nChars是字符串?dāng)?shù)據(jù)的最大長(zhǎng)度,是字符串?dāng)?shù)據(jù)的最大長(zhǎng)度,minVal和和maxVal分別是數(shù)值數(shù)據(jù)的最小值和最大值。分別是數(shù)值數(shù)據(jù)的最小值和最大值。如如DDV_MinMaxDouble(pDX, m_dOperand1, 0., 100.);表示表示double類(lèi)型成員變量類(lèi)型成員變量m_dOperand1的最小值和最的最小值和最大值分別是大值分別是0.0和和100.0。如果用戶(hù)輸入的數(shù)值超過(guò)這個(gè)范圍,如果用戶(hù)輸入的數(shù)值超過(guò)這個(gè)范圍,DDV就顯示信息就顯示信息對(duì)話(huà)框,提示用戶(hù)有效的輸入范圍。對(duì)話(huà)框,提示

32、用戶(hù)有效的輸入范圍。另外程序如果已經(jīng)指定文本編輯框控件與另外程序如果已經(jīng)指定文本編輯框控件與double類(lèi)型類(lèi)型變量關(guān)聯(lián),那么當(dāng)用戶(hù)輸入的不是數(shù)值,變量關(guān)聯(lián),那么當(dāng)用戶(hù)輸入的不是數(shù)值,DDV也會(huì)也會(huì)提出提示。提出提示。DDX/DDV機(jī)制機(jī)制上兩個(gè)信息對(duì)話(huà)框并不是用戶(hù)在輸入數(shù)據(jù)后立上兩個(gè)信息對(duì)話(huà)框并不是用戶(hù)在輸入數(shù)據(jù)后立即彈出,而是在調(diào)用即彈出,而是在調(diào)用DoDataExchange()函函數(shù)時(shí)才會(huì)出現(xiàn)的。數(shù)時(shí)才會(huì)出現(xiàn)的。但但MFC程序中一般不直接調(diào)用程序中一般不直接調(diào)用DoDataExchange()函數(shù),而是通過(guò)函數(shù),而是通過(guò)UpdateData()函數(shù)間接調(diào)用。函數(shù)間接調(diào)用。 DDX/DD

33、V機(jī)制機(jī)制可以通過(guò)可以通過(guò)UpdateData()函數(shù)的參數(shù)控制數(shù)據(jù)在函數(shù)的參數(shù)控制數(shù)據(jù)在控件和關(guān)聯(lián)變量之間的傳遞方向:控件和關(guān)聯(lián)變量之間的傳遞方向:當(dāng)調(diào)用當(dāng)調(diào)用UpdateData(TRUE)時(shí),程序通過(guò)調(diào)用時(shí),程序通過(guò)調(diào)用DoDataExchange()函數(shù)函數(shù)將數(shù)據(jù)從控件傳遞將數(shù)據(jù)從控件傳遞到關(guān)聯(lián)變量到關(guān)聯(lián)變量。當(dāng)調(diào)用當(dāng)調(diào)用UpdateData(FALSE)時(shí),程序通過(guò)調(diào)用時(shí),程序通過(guò)調(diào)用DoDataExchange()函數(shù)函數(shù)將數(shù)據(jù)從關(guān)聯(lián)變量將數(shù)據(jù)從關(guān)聯(lián)變量傳遞到控件傳遞到控件,實(shí)現(xiàn)了控件在刷新后重新獲取,實(shí)現(xiàn)了控件在刷新后重新獲取關(guān)聯(lián)變量的值。關(guān)聯(lián)變量的值。DDX/DDV機(jī)制機(jī)制v

34、在對(duì)話(huà)框在對(duì)話(huà)框初始化時(shí)或關(guān)聯(lián)變量數(shù)據(jù)發(fā)生變化初始化時(shí)或關(guān)聯(lián)變量數(shù)據(jù)發(fā)生變化時(shí)需要調(diào)用時(shí)需要調(diào)用UpdateData(FALSE)函數(shù),以函數(shù),以使控件正確顯示數(shù)據(jù)內(nèi)容;如果要使控件正確顯示數(shù)據(jù)內(nèi)容;如果要獲取獲取用戶(hù)用戶(hù)在控件中的輸入在控件中的輸入信息信息時(shí),需要調(diào)用時(shí),需要調(diào)用UpdateData(TRUE)。v DDX和和DDV不僅適用于文本編輯框,還適用不僅適用于文本編輯框,還適用于單選按鈕、復(fù)選按鈕、組合框等控件,于單選按鈕、復(fù)選按鈕、組合框等控件,MFC為它們提供了對(duì)應(yīng)的為它們提供了對(duì)應(yīng)的DDX和和DDV函數(shù)。函數(shù)。DDX/DDV機(jī)制機(jī)制8.2.9 按鈕控件按鈕控件當(dāng)用戶(hù)錄入兩個(gè)相

35、乘的數(shù)值后,程序不會(huì)自動(dòng)當(dāng)用戶(hù)錄入兩個(gè)相乘的數(shù)值后,程序不會(huì)自動(dòng)得到結(jié)果,那么程序何時(shí)開(kāi)始計(jì)算呢?得到結(jié)果,那么程序何時(shí)開(kāi)始計(jì)算呢?這通常需要有一個(gè)外部事件來(lái)觸發(fā)計(jì)算過(guò)程的這通常需要有一個(gè)外部事件來(lái)觸發(fā)計(jì)算過(guò)程的執(zhí)行。執(zhí)行。MFC可利用按鈕控件來(lái)完成此功能,當(dāng)按鈕控可利用按鈕控件來(lái)完成此功能,當(dāng)按鈕控件按下后會(huì)產(chǎn)生一個(gè)事件,執(zhí)行對(duì)應(yīng)的響應(yīng)件按下后會(huì)產(chǎn)生一個(gè)事件,執(zhí)行對(duì)應(yīng)的響應(yīng)函數(shù)。函數(shù)。 【例例8-1續(xù)續(xù)】【例例8-1續(xù)續(xù)】在在8.2.7節(jié)中的例節(jié)中的例8-1續(xù)基礎(chǔ)上,添續(xù)基礎(chǔ)上,添加一個(gè)加一個(gè)“計(jì)算計(jì)算”按鈕控件。添加按鈕控件的按鈕控件。添加按鈕控件的操作步驟:操作步驟:(1)單擊控件工具欄

36、中按鈕控件,當(dāng)鼠標(biāo)移動(dòng))單擊控件工具欄中按鈕控件,當(dāng)鼠標(biāo)移動(dòng)到對(duì)話(huà)框上后變?yōu)槭中?,然后在?duì)話(huà)框中到對(duì)話(huà)框上后變?yōu)槭中?,然后在?duì)話(huà)框中單擊鼠標(biāo),生成一個(gè)按鈕控件。單擊鼠標(biāo),生成一個(gè)按鈕控件。(2)右鍵單擊該按鈕控件,選擇)右鍵單擊該按鈕控件,選擇Properties命命令 , 將令 , 將 G e n e r a l 選 項(xiàng) 卡 中 的選 項(xiàng) 卡 中 的 I D 修 改 為修 改 為IDC_CALC,Caption修改為:修改為:“計(jì)算計(jì)算”。【例例8-1續(xù)續(xù)】(3)選擇菜單)選擇菜單View|ClassWizard命令,在彈命令,在彈出的對(duì)話(huà)框中選擇出的對(duì)話(huà)框中選擇Message Maps

37、選項(xiàng)卡,選項(xiàng)卡,Object IDs列表框顯示該類(lèi)包含的所有對(duì)象列表框顯示該類(lèi)包含的所有對(duì)象標(biāo)識(shí)標(biāo)識(shí)ID; Messages列表框列表框顯示顯示Object IDs列表框中被列表框中被選中控件具有的所有消息。選中控件具有的所有消息。【例例8-1續(xù)續(xù)】該類(lèi)包含的所有對(duì)象標(biāo)識(shí)該類(lèi)包含的所有對(duì)象標(biāo)識(shí)所選控件具有的消息所選控件具有的消息【例例8-1續(xù)續(xù)】(4)在)在Object IDs列表框中選擇列表框中選擇IDC_CALC選選項(xiàng),在項(xiàng),在Messages列表框中選擇列表框中選擇BN_CLICKED消息,然后單擊消息,然后單擊Add Function按鈕。按鈕?!纠?-1續(xù)續(xù)】(5)單擊)單擊OK按

38、鈕,系統(tǒng)會(huì)自動(dòng)生成響應(yīng)按鈕,系統(tǒng)會(huì)自動(dòng)生成響應(yīng)IDC_CALC按鈕單擊事件的消息處理函數(shù)按鈕單擊事件的消息處理函數(shù)OnCalc(),并返回到,并返回到ClassWizard對(duì)話(huà)框。對(duì)話(huà)框。 然后單擊右側(cè)中部的然后單擊右側(cè)中部的Edit Code按鈕按鈕,自動(dòng)打開(kāi),自動(dòng)打開(kāi)該 函 數(shù) 所 在 的 源 代 碼 文 件 (該 函 數(shù) 所 在 的 源 代 碼 文 件 (CMultiplicationDlg.cpp),并定位到該函數(shù)),并定位到該函數(shù)的實(shí)現(xiàn)代碼處。的實(shí)現(xiàn)代碼處。【例例8-1續(xù)續(xù)】(6)在)在OnCalc()函數(shù)中添加如下代碼:函數(shù)中添加如下代碼:void CMultiplicationD

39、lg:OnCalc() / TODO: Add your control notification handler code here UpdateData(TRUE); /獲取用戶(hù)輸入的數(shù)值獲取用戶(hù)輸入的數(shù)值m_dResult = m_dOperand1 * m_dOperand2;UpdateData(FALSE); /將計(jì)算結(jié)果顯示在界面上將計(jì)算結(jié)果顯示在界面上【例例8-1續(xù)續(xù)】(7)編譯、鏈接、運(yùn)行程序。)編譯、鏈接、運(yùn)行程序。【例例8-1續(xù)續(xù)】8.2.10 控件布局管理控件布局管理為了使界面美觀,這為了使界面美觀,這6個(gè)控件應(yīng)保證水平對(duì)齊并個(gè)控件應(yīng)保證水平對(duì)齊并且間隔相同,控件布局管

40、理就是調(diào)整對(duì)話(huà)框且間隔相同,控件布局管理就是調(diào)整對(duì)話(huà)框中一組控件的大小或位置的工具中一組控件的大小或位置的工具 。【例例8-1續(xù)續(xù)】【例例8-1續(xù)續(xù)】在在8.29節(jié)中的例節(jié)中的例8-1續(xù)基礎(chǔ)上,合續(xù)基礎(chǔ)上,合理布局乘法計(jì)算器中的控件??丶季株P(guān)聯(lián)理布局乘法計(jì)算器中的控件??丶季株P(guān)聯(lián)的的操作步驟:操作步驟:(1)拖動(dòng))拖動(dòng)IDC_OPERAND1文本編輯框,使之文本編輯框,使之垂直居中,并靠對(duì)話(huà)框左側(cè);拖動(dòng)垂直居中,并靠對(duì)話(huà)框左側(cè);拖動(dòng)IDC_CALC按鈕,使之垂直居中,并在靠對(duì)按鈕,使之垂直居中,并在靠對(duì)話(huà)框右側(cè)。話(huà)框右側(cè)。(2)按?。┌醋hift鍵,依次選中各控件,最后一鍵,依次選中各控

41、件,最后一個(gè)被選中的控件是參考控件,其被選中框?yàn)閭€(gè)被選中的控件是參考控件,其被選中框?yàn)?個(gè)實(shí)點(diǎn)。個(gè)實(shí)點(diǎn)。(3)選擇菜單)選擇菜單Layout|Align|Vert. Center命令命令,所有的控件都以,所有的控件都以IDC_OPERAND1文本編文本編輯框的垂直中心位置對(duì)齊。輯框的垂直中心位置對(duì)齊。(4)繼續(xù)選擇菜單)繼續(xù)選擇菜單Layout|Space Evenly| A c r o s s 命 令 , 所 有 的 控 件 以命 令 , 所 有 的 控 件 以IDC_OPERAND1文本編輯框和文本編輯框和IDC_CALC按鈕作為兩端邊緣,平局分布各控件的水平按鈕作為兩端邊緣,平局分布各控

42、件的水平方向位置。方向位置。(5)鼠標(biāo)單擊空白區(qū)域,釋放選擇的控件,控)鼠標(biāo)單擊空白區(qū)域,釋放選擇的控件,控件布局結(jié)束件布局結(jié)束 。【例例8-1續(xù)續(xù)】8.2.11 CString類(lèi)類(lèi)MFC提供了大量封裝好的類(lèi),其中有一個(gè)提供了大量封裝好的類(lèi),其中有一個(gè)CString類(lèi)用于處理字符串。類(lèi)用于處理字符串。CString沒(méi)有基類(lèi)。一個(gè)沒(méi)有基類(lèi)。一個(gè)CString對(duì)象由可變長(zhǎng)對(duì)象由可變長(zhǎng)度的一隊(duì)字符組成。度的一隊(duì)字符組成。CString是是MFC中的一種很有用的數(shù)據(jù)類(lèi)型,中的一種很有用的數(shù)據(jù)類(lèi)型,它簡(jiǎn)化了字符串的各種操作。它簡(jiǎn)化了字符串的各種操作。 CString對(duì)象采用了動(dòng)態(tài)分配內(nèi)存的機(jī)制。即在對(duì)象

43、采用了動(dòng)態(tài)分配內(nèi)存的機(jī)制。即在創(chuàng)建創(chuàng)建CString對(duì)象時(shí),不需對(duì)該對(duì)象指明內(nèi)存對(duì)象時(shí),不需對(duì)該對(duì)象指明內(nèi)存大小,大小,CString會(huì)根據(jù)實(shí)際情況動(dòng)態(tài)地進(jìn)行分會(huì)根據(jù)實(shí)際情況動(dòng)態(tài)地進(jìn)行分配。配。創(chuàng)建一個(gè)創(chuàng)建一個(gè)CString類(lèi)對(duì)象并為其賦值的方法有以類(lèi)對(duì)象并為其賦值的方法有以下幾種方法。下幾種方法。CString類(lèi)對(duì)象的構(gòu)造類(lèi)對(duì)象的構(gòu)造(1) CString str1; str1=“hello”;(2) CString str2=“hello”;(3) CString str3=str2;(4) CString str4(C); /str4=“C”(5) CString str5(C,5);

44、/str5=“CCCCC”創(chuàng)建創(chuàng)建CString類(lèi)對(duì)象類(lèi)對(duì)象第一種方法是先構(gòu)造一個(gè)第一種方法是先構(gòu)造一個(gè)CString類(lèi)的對(duì)象,然后再使用類(lèi)的對(duì)象,然后再使用賦值語(yǔ)句為其賦值。賦值語(yǔ)句為其賦值。第二種方法是在構(gòu)造第二種方法是在構(gòu)造CString類(lèi)對(duì)象的同時(shí),類(lèi)對(duì)象的同時(shí),進(jìn)行初始化。進(jìn)行初始化。第三種方法是在構(gòu)造第三種方法是在構(gòu)造CString類(lèi)對(duì)象時(shí),利用已類(lèi)對(duì)象時(shí),利用已有對(duì)象為其初始化有對(duì)象為其初始化第四種方法是在構(gòu)造第四種方法是在構(gòu)造CString類(lèi)對(duì)象的同時(shí),類(lèi)對(duì)象的同時(shí),用單字符為其初始化。用單字符為其初始化。第五種方法是在構(gòu)造第五種方法是在構(gòu)造CString類(lèi)對(duì)象時(shí),指明產(chǎn)類(lèi)對(duì)象

45、時(shí),指明產(chǎn)生一個(gè)字符串的方法。生一個(gè)字符串的方法。CString類(lèi)常用成員函數(shù)類(lèi)常用成員函數(shù)(1)字符串連接。使用)字符串連接。使用CString類(lèi)型能夠很方類(lèi)型能夠很方便地連接兩個(gè)字符串,如:便地連接兩個(gè)字符串,如:CString msg1 = Hello;CString msg2 = World;CString msg = msg1 + msg2;CString類(lèi)類(lèi)(2)字符串轉(zhuǎn)換為數(shù)值。在)字符串轉(zhuǎn)換為數(shù)值。在C語(yǔ)言中存在函數(shù)語(yǔ)言中存在函數(shù)atof()可以將字符串轉(zhuǎn)換為數(shù)值,不需要逐個(gè)可以將字符串轉(zhuǎn)換為數(shù)值,不需要逐個(gè)字符解析。其函數(shù)聲明為:字符解析。其函數(shù)聲明為:double atof

46、(const char *nptr);CString對(duì)象作為參數(shù)也可以完成轉(zhuǎn)換。對(duì)象作為參數(shù)也可以完成轉(zhuǎn)換。CString digital = 123.45;double d = atof(digital); /d=123.45 CString類(lèi)類(lèi)(3)字符串格式化。字符串格式化是把其它)字符串格式化。字符串格式化是把其它類(lèi)型數(shù)據(jù)轉(zhuǎn)化為類(lèi)型數(shù)據(jù)轉(zhuǎn)化為CString類(lèi)型的方法。如:類(lèi)型的方法。如:把一個(gè)整數(shù)轉(zhuǎn)化成把一個(gè)整數(shù)轉(zhuǎn)化成CString類(lèi)型,可用如下類(lèi)型,可用如下方法:方法:CString s;s.Format(“%d”,10);Format()函數(shù)的參數(shù)與函數(shù)的參數(shù)與C語(yǔ)言中語(yǔ)言中pri

47、ntf()函數(shù)函數(shù)的參數(shù)含義相同。的參數(shù)含義相同。CString類(lèi)類(lèi)(4)刪除指定字符串。)刪除指定字符串。CString類(lèi)提供類(lèi)提供TrimLeft()和和TrimRight()函數(shù)刪除指定的函數(shù)刪除指定的字符串。其函數(shù)聲明為:字符串。其函數(shù)聲明為:void TrimLeft(); void TrimLeft(TCHAR chTarget); 如果沒(méi)有參數(shù),則從左刪除如果沒(méi)有參數(shù),則從左刪除n、t和空格等和空格等字符,直到遇到一個(gè)非此類(lèi)字符。字符,直到遇到一個(gè)非此類(lèi)字符。CString類(lèi)類(lèi)如果指定的參數(shù)是字符串,從字符串左邊看起如果指定的參數(shù)是字符串,從字符串左邊看起,遇到括號(hào)中出現(xiàn)的字符(

48、參數(shù))全部刪除,遇到括號(hào)中出現(xiàn)的字符(參數(shù))全部刪除,直到出現(xiàn)第一個(gè)括號(hào)中未出現(xiàn)的字符時(shí)停,直到出現(xiàn)第一個(gè)括號(hào)中未出現(xiàn)的字符時(shí)停止刪除,即使后面又出現(xiàn)了參數(shù)中有的字符止刪除,即使后面又出現(xiàn)了參數(shù)中有的字符也不會(huì)刪去了。也不會(huì)刪去了。CString s=0123456789;s.TrimLeft(02);結(jié)果s=123456789。 CString類(lèi)類(lèi)(5)獲得特定子串,)獲得特定子串,CString類(lèi)提供類(lèi)提供Left()和和Right()函數(shù)來(lái)獲取從字符串左側(cè)開(kāi)始或右側(cè)函數(shù)來(lái)獲取從字符串左側(cè)開(kāi)始或右側(cè)開(kāi)始的連續(xù)若干個(gè)字符,其函數(shù)聲明為:開(kāi)始的連續(xù)若干個(gè)字符,其函數(shù)聲明為:CString Le

49、ft(int nCount) const; CString Right(int nCount) const;其中nCount個(gè)字符的個(gè)數(shù) CString s=123456789; CString l=s.Left(5);/l=12345 CString r=s.Right(5); /r=56789CString類(lèi)類(lèi)(6)獲得字符串長(zhǎng)度,)獲得字符串長(zhǎng)度,CString類(lèi)提供類(lèi)提供GetLength()函數(shù)來(lái)獲取字符串的長(zhǎng)度,其函數(shù)來(lái)獲取字符串的長(zhǎng)度,其函數(shù)聲明為:函數(shù)聲明為: int GetLength( ) const;CString類(lèi)類(lèi)8.2.12 補(bǔ)充案例補(bǔ)充案例【例例8-3】 簡(jiǎn)單通訊

50、錄。通訊錄包括姓名和電簡(jiǎn)單通訊錄。通訊錄包括姓名和電話(huà)號(hào)碼,通過(guò)單擊按鈕將錄入的信息保存在話(huà)號(hào)碼,通過(guò)單擊按鈕將錄入的信息保存在一個(gè)多行的文本編輯框中。一個(gè)多行的文本編輯框中。(1)創(chuàng)建基于對(duì)話(huà)框的)創(chuàng)建基于對(duì)話(huà)框的Record工程。工程。(2)刪除對(duì)話(huà)框中原有的)刪除對(duì)話(huà)框中原有的“確定確定”、“取消取消”按鈕和靜態(tài)文本控件,然后添加按鈕和靜態(tài)文本控件,然后添加3個(gè)文本編個(gè)文本編輯框、輯框、2個(gè)靜態(tài)文本控件和個(gè)靜態(tài)文本控件和1個(gè)按鈕,布局如個(gè)按鈕,布局如下圖。下圖?!纠?-3】(3)修改文本編輯框控件屬性及)修改文本編輯框控件屬性及ID,最左側(cè)文,最左側(cè)文本編輯框控件本編輯框控件ID為為I

51、DC_RECORD,屬性設(shè),屬性設(shè)置如下圖所示;置如下圖所示; 右側(cè)上方文本編輯框控件右側(cè)上方文本編輯框控件ID為為IDC_NAME,其他設(shè)置不變;右側(cè)下方文本編輯框控件其他設(shè)置不變;右側(cè)下方文本編輯框控件ID為為IDC_PHONENUMBER,并將,并將Styles選項(xiàng)選項(xiàng)卡中的卡中的Number選中,其他設(shè)置不變。選中,其他設(shè)置不變?!纠?-3】(4)修改其他控件,按鈕控件)修改其他控件,按鈕控件ID為為IDC_ADD, C a p t i o n 為為 “ 添 加添 加 ” ; 對(duì) 話(huà) 框 控 件; 對(duì) 話(huà) 框 控 件Caption為:為:“通訊錄通訊錄”。(5)為文本編輯框控件添加關(guān)

52、聯(lián)變量,單擊菜)為文本編輯框控件添加關(guān)聯(lián)變量,單擊菜單單View|ClassWizard命令,在命令,在Member Variables選項(xiàng)卡中添加如下圖所示的關(guān)聯(lián)選項(xiàng)卡中添加如下圖所示的關(guān)聯(lián)變量。變量?!纠?-3】【例例8-3】(6)為按鈕控件添加消息響應(yīng)函數(shù),單擊菜單)為按鈕控件添加消息響應(yīng)函數(shù),單擊菜單View|ClassWizard命令,在命令,在Message Maps選項(xiàng)卡中為選項(xiàng)卡中為IDC_ADD按鈕添加按鈕添加BN_CLICKED消息響應(yīng)函數(shù)消息響應(yīng)函數(shù)OnAdd()?!纠?-3】【例例8-3】(7)在函數(shù))在函數(shù)OnAdd()中添加代碼如下:中添加代碼如下:void CRecordDlg:OnAdd() UpdateData(TRUE);/獲取用戶(hù)輸入信息獲取用戶(hù)輸入信息/姓名和電話(huà)號(hào)碼同時(shí)不為空姓名和電話(huà)號(hào)碼同時(shí)不為空if(!m_strName.IsEmpty() & !m_strPhoneNumber.IsEmpty()m_strRecord += m_strName;m_strRecord += ;m_strRecord += m_strPhoneNumber;m_strRecord += rn;m

溫馨提示

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

評(píng)論

0/150

提交評(píng)論