版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家庭教育中的親子關(guān)系建立與維護(hù)策略
- 教育科技助力小學(xué)新課標(biāo)的實(shí)施與優(yōu)化
- 教學(xué)智能化、教學(xué)情境和師生互動(dòng)關(guān)系的研究報(bào)告
- 教育政策與學(xué)生創(chuàng)新能力培養(yǎng)的關(guān)系研究
- 教育機(jī)構(gòu)在農(nóng)村科普中的角色和貢獻(xiàn)
- 教育心理學(xué)在孩子成長中的應(yīng)用
- 數(shù)字時(shí)代的辦公變革AI圖像識別的實(shí)際應(yīng)用
- 小區(qū)超市采購策略與成本控制
- 提升商業(yè)環(huán)境中員工的安全生產(chǎn)意識
- Unit 4 My home Part A Let's talk 說課(說課稿)-2024-2025學(xué)年人教PEP版英語四年級上冊
- Unit 7 同步練習(xí)人教版2024七年級英語上冊
- 電廠員工三級安全培訓(xùn)(完美版)課件
- 2024年中考復(fù)習(xí)-數(shù)學(xué)(廣州專用)(解析版)
- 第三十六屆全國電力行業(yè)風(fēng)力發(fā)電運(yùn)行檢修職業(yè)技能競賽基礎(chǔ)理論題庫附有答案
- 2024年紀(jì)檢監(jiān)察綜合業(yè)務(wù)知識題庫含答案(研優(yōu)卷)
- 科室醫(yī)療質(zhì)量與安全管理小組工作制度
- 中華民族共同體概論課件第五講大一統(tǒng)與中華民族共同體初步形成(秦漢時(shí)期)
- 初二生地會考試卷及答案-文檔
- 私營企業(yè)廉潔培訓(xùn)課件
- 施工單位值班人員安全交底和要求
- 中國保險(xiǎn)用戶需求趨勢洞察報(bào)告
評論
0/150
提交評論