Visual C++面向?qū)ο笈c可視化程序設(shè)計(jì)CD第11章_第1頁
Visual C++面向?qū)ο笈c可視化程序設(shè)計(jì)CD第11章_第2頁
Visual C++面向?qū)ο笈c可視化程序設(shè)計(jì)CD第11章_第3頁
Visual C++面向?qū)ο笈c可視化程序設(shè)計(jì)CD第11章_第4頁
Visual C++面向?qū)ο笈c可視化程序設(shè)計(jì)CD第11章_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第11章制作含編輯框的應(yīng)用程序

編輯框在Windows風(fēng)格的應(yīng)用程序中是隨處可見的,當(dāng)需要獲得來自用戶的文本信息,或者要讓用戶輸入或編輯文本時(shí),應(yīng)該使用編輯控件。編輯框控件具有許多功能,Windows中的記事本(Notepad)應(yīng)用程序就是一個(gè)帶有控件菜單的編輯控件。編輯框控件單行編輯框控件多行編輯框控件11.1編輯框控件簡介

編輯框控件類CEdit的結(jié)構(gòu)很復(fù)雜,當(dāng)創(chuàng)建CEdit對象時(shí),MFC自動(dòng)賦予該對象一個(gè)標(biāo)準(zhǔn)的Windows編輯控件,它定義了CEdit對象。Afxwin.hclassCEdit:publicCWnd{DECLARE_DYNAMIC(CEdit)//定義構(gòu)造函數(shù)public:

CEdit();BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);//定義成員函數(shù)

BOOLCanUndo()const;

int

GetLineCount()const;BOOLGetModify()const;voidSetModify(BOOLbModified=TRUE);voidGetRect(LPRECTlpRect)const;DWORDGetSel()const;voidGetSel(int&nStartChar,int&nEndChar)const;HLOCALGetHandle()const;voidSetHandle(HLOCALhBuffer);#if(WINVER>=0x400)voidSetMargins(UINTnLeft,UINTnRight);DWORDGetMargins()const;voidSetLimitText(UINTnMax);UINTGetLimitText()const;

CPoint

PosFromChar(UINTnChar)const;

int

CharFromPos(CPointpt)const;#endif//NOTE:firstwordinlpszBuffermustcontainthesizeofthebuffer! intGetLine(int

nIndex,LPTSTRlpszBuffer)const; intGetLine(int

nIndex,LPTSTRlpszBuffer,intnMaxLength)const;//操作

voidEmptyUndoBuffer(); BOOLFmtLines(BOOLbAddEOL); voidLimitText(int

nChars=0); intLineFromChar(int

nIndex=-1)const; intLineIndex(int

nLine=-1)const; intLineLength(int

nLine=-1)const; voidLineScroll(int

nLines,intnChars=0); voidReplaceSel(LPCTSTRlpszNewText,BOOLbCanUndo=FALSE); voidSetPasswordChar(TCHARch); voidSetRect(LPCRECTlpRect); voidSetRectNP(LPCRECTlpRect); voidSetSel(DWORD

dwSelection,BOOLbNoScroll=FALSE); voidSetSel(int

nStartChar,intnEndChar,BOOLbNoScroll=FALSE); BOOLSetTabStops(int

nTabStops,LPINTrgTabStops); voidSetTabStops(); BOOLSetTabStops(constint&cxEachStop);//takesan'int'//剪貼板操作

BOOLUndo(); voidClear(); voidCopy(); voidCut(); voidPaste(); BOOLSetReadOnly(BOOLbReadOnly=TRUE); intGetFirstVisibleLine()const; TCHARGetPasswordChar()const;//Implementationpublic: virtual~CEdit();//虛擬析構(gòu)函數(shù)};應(yīng)用程序的窗口布局如圖所示。功能如下:11.2編輯控件的應(yīng)用

單擊Showl,則在Edit1編輯框中顯示“ThisisthefirstEditBox.”;單擊Clear1,則Edit1編輯框中的內(nèi)容被清除;單擊Show2,則在Edit2編輯框中顯示“ThisisthesecondEditBox!”;單擊Clear2,則Edit2編輯框中的內(nèi)容被清除;單擊Transfer,則把Edit1編輯框的內(nèi)容復(fù)制到Edit2的編輯框中去;單擊Undo,則取消上一次操作;若單擊Exit,則退出程序的運(yùn)行。具體的編程過程1.建立工程文件2.可視化編程生成了工程文件和工程工作區(qū)文件后在EditBox的工作區(qū)中選擇ResourceView因?yàn)楸緫?yīng)用程序是基于對話框的,由向?qū)蓪υ捒虼翱谧鳛閼?yīng)用程序的主窗口,并且給這個(gè)對話框取名為IDD_EDITBOX_DIALOG,然后在這個(gè)對話框窗口中進(jìn)行界面設(shè)計(jì)。在ResourceView選項(xiàng)卡中打開Dialog資源組,然后雙擊IDD_EDITBOX_DIALOG。VC在工作臺中顯示可以進(jìn)行可視化編輯的IDD_EDITBOX_DIALOG對話框把鼠標(biāo)停在編輯框控件上,即可顯示該控件的類型控件工具窗提供了VC中所有可建立的控件類型利用控件窗口中的編輯框控件,在對話框中布置如右圖所示的編輯框?qū)⑹髽?biāo)移到Edit1編輯框上-->單擊鼠標(biāo)右鍵,(在快捷菜單中)選擇-->Properties命令,在窗口中輸入控件的ID標(biāo)識值,IDC_EDIT1,用同樣的方法設(shè)置其它各個(gè)對象的屬性3.應(yīng)用程序的代碼編程部分

給編輯框連接變量把鼠標(biāo)移到編輯框EDIT1上,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇ClassWizard命令,此時(shí)顯示一個(gè)ClassWizard對話框。(a)選擇MemberVariables選項(xiàng)卡(b)在ControlIds列表框中單擊IDC_EDIT1項(xiàng),使之高亮化(c)單擊AddVariable按鈕,此時(shí)顯示AddMemberVariable窗口設(shè)置成員變量名為m_Edit1,類別為Control,變量類型為CEdit注意,不要將m_Edit1設(shè)為CString類型,因?yàn)橹挥性O(shè)為CEdit

類型,才能夠調(diào)用CEdit

類中的一些成員函數(shù),如Copy(),Paste()等,這樣才能完成本應(yīng)用程序中對Transfer按鈕要求復(fù)制內(nèi)容的操作的響應(yīng)。

用同樣的方法給編輯框EDIT2等其它對象連接各自的變量,增加變量之后MFCClassWizard窗口將變?yōu)橄聢D所示。若此時(shí)運(yùn)行該程序,在Edit文本框中不能進(jìn)行多行輸入,只能單行輸入文本,而且按回車鍵終止應(yīng)用程序,同時(shí),文本框中也沒有水平和垂直滾動(dòng)條。下面,我們來完善應(yīng)用程序中編輯框的特性,使之能夠進(jìn)行多行文本的輸入。在編輯框EDIT1單擊鼠標(biāo)右鍵在快捷菜單中選Properties命令選Styles選項(xiàng)卡可進(jìn)行多行輸入增加水平及垂直滾動(dòng)條如果不選擇這一項(xiàng)的話,在編輯框中按回車鍵就會終止應(yīng)用程序,若選此項(xiàng),按回車鍵就可進(jìn)行下一行的輸入,實(shí)現(xiàn)多行文本的輸入4.修改編輯框的特性5.添加代碼1.在按鈕Showl上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇ClassWizard2.選擇IDC_SHOW1_BUTTON項(xiàng)3.選擇BN_CLICKED項(xiàng)4.單擊5.在彈出的AddMemberFunction中接受建議的函數(shù)名OnShow1Button()6.Memberfunctions列表框中增加了成員函數(shù)OnShow1Button()7.單擊voidCEditBoxDlg::OnShow1Button(){ m_Edit1.SetSel(0,-1);//選中編輯框IDC_EDIT1中的全部內(nèi)容

m_Edit1.ReplaceSel(“ThisisthefirstEditBox.”);}程序中SetSel()函數(shù)是CEdit類中的成員函數(shù),因?yàn)閙_Edit1是屬于CEdit類的對象,故可以調(diào)用該類所有的成員函數(shù)。ReplaceSel()函數(shù)也是CEdit類中成員函數(shù)。(1)給Showl按鈕連接代碼(2)給Clear1按鈕連接代碼VoidCEditBoxDlg::OnClearlButton(){m_Editl.SetSel(0,-1);//表示選中編輯框IDC_EDIT1中的全部內(nèi)容m_Editl.ReplaceSel("");//用空字符串代替所選中的文本,即把所選的文本刪除掉//代碼編寫結(jié)束}(3)給Show2和Clear2按鈕連接代碼VoidCEditBoxDlg::OnShow2Button(){m_Edit2.SetSel(0,-1);表示選中編輯框IDC_EDIT2中的全部內(nèi)容

m_Edit2.ReplaceSel("ThisisthesecondEditBox."); //用新的文本代替所有原有的文本}VoidCEditBoxDlg::OnClear2Button(){m_Edit2.SetSel(0,-1);//表示選中編輯框IDC_EDIT2中的全部內(nèi)容

m_Edit2.ReplaceSel("");//用空字符串代替所選中的文本,即把所選的文本刪除掉}(4)給按鈕IDC_Transfer_BUTTON連接代碼voidCEditBoxDlg::OnCopyButton(){m_Editl.SetSel(0,-1);m_Editl.Copy();//將m_Editl編輯框中所選的內(nèi)容拷貝到剪貼板上

m_Edit2.SetSel(0,-1)m_Edit2.ReplaceSel("");m_Edit2.Paste();//將剪貼板中的內(nèi)容粘貼到m_Edit2編輯框中}(5)給Undo按鈕連接代碼voidCEditBoxDlg::OnUndoButton(){

m_Edit1.Undo();//Undo()函數(shù)是CEdit類中的成員函數(shù),表示取消編輯框中上一次操作

m_EdIT2.Undo();//編寫代碼開始}(6)給Exit按鈕連接代碼voidCEditBoxDlg::OnOKButton(){

OnOK();}25【例】編寫一個(gè)程序,能夠輸入學(xué)生的信息,包括:“學(xué)號”、“姓名”、“性別”、“年齡”和所在的系,并能根據(jù)學(xué)生的“學(xué)號”、“姓名”和系別來進(jìn)行檢索。當(dāng)檢索到的信息超過一個(gè)時(shí),能夠依次顯示。下面以“學(xué)生信息”組合框、“學(xué)號”靜態(tài)文本框和編輯框?yàn)槔M(jìn)行詳細(xì)的介紹。在左圖中單擊“組合框”按鈕,在對話框的左上角按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的組合框,然后在組合框上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇Properties菜單項(xiàng),然后在彈出的Groupboxproperties對話框中的輸入ID值和Caption屬性。再單擊“靜態(tài)文本”按鈕,在“學(xué)生信息”組合框中的左上角按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫靜態(tài)文本框,然后在靜態(tài)文本框上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇Properties菜單項(xiàng),然后在彈出的Properties對話框中的Caption屬性編輯框中輸入“學(xué)號”。再單擊“編輯框”按鈕,在“學(xué)生信息”組合框中的右上角按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)編輯框,然后在編輯框上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇Properties菜單項(xiàng),然后在彈出的EditProperties對話框中設(shè)置編輯框的屬性,如下圖所示。同樣在已建立的各個(gè)控件上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇Properties選項(xiàng),按照從上到下的順序設(shè)置各編輯框?qū)ο蟮膶傩匀缦卤硭?。最后兩列是控件連接的變量。依照例題要求建立按鈕控件,首先刪除對話框中的Cancel按鈕和OK按鈕。在控件工具欄中單擊“按鈕”按鈕,在窗口的右下角按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)按鈕,在按鈕上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇Properties菜單項(xiàng),此時(shí)彈出了一個(gè)PushButtonProperties對話框,輸入ID和Caption屬性。依次可以繪制其它的下壓式按鈕。其屬性如下表所示。添加變量界面在文件11-8Dlg.h中的對話框類CMy11-8Dlg定義前,加入記錄學(xué)生信息的結(jié)構(gòu)體定義:structstudent{

CString

csCode; //學(xué)號

CString

csName; //姓名

CString

csSex; //性別

CString

csAge; //年齡

CString

csDept; //系別};在窗口中打開ClassView窗口,在對話框類CMy11-8Dlg上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇AddMemberVariables選項(xiàng)(如右圖),在彈出的AddMmemberVariables對話框中的variable編輯框中輸入student,在variablename編輯框中輸入structStudent[10],這樣就定義了一個(gè)能記錄10個(gè)學(xué)生信息的結(jié)構(gòu)數(shù)組。然后采用此種辦法加入變量:int

nStudentNum,int

nAccordNum,intnAccordItem[10]。分別用來記錄以輸入學(xué)生的數(shù)目,檢索時(shí)符合條件的學(xué)生的數(shù)目,符合檢索條件的學(xué)生在structstudent[10]中的位置。voidCMy11_8Dlg::OnBtnInput(){

UpdateData(TRUE); //從窗口編輯框中讀入數(shù)據(jù)

structStudent[nStudentNum].csCode=m_csCode; //賦值給學(xué)生結(jié)構(gòu)體

structStudent[nStudentNum].csName=m_csName;

structStudent[nStudentNum].csSex=m_csSex;

structStudent[nStudentNum].csAge=m_csAge;

structStudent[nStudentNum].csDept=m_csDept;

nStudentNum++;}定義函數(shù)UpdateData(TRUE)將窗口中編輯框中信息存儲到與編輯框連接的CString型變量中去。然后將這些CString型變量保存到structStudent數(shù)組中。然后變量nStudentNum自增。voidCMy11_8Dlg::OnBtnSearch(){ BOOLbAccordCode=FALSE;//設(shè)置學(xué)號是否符合的變量

BOOLbAccordName=FALSE;//設(shè)置姓名是否符合的變量

BOOLbAccordDept=FALSE;//設(shè)置所在系名稱是否符合的變量

CString

csBuffer;

nAccordNum=0; //符合Search條件的記錄個(gè)數(shù)

UpdateData(TRUE); for(inti=0;i<nStudentNum;i++)//從窗口編輯框中讀入數(shù)據(jù) {//學(xué)號是否符合.if(m_csSearchCode==""||m_csSearchCode==structStudent[i].csCode) {bAccordCode=TRUE; } else{bAccordCode=FALSE;} //姓名是否符合.if(m_csSearchName==""||m_csSearchName==structStudent[i].csName) {bAccordName=TRUE;} else{bAccordName=FALSE;} //系名稱是否符合.if(m_csSearchDept==""||m_csSearchDept==structStudent[i].csDept) {bAccordDept=TRUE;} else{bAccordDept=FALSE;} //如果都符合.if(bAccordCode==TRUE&&bAccordName==TRUE&&bAccordDept==TRUE) {nAccordItem[nAccordNum]=i;nAccordNum++;} }//顯示記錄框csBuffer.Format("Thereare%daccordingrecords",nAccordNum);MessageBox(csBuffer,"Attention",MB_OK|MB_ICONINFORMATION);//顯示第1條符合的記錄if(nAccordNum>0){m_csCode=structStudent[nAccordItem[0]].csCode;m_csName=structStudent[nAccordItem[0]].csName;m_csSex=structStudent[nAccordItem[0]].csSex;m_csAge=structStudent[nAccordItem[0]].csAge;m_csDept=structStudent[nAccordItem[0]].csDept;

UpdateData(FALSE);}//當(dāng)記錄數(shù)大于1時(shí),Continue按鈕有效if(nAccordNum>1){GetDlgItem(IDC_BTN_CONTINUE)->EnableWindow(1);}}當(dāng)符合檢索條件的學(xué)生數(shù)大于1時(shí),“下一條信息”按鈕有效。單擊此按鈕,用于顯示下一個(gè)學(xué)生信息

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論