第十講高級編程_第1頁
第十講高級編程_第2頁
第十講高級編程_第3頁
第十講高級編程_第4頁
第十講高級編程_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Visual C+面向?qū)ο竺嫦驅(qū)ο?與可視化程序設(shè)計與可視化程序設(shè)計信息科學(xué)與工程學(xué)院信息科學(xué)與工程學(xué)院20082008年年制作含編輯框的應(yīng)用程序制作含編輯框的應(yīng)用程序高級編程技術(shù)高級編程技術(shù) 第九講第九講編輯框在編輯框在Windows風(fēng)格的應(yīng)用程序中是隨處可見的,當(dāng)風(fēng)格的應(yīng)用程序中是隨處可見的,當(dāng)需要獲得來自用戶的文本信息,或者要讓用戶輸入或需要獲得來自用戶的文本信息,或者要讓用戶輸入或編輯文本時,應(yīng)該使用編輯控件。編輯文本時,應(yīng)該使用編輯控件。 編輯框控件具有許多功能,編輯框控件具有許多功能,WindowsWindows中的中的記事本記事本(NotepadNotepad)應(yīng)用程序就是一個帶

2、有控件應(yīng)用程序就是一個帶有控件菜單的編輯控件。菜單的編輯控件。編輯框控件編輯框控件單行編輯框控件單行編輯框控件多行編輯框控件多行編輯框控件11.1 編輯框控件簡介編輯框控件簡介 編輯框控件類編輯框控件類CEdit的結(jié)構(gòu)很復(fù)雜,當(dāng)創(chuàng)建的結(jié)構(gòu)很復(fù)雜,當(dāng)創(chuàng)建CEdit對象時,對象時,MFC自動賦予該對象一個標(biāo)準(zhǔn)的自動賦予該對象一個標(biāo)準(zhǔn)的Windows編輯控件,它定編輯控件,它定義了義了CEdit對象。對象。Afxwin.hclass CEdit : public CWnd DECLARE_DYNAMIC(CEdit)/ 定義構(gòu)造函數(shù)定義構(gòu)造函數(shù)public: CEdit(); BOOL Create

3、(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);/ 定義成員函數(shù)定義成員函數(shù) BOOL CanUndo() const; int GetLineCount() const; BOOL GetModify() const; void SetModify(BOOL bModified = TRUE); void GetRect(LPRECT lpRect) const; DWORD GetSel() const; void GetSel(int& nStartChar, int& nEndChar) const; HLOC

4、AL GetHandle() const; void SetHandle(HLOCAL hBuffer);#if (WINVER = 0 x400) void SetMargins(UINT nLeft, UINT nRight); DWORD GetMargins() const; void SetLimitText(UINT nMax); UINT GetLimitText() const; CPoint PosFromChar(UINT nChar) const; int CharFromPos(CPoint pt) const;#endif/ NOTE: first word in l

5、pszBuffer must contain the size of the buffer!int GetLine(int nIndex, LPTSTR lpszBuffer) const;int GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const;/ 操作操作void EmptyUndoBuffer();BOOL FmtLines(BOOL bAddEOL);void LimitText(int nChars = 0);int LineFromChar(int nIndex = -1) const;int LineInde

6、x(int nLine = -1) const;int LineLength(int nLine = -1) const;void LineScroll(int nLines, int nChars = 0);void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE);void SetPasswordChar(TCHAR ch);void SetRect(LPCRECT lpRect);void SetRectNP(LPCRECT lpRect);void SetSel(DWORD dwSelection, BOOL bNoScrol

7、l = FALSE);void SetSel(int nStartChar, int nEndChar, BOOL bNoScroll = FALSE);BOOL SetTabStops(int nTabStops, LPINT rgTabStops);void SetTabStops();BOOL SetTabStops(const int& cxEachStop); / takes an int/ 剪貼板操作剪貼板操作BOOL Undo();void Clear();void Copy();void Cut();void Paste();BOOL SetReadOnly(BOOL bRea

8、dOnly = TRUE);int GetFirstVisibleLine() const;TCHAR GetPasswordChar() const;/ Implementationpublic:virtual CEdit(); /虛擬析構(gòu)函數(shù)虛擬析構(gòu)函數(shù);表表 11-1 通通用用 CEdit 類類的的方方法法方方法法說說明明CanUndo()決決定定一一個個編編輯輯操操作作是是否否可可以以撤撤銷銷Clear()從從編編輯輯控控件件中中刪刪除除當(dāng)當(dāng)前前的的選選擇擇(如如果果有有的的話話)Copy()將將編編輯輯控控件件當(dāng)當(dāng)前前的的選選擇擇(如如果果有有的的話話)以以 CF_TEXT 格格式式

9、復(fù)復(fù)制制到到剪剪貼貼板板中中Cut()剪剪下下編編輯輯控控件件中中的的當(dāng)當(dāng)前前選選擇擇(如如果果有有的的話話)并并以以 CF_TEXT 格格式式復(fù)復(fù)制制到到剪剪貼貼板板中中EmptyUndoBuffer()消消除除一一個個編編輯輯控控件件的的“撤撤銷銷”標(biāo)標(biāo)志志GetFirstVisibleLine()確確定定編編輯輯控控件件中中的的最最上上面面的的可可視視行行GetModify()確確定定一一個個編編輯輯控控件件的的內(nèi)內(nèi)容容是是否否可可修修改改GetPasswordChar()當(dāng)當(dāng)用用戶戶輸輸入入文文本本時時,獲獲得得編編輯輯控控件件中中顯顯示示的的密密碼碼字字符符GetRect()獲獲得得

10、一一個個編編輯輯控控件件的的格格式式化化矩矩形形GetSel()獲獲得得編編輯輯控控件件中中當(dāng)當(dāng)前前選選擇擇的的開開始始和和結(jié)結(jié)束束字字符符位位置置LimitText()限限定定用用戶戶可可能能輸輸入入一一編編輯輯控控件件的的文文本本長長度度LineFromChar()獲獲得得包包含含指指定定字字符符下下標(biāo)標(biāo)的的行行的的行行號號LineLength()獲獲得得編編輯輯控控件件中中的的一一行行的的長長度度LineScroll()滾滾動動多多行行編編輯輯控控件件的的文文本本Paste()將將剪剪貼貼板板的的數(shù)數(shù)據(jù)據(jù)插插入入到到編編輯輯控控件件作作當(dāng)當(dāng)前前的的光光標(biāo)標(biāo)位位置置,只只有有當(dāng)當(dāng)前前剪剪貼

11、貼板板中中數(shù)數(shù)據(jù)據(jù)格格式式為為 CF_TEXT 時時方方可可插插入入ReplaceSel()用用指指定定文文本本替替代代編編輯輯控控件件中中當(dāng)當(dāng)前前選選擇擇的的部部分分SetModify()設(shè)設(shè)置置或或清清除除編編輯輯控控件件的的修修改改標(biāo)標(biāo)志志SetPasswordChar()當(dāng)當(dāng)用用戶戶輸輸入入文文本本時時設(shè)設(shè)置置或或刪刪除除一一個個顯顯示示于于編編輯輯控控件件中中的的密密碼碼字字符符SetReadOnly()將將編編輯輯控控件件設(shè)設(shè)置置為為只只讀讀狀狀態(tài)態(tài)SetSel()在在編編輯輯控控件件中中選選擇擇字字符符的的范范圍圍Undo()取取消消最最后后一一個個編編輯輯控控件件操操作作表表

12、11-2 多行編輯所支持的多行編輯所支持的 CEdit 法法方法方法說明說明FmtLines()設(shè)置在多行編輯控件中包含軟分行符設(shè)置在多行編輯控件中包含軟分行符GetHandle()獲得當(dāng)前分配給一個多行編輯控件的內(nèi)存的句柄獲得當(dāng)前分配給一個多行編輯控件的內(nèi)存的句柄GetLine()從一編輯控件中獲得一行文本從一編輯控件中獲得一行文本GetLineCount()獲得多行編輯控件的行數(shù)獲得多行編輯控件的行數(shù)LineIndex()設(shè)置多行編輯控件中一行的字符下標(biāo)設(shè)置多行編輯控件中一行的字符下標(biāo)SetHandle()設(shè)置多行編輯控件將要用到的句柄內(nèi)存句柄設(shè)置多行編輯控件將要用到的句柄內(nèi)存句柄SetR

13、ect()設(shè)置多行編輯控件的格式化矩形并更新控件設(shè)置多行編輯控件的格式化矩形并更新控件SetRectNP()設(shè)置多行編輯控件的格式化矩形并且不重繪控件窗口設(shè)置多行編輯控件的格式化矩形并且不重繪控件窗口SetTabStops()在多行編輯控件中設(shè)置制表在多行編輯控件中設(shè)置制表(tab)位位應(yīng)用程序的窗口布局如圖所示。應(yīng)用程序的窗口布局如圖所示。9-5功能如下功能如下:11.2編輯控件的應(yīng)用編輯控件的應(yīng)用單擊單擊Showl,則在,則在Edit1編輯框中顯示編輯框中顯示“This is the first EditBox.”;單擊單擊Clear1,則,則Edit1編輯框中的內(nèi)容被清除;編輯框中的內(nèi)容

14、被清除;單擊單擊Show2,則在,則在Edit2編輯框中顯示編輯框中顯示“This is the second EditBox!”;單擊單擊Clear2,則,則Edit2編輯框中的內(nèi)容被清除;編輯框中的內(nèi)容被清除;單擊單擊Transfer,則把,則把Edit1編輯框的內(nèi)容復(fù)制到編輯框的內(nèi)容復(fù)制到Edit2的編輯框中去的編輯框中去;單擊單擊Undo,則取消上一次操作;,則取消上一次操作;若單擊若單擊Exit,則退出程序的運(yùn)行。,則退出程序的運(yùn)行。具體的編程過程具體的編程過程1建立工程文件建立工程文件2. 可視化編程可視化編程生成了工程文件和生成了工程文件和工程工作區(qū)文件后工程工作區(qū)文件后在在Ed

15、itBoxEditBox的工作區(qū)的工作區(qū)中選擇中選擇ResourceViewResourceView因為本應(yīng)用程序是基于對話框的,因為本應(yīng)用程序是基于對話框的,由向?qū)蓪υ捒虼翱谧鳛閼?yīng)用程由向?qū)蓪υ捒虼翱谧鳛閼?yīng)用程序的主窗口,并且給這個對話框取序的主窗口,并且給這個對話框取名為名為IDD_EDITBOX_DIALOGIDD_EDITBOX_DIALOG,然后然后在在這個對話框窗口中進(jìn)行這個對話框窗口中進(jìn)行界面設(shè)計界面設(shè)計。在在ResourceViewResourceView選項卡中打開選項卡中打開DialogDialog資源組,然后雙擊資源組,然后雙擊IDD_EDITBOX_DIALOG

16、IDD_EDITBOX_DIALOG。VCVC在工作臺中顯示可以進(jìn)行可視化編輯的在工作臺中顯示可以進(jìn)行可視化編輯的IDD_EDITBOX_DIALOGIDD_EDITBOX_DIALOG對對話框話框把鼠標(biāo)停在編輯框把鼠標(biāo)停在編輯框控件上,即可顯示控件上,即可顯示該控件的類型該控件的類型控件工具窗提供了控件工具窗提供了VCVC中中所有可建立的控件類型所有可建立的控件類型利用控件窗口中的編利用控件窗口中的編輯框控件,在對話框輯框控件,在對話框中布置如右圖所示的中布置如右圖所示的編輯框編輯框?qū)?象象I ID DC Ca ap pt ti io on n編編輯輯框框I ID DC C_ _E ED

17、DI IT T1 1無無編編輯輯框框I ID DC C_ _E ED DI IT T2 2無無命命令令按按鈕鈕I ID DC C_ _S SH HO OW W1 1_ _B BU UT TT TO ON NS Sh ho ow wl l命命令令按按鈕鈕I ID DC C_ _C CL LE EA AR R1 1_ _B BU UT TT TO ON NC Cl le ea ar rl l命命令令按按鈕鈕I ID DC C_ _S SH HO OW W2 2_ _B BU UT TT TO ON NS Sh ho ow w2 2命命令令按按鈕鈕I ID DC C_ _C CL LE EA AR

18、R2 2_ _B BU UT TT TO ON NC Cl le ea ar r2 2命命令令按按鈕鈕I ID DC C_ _T Tr ra an ns sf fe er r_ _B BU UT TT TO ON NT Tr ra an ns sf fe er r命命令令按按鈕鈕I ID DC C_ _E EX XI IT T_ _B BU UT TT TO ON N& &E Ex xi it t命命令令按按鈕鈕I ID DC C_ _U UN ND DO O_ _B BU UT TT TO ON N& &U Un nd do o將鼠標(biāo)移到將鼠標(biāo)移到Edit1Edit1編輯編輯框上框上- -

19、單擊鼠標(biāo)右鍵單擊鼠標(biāo)右鍵,( (在快捷菜單中在快捷菜單中) )選擇選擇- - PropertiesProperties命令,命令,在窗口中輸入控件的在窗口中輸入控件的IDID標(biāo)識值,標(biāo)識值,IDC_EDIT1IDC_EDIT1,用同樣的方法設(shè)置其它用同樣的方法設(shè)置其它各個對象的屬性各個對象的屬性3. 應(yīng)用程序的代碼編程部分應(yīng)用程序的代碼編程部分 給編輯框連接變量把鼠標(biāo)移到編輯框把鼠標(biāo)移到編輯框EDIT1上,單擊鼠標(biāo)右鍵,在彈出的快捷菜上,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇單中選擇ClassWizard命令,此時顯示一個命令,此時顯示一個ClassWizard對話框。對話框。(a)選擇選擇Me

20、mber Variables選項卡選項卡(b) 在在Control Ids列表框中單擊列表框中單擊IDC_EDIT1項,使之高亮化項,使之高亮化(c) 單擊單擊Add Variable按鈕,此時顯示按鈕,此時顯示Add Member Variable窗口窗口設(shè)置成員變量名為設(shè)置成員變量名為m_Edit1,類別為,類別為Control,變量類型為,變量類型為CEdit注意,不要將注意,不要將m_Edit1設(shè)為設(shè)為CString類型,因類型,因為只有設(shè)為為只有設(shè)為CEdit 類類型,才能夠調(diào)用型,才能夠調(diào)用CEdit 類中的一些成員函數(shù),類中的一些成員函數(shù),如如Copy () , Paste ()

21、 等,等,這樣才能完成本應(yīng)用這樣才能完成本應(yīng)用程序中對程序中對Transfer按按鈕要求復(fù)制內(nèi)容的操鈕要求復(fù)制內(nèi)容的操作的響應(yīng)。作的響應(yīng)。 用同樣的方法給編輯框用同樣的方法給編輯框EDIT2等其它對象連接各自的變量,等其它對象連接各自的變量,增加變量之后增加變量之后MFC ClassWizard窗口將變?yōu)橄聢D所示。窗口將變?yōu)橄聢D所示。 若此時運(yùn)行該程序,在若此時運(yùn)行該程序,在Edit文本框中文本框中不能進(jìn)行多行輸入,只不能進(jìn)行多行輸入,只能單行輸入文本,而且按回車鍵終止應(yīng)用程序,同時,文本框中能單行輸入文本,而且按回車鍵終止應(yīng)用程序,同時,文本框中也沒有水平和垂直滾動條。也沒有水平和垂直滾動條

22、。 下面,我們來完善應(yīng)用程序中編輯框的特性,使之能夠進(jìn)行下面,我們來完善應(yīng)用程序中編輯框的特性,使之能夠進(jìn)行多行文本的輸入。多行文本的輸入。在編輯框在編輯框EDIT1EDIT1單擊單擊鼠標(biāo)鼠標(biāo)右鍵右鍵在快捷菜單中選在快捷菜單中選PropertiesProperties命令命令選選Styles選項卡選項卡可進(jìn)行多行輸入可進(jìn)行多行輸入增加水平及垂直滾動條增加水平及垂直滾動條如果不選擇這如果不選擇這一項的話,在一項的話,在編輯框中按回編輯框中按回車鍵就會終止車鍵就會終止應(yīng)用程序,若應(yīng)用程序,若選此項,按回選此項,按回車鍵就可進(jìn)行車鍵就可進(jìn)行下一行的輸入,下一行的輸入,實現(xiàn)多行文本實現(xiàn)多行文本的輸入的

23、輸入4 . 修改編輯框的特性修改編輯框的特性5. 添加代碼添加代碼1. 在按鈕在按鈕Showl上單擊鼠標(biāo)右鍵,在上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇彈出的快捷菜單中選擇ClassWizard2. 選擇選擇IDC_SHOW1_BUTTONIDC_SHOW1_BUTTON項項3.3.選擇選擇BN_CLICKEDBN_CLICKED項項4.4.單擊單擊5.5.在彈出的在彈出的Add Add Member FunctionMember Function中中接受建議的函數(shù)名接受建議的函數(shù)名OnShow1Button()OnShow1Button()6.Member functions6.Member

24、functions列表框中增加了成員列表框中增加了成員函數(shù)函數(shù)OnShow1Button()OnShow1Button()7.7.單擊單擊void CEditBoxDlg:OnShow1Button()void CEditBoxDlg:OnShow1Button() m_Edit1.SetSel(0,-1);m_Edit1.SetSel(0,-1);/選中編輯框選中編輯框IDC_EDIT1IDC_EDIT1中的全部內(nèi)容中的全部內(nèi)容 m_Edit1.ReplaceSel(m_Edit1.ReplaceSel(“This is the first This is the first EditBox

25、.EditBox.”);); 程序中程序中SetSel()函數(shù)是函數(shù)是CEdit類中的成員函數(shù),因為類中的成員函數(shù),因為m_Edit1是屬于是屬于CEdit類的對象,故可以調(diào)用該類所有的成員函數(shù)。類的對象,故可以調(diào)用該類所有的成員函數(shù)。ReplaceSel()函數(shù)也是()函數(shù)也是CEdit類中成員函數(shù)。類中成員函數(shù)。(1) 給給Showl按鈕連接代碼按鈕連接代碼(2) 給給 Clear1按鈕連接代碼按鈕連接代碼Void CEditBoxDlgVoid CEditBoxDlg:OnClearlButtonOnClearlButton()() m_Editl.SetSel(0,-1)m_Editl

26、.SetSel(0,-1);/表示選中編輯框表示選中編輯框IDC_EDIT1IDC_EDIT1中的全部中的全部內(nèi)容內(nèi)容m_Editl.ReplaceSel()m_Editl.ReplaceSel();/用空字符串代替所選中的文本,即用空字符串代替所選中的文本,即把所選的文本刪除掉把所選的文本刪除掉/ / 代碼編寫結(jié)束代碼編寫結(jié)束 (3)給給Show2和和Clear2按鈕連接代碼按鈕連接代碼Void CEditBoxDlg:OnShow2ButtonVoid CEditBoxDlg:OnShow2Button()() m_Edit2.SetSel(0,-1)m_Edit2.SetSel(0,-1

27、);表示選中編輯框表示選中編輯框IDC_EDIT2IDC_EDIT2中的全部內(nèi)容中的全部內(nèi)容 m_Edit2.ReplaceSel(This is the second EditBox.)m_Edit2.ReplaceSel(This is the second EditBox.);/用新的文本代替所有原有的文本用新的文本代替所有原有的文本 Void CEditBoxDlg:OnClear2ButtonVoid CEditBoxDlg:OnClear2Button()() m_Edit2.SetSel(0,-1 m_Edit2.SetSel(0,-1) );/表示選中編輯框表示選中編輯框IDC

28、_EDIT2IDC_EDIT2中的全部內(nèi)容中的全部內(nèi)容 m_Edit2.ReplaceSel()m_Edit2.ReplaceSel();/用空字符串代替所選中的文本,即把所用空字符串代替所選中的文本,即把所選的文本刪除掉選的文本刪除掉 (4)給按鈕給按鈕IDC_Transfer_BUTTON連接代碼連接代碼void CEditBoxDlgvoid CEditBoxDlg:OnCopyButtonOnCopyButton()() m_Editl.SetSel(0,-1) m_Editl.SetSel(0,-1); m_Editl.Copy()m_Editl.Copy();/將將m_Editlm

29、_Editl編輯框中所選的內(nèi)容拷貝到剪貼板上編輯框中所選的內(nèi)容拷貝到剪貼板上 m_Edit2.SetSel(0,-1)m_Edit2.SetSel(0,-1) m_Edit2.ReplaceSel() m_Edit2.ReplaceSel(); m_Edit2.Paste()m_Edit2.Paste();/將剪貼板中的內(nèi)容粘貼到將剪貼板中的內(nèi)容粘貼到m_Edit2m_Edit2編輯框中編輯框中 (5) 給給 Undo按鈕連接代碼按鈕連接代碼void CEditBoxDlgvoid CEditBoxDlg:OnUndoButtonOnUndoButton()() m_Edit1.Undo()m

30、_Edit1.Undo();/ Undo/ Undo()函數(shù)是()函數(shù)是CEditCEdit類中的成員函數(shù)類中的成員函數(shù),表示取消編輯框中上一次操作,表示取消編輯框中上一次操作 m_EdIT2.Undo()m_EdIT2.Undo(); / / 編寫代碼開始編寫代碼開始 (6) 給給Exit按鈕連接代碼按鈕連接代碼void CEditBoxDlgvoid CEditBoxDlg:OnOKButtonOnOKButton()() OnOK OnOK()(); ;【例例】編寫一個程序,能夠輸入學(xué)生的信息,包括:編寫一個程序,能夠輸入學(xué)生的信息,包括:“學(xué)號學(xué)號”、“姓名姓名”、“性別性別”、“年齡

31、年齡”和所在的系,和所在的系,并能根據(jù)學(xué)生的并能根據(jù)學(xué)生的“學(xué)號學(xué)號”、“姓名姓名”和系別來進(jìn)行檢索和系別來進(jìn)行檢索。當(dāng)檢索到的信息超過一個時,能夠依次顯示。當(dāng)檢索到的信息超過一個時,能夠依次顯示。 下面以下面以“學(xué)生信息學(xué)生信息”組合框、組合框、“學(xué)號學(xué)號”靜態(tài)文本框和編輯框為例進(jìn)行詳細(xì)的介紹。靜態(tài)文本框和編輯框為例進(jìn)行詳細(xì)的介紹。在左圖中單擊在左圖中單擊“組合框組合框”按鈕,在對話框的按鈕,在對話框的左上角按下鼠標(biāo)左鍵并拖動鼠標(biāo)畫出一個大左上角按下鼠標(biāo)左鍵并拖動鼠標(biāo)畫出一個大小合適的組合框,然后在組合框上單擊鼠標(biāo)小合適的組合框,然后在組合框上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇右鍵,在彈出

32、的快捷菜單中選擇PropertiesProperties菜單項,然后在彈出的菜單項,然后在彈出的Group box Group box propertiesproperties對話框中的輸入對話框中的輸入IDID值和值和CaptionCaption屬性。屬性。再單擊再單擊“靜態(tài)文本靜態(tài)文本”按鈕,在按鈕,在“學(xué)生信息學(xué)生信息”組合框中的左上角按組合框中的左上角按下鼠標(biāo)左鍵并拖動鼠標(biāo)畫靜態(tài)文本框,然后在靜態(tài)文本框上單擊下鼠標(biāo)左鍵并拖動鼠標(biāo)畫靜態(tài)文本框,然后在靜態(tài)文本框上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇鼠標(biāo)右鍵,在彈出的快捷菜單中選擇PropertiesProperties菜單項,然后在菜單項

33、,然后在彈出的彈出的PropertiesProperties對話框中的對話框中的CaptionCaption屬性編輯框中輸入屬性編輯框中輸入“學(xué)學(xué)號號”。再單擊再單擊“編輯框編輯框”按鈕,在按鈕,在“學(xué)生信息學(xué)生信息”組合框中的右上角按組合框中的右上角按下鼠標(biāo)左鍵并拖動鼠標(biāo)畫出一個編輯框,然后在編輯框上單擊下鼠標(biāo)左鍵并拖動鼠標(biāo)畫出一個編輯框,然后在編輯框上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇鼠標(biāo)右鍵,在彈出的快捷菜單中選擇PropertiesProperties菜單項,然后菜單項,然后在彈出的在彈出的Edit PropertiesEdit Properties對話框中設(shè)置編輯框的屬性,如下圖對

34、話框中設(shè)置編輯框的屬性,如下圖所示。所示。同樣在已建立的各個控件上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇同樣在已建立的各個控件上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇PropertiesProperties選項,按照從上到下的順序設(shè)置各編輯框?qū)ο蟮膶傩赃x項,按照從上到下的順序設(shè)置各編輯框?qū)ο蟮膶傩匀缦卤硭?。最后兩列是控件連接的變量。如下表所示。最后兩列是控件連接的變量。 例例題題中的編輯框及組合框?qū)ο蟮淖兞考捌漕愋椭械木庉嬁蚣敖M合框?qū)ο蟮淖兞考捌漕愋?對象對象 IDID CaptionCaption 變量變量 類型類型 編輯框編輯框 IDC_EDIT_STUCODEIDC_EDIT_STUCODE m_

35、csCodem_csCode CStringCString 編輯框編輯框 IDC_EDIT_NAMEIDC_EDIT_NAME m_csNamem_csName CStringCString 編輯框編輯框 IDC_EDIT_SEXIDC_EDIT_SEX m_csSexm_csSex CStringCString 編輯框編輯框 IDC_EDIT_AGEIDC_EDIT_AGE m_csAgem_csAge CStringCString 編輯框編輯框 IDC_EDIT_DEPTIDC_EDIT_DEPT m_csDeptm_csDept CStringCString 組合框組合框 IDC_STA

36、TICIDC_STATIC 學(xué)生信息學(xué)生信息 編輯框編輯框 IDCIDC_EDIT_SEARCHCODE_EDIT_SEARCHCODE m_csSearchCodem_csSearchCode CStringCString 編輯框編輯框 IDC_EDIT_SEARCHNAMEIDC_EDIT_SEARCHNAME m_csSearchNamem_csSearchName CStringCString 編輯框編輯框 IDC_EDIT_SEARCHDEPTIDC_EDIT_SEARCHDEPT m_csSearchDeptm_csSearchDept CStringCString 組合框組合框

37、IDC_STATICIDC_STATIC 檢索檢索 依照例題要求建立按鈕控件,首先刪除對話框中的依照例題要求建立按鈕控件,首先刪除對話框中的CancelCancel按鈕按鈕和和OKOK按鈕。在控件工具欄中單擊按鈕。在控件工具欄中單擊“按鈕按鈕”按鈕,在窗口的右下按鈕,在窗口的右下角按下鼠標(biāo)左鍵并拖動鼠標(biāo)畫出一個按鈕,在按鈕上單擊鼠標(biāo)角按下鼠標(biāo)左鍵并拖動鼠標(biāo)畫出一個按鈕,在按鈕上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇右鍵,在彈出的菜單中選擇PropertiesProperties菜單項,此時彈出了一菜單項,此時彈出了一個個Push Button PropertiesPush Button Proper

38、ties對話框,輸入對話框,輸入IDID和和CaptionCaption屬性。依屬性。依次可以繪制其它的下壓式按鈕。其屬性如下表所示。次可以繪制其它的下壓式按鈕。其屬性如下表所示。例例題題中中的的按按鈕鈕對對象象的的屬屬性性值值 對對象象 I ID D C Ca ap pt ti io on n 下下壓壓式式按按鈕鈕 I ID DC C_ _B BT TN N_ _I IN NP PU UT T 輸輸入入信信息息 下下壓壓式式按按鈕鈕 I ID DC C_ _B BT TN N_ _S SE EA AR RC CH H 檢檢索索 下下壓壓式式按按鈕鈕 I ID DC C_ _B BT TN N

39、_ _C CO ON NT TI IN NU UE E 下下一一條條信信息息 下下壓壓式式按按鈕鈕 I ID DO OK K 退退出出 添加變量界面添加變量界面在文件在文件11-8Dlg.h11-8Dlg.h中的對話框類中的對話框類CMy11-8DlgCMy11-8Dlg定義前,加定義前,加入記錄學(xué)生信息的結(jié)構(gòu)體定義:入記錄學(xué)生信息的結(jié)構(gòu)體定義:struct studentstruct student CString csCode;CString csCode;/學(xué)號學(xué)號CString csName;CString csName;/姓名姓名CString csSex;CString csSex

40、;/性別性別CString csAge;CString csAge;/年齡年齡CString csDept;CString csDept;/系別系別;在窗口中打開在窗口中打開ClassViewClassView窗口,在窗口,在對話框類對話框類CMy11-8DlgCMy11-8Dlg上單擊鼠標(biāo)右上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇鍵,在彈出的菜單中選擇Add Add Member VariablesMember Variables選項選項( (如右圖如右圖) ),在彈出的在彈出的Add Mmember VariablesAdd Mmember Variables對話框中的對話框中的variable

41、variable編輯框中輸入編輯框中輸入studentstudent,在,在variable namevariable name編輯框編輯框中輸入中輸入structStudent10structStudent10,這樣,這樣就定義了一個能記錄就定義了一個能記錄1010個學(xué)生信息個學(xué)生信息的結(jié)構(gòu)數(shù)組。然后采用此種辦法加的結(jié)構(gòu)數(shù)組。然后采用此種辦法加入變量:入變量:int nStudentNumint nStudentNum,int int nAccordNumnAccordNum,int int nAccordItem10nAccordItem10。分別用來記錄。分別用來記錄以輸入學(xué)生的數(shù)目,檢

42、索時符合條以輸入學(xué)生的數(shù)目,檢索時符合條件的學(xué)生的數(shù)目,符合檢索條件的件的學(xué)生的數(shù)目,符合檢索條件的學(xué)生在學(xué)生在structstudent10structstudent10中的位中的位置。置。void CMy11_8Dlg:OnBtnInput() void CMy11_8Dlg:OnBtnInput() UpdateData(TRUE);UpdateData(TRUE);/從窗口編輯框中讀入數(shù)據(jù)從窗口編輯框中讀入數(shù)據(jù)structStudentnStudentNum.csCode = m_csCode;structStudentnStudentNum.csCode = m_csCode;/賦值

43、給學(xué)生結(jié)構(gòu)體賦值給學(xué)生結(jié)構(gòu)體structStudentnStudentNum.csName = m_csName;structStudentnStudentNum.csName = m_csName;structStudentnStudentNum.csSex = m_csSex;structStudentnStudentNum.csSex = m_csSex;structStudentnStudentNum.csAge = m_csAge;structStudentnStudentNum.csAge = m_csAge;structStudentnStudentNum.csDept = m_

44、csDept;structStudentnStudentNum.csDept = m_csDept;nStudentNum+;nStudentNum+; 定義函數(shù)定義函數(shù)UpdateData(TRUE)UpdateData(TRUE)將窗口中編輯框中信息存儲到與將窗口中編輯框中信息存儲到與編輯框連接的編輯框連接的CStringCString型變量中去。然后將這些型變量中去。然后將這些CStringCString型變量保型變量保存到存到structStudentstructStudent數(shù)組中。然后變量數(shù)組中。然后變量nStudentNumnStudentNum自增。自增。void CMy11_

45、8Dlg:OnBtnSearch() void CMy11_8Dlg:OnBtnSearch() BOOL bAccordCode = FALSE; /BOOL bAccordCode = FALSE; /設(shè)置學(xué)號是否符合的變量設(shè)置學(xué)號是否符合的變量BOOL bAccordName = FALSE; /BOOL bAccordName = FALSE; /設(shè)置姓名是否符合的變量設(shè)置姓名是否符合的變量BOOL bAccordDept = FALSE; /BOOL bAccordDept = FALSE; /設(shè)置所在系名稱是否符合的變量設(shè)置所在系名稱是否符合的變量CString csBuffer;

46、CString csBuffer;nAccordNum = 0;nAccordNum = 0;/符合符合SearchSearch條件的記錄個數(shù)條件的記錄個數(shù)UpdateData(TRUE);UpdateData(TRUE);for(int i=0;inStudentNum;i+) /for(int i=0;i0)if(nAccordNum0)m_csCode = structStudentnAccordItem0.csCode;m_csCode = structStudentnAccordItem0.csCode; m_csName = structStudentnAccordItem0.cs

47、Name; m_csName = structStudentnAccordItem0.csName; m_csSex = structStudentnAccordItem0.csSex; m_csSex = structStudentnAccordItem0.csSex; m_csAge = structStudentnAccordItem0.csAge; m_csAge = structStudentnAccordItem0.csAge; m_csDept = structStudentnAccordItem0.csDept; m_csDept = structStudentnAccordI

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

49、示下一個學(xué)生信息。void CMy11_8Dlg:OnBtnContinue() void CMy11_8Dlg:OnBtnContinue() static int nCurAccordNum=2;static int nCurAccordNum=2; /定義已顯示過記錄的數(shù)量的變量定義已顯示過記錄的數(shù)量的變量 /當(dāng)總記錄數(shù)大于當(dāng)總記錄數(shù)大于2 2并且已顯示過的記錄數(shù)小于總記錄數(shù)時并且已顯示過的記錄數(shù)小于總記錄數(shù)時if(nAccordNum = 2 & nCurAccordNum= 2 & nCurAccordNumEnableWindow(0); GetDlgItem(IDC_BTN_CO

50、NTINUE)-EnableWindow(0); /Continue/Continue按鈕無按鈕無效效nCurAccordNum = 1;nCurAccordNum = 1;/恢復(fù)原值恢復(fù)原值 【例例】創(chuàng)建一程序,包含四個創(chuàng)建一程序,包含四個編輯框,一個單行編輯框,一編輯框,一個單行編輯框,一個多行編輯框和兩個只讀編輯個多行編輯框和兩個只讀編輯框。多行編輯框擁有垂直滾動框。多行編輯框擁有垂直滾動條,能自動滾動。兩個只讀編條,能自動滾動。兩個只讀編輯框能動態(tài)顯示多行編輯框中輯框能動態(tài)顯示多行編輯框中當(dāng)前文本的字符數(shù)、行數(shù)。另當(dāng)前文本的字符數(shù)、行數(shù)。另外有外有“剪切剪切”、“復(fù)制復(fù)制”、“粘貼粘貼

51、”、“撤銷撤銷”、和、和“退出退出”按鈕。分別完成對單行或多按鈕。分別完成對單行或多行編輯框中選中文本的行編輯框中選中文本的“剪切剪切”、“復(fù)制復(fù)制”,“粘貼粘貼”、“撤銷撤銷”和整個程序的和整個程序的“退出退出”操作。界面如圖所示。操作。界面如圖所示。 滾動條是一個交互式的、高度可視化的控件,它包括一滾動條是一個交互式的、高度可視化的控件,它包括一個滑塊、滾動條的兩端的按鈕等。個滑塊、滾動條的兩端的按鈕等。滾動條控件與屬于窗口的滾動條是不一樣的滾動條控件與屬于窗口的滾動條是不一樣的處于窗口的滾處于窗口的滾動條是由該窗動條是由該窗口創(chuàng)建、管理口創(chuàng)建、管理和釋放的和釋放的滾動條控件是滾動條控件是

52、由用戶創(chuàng)建、由用戶創(chuàng)建、管理和釋放的管理和釋放的13.1 滾動條類簡介滾動條類簡介作為任何一個窗口的子控件,滾動條可以通過通知代碼來創(chuàng)作為任何一個窗口的子控件,滾動條可以通過通知代碼來創(chuàng)建,但也可以用對話框資源模板來創(chuàng)建。建,但也可以用對話框資源模板來創(chuàng)建。表 13-1 CScrollBar 類的方法方法說明EnableScrollBar()使?jié)L動條的一個或兩個箭頭有效或無效GetScrollInfo()獲得滾動條的消息GetScrollLimit()獲得滾動條的范圍GetScrollPos()獲得滾動條當(dāng)前的位置GetScrollRange()獲得制定滾動條的當(dāng)前最大和最小滾動位置SetSc

53、rollInfo()設(shè)置滾動條的消息SetScrollPos()設(shè)置滾動塊當(dāng)前的位置SetScrollRange()設(shè)置制定滾動條的最大和最小滾動位置ShowScrollBar()顯示或隱藏滾動條創(chuàng)建與初始化滾動條類創(chuàng)建與初始化滾動條類創(chuàng)建創(chuàng)建CScrollBar對象的一般步驟對象的一般步驟(1) 用用C+關(guān)鍵字關(guān)鍵字new和構(gòu)造函數(shù)和構(gòu)造函數(shù)CScrollBar:CScrollBar()為一個為一個ScrollBar對象分配一個實例對象分配一個實例(2) 初始化初始化CScrollBar對象,將一對象,將一個個Windows滾動條賦予它,并用滾動條賦予它,并用CScroll:Create()

54、方法設(shè)置參數(shù)和方法設(shè)置參數(shù)和樣式樣式分配一個滾動條控件對象并返回指向該對象的指針分配一個滾動條控件對象并返回指向該對象的指針CScrollBar:pMyScroll=new CScrollBarCScrollBar:pMyScroll=new CScrollBar調(diào)用調(diào)用CScrollBar:Create()方法初始化指針方法初始化指針BOOL Create(BOOL Create(DWORD dwStyleDWORD dwStyle, ,const RECT& rectconst RECT& rect, ,CWnd CWnd * *pParentWndpParentWnd, ,UINT nI

55、DUINT nID););滾動條窗滾動條窗口的樣式口的樣式表示控件的表示控件的大小和位置大小和位置指向控件所屬指向控件所屬窗口的指針窗口的指針父窗口與滾動父窗口與滾動條通信的標(biāo)識條通信的標(biāo)識在設(shè)置滾動條控件時,要通過在設(shè)置滾動條控件時,要通過CScrollBar:SetScrollRange()設(shè)置其范圍。設(shè)置其范圍。例如,設(shè)置滾動范圍為例如,設(shè)置滾動范圍為-100到到100的垂直滾動條:的垂直滾動條:pMyScroll-SetScrollRange(SB_VERT,-100,100);pMyScroll-SetScrollRange(SB_VERT,-100,100);在設(shè)置了范圍后,還要通

56、過在設(shè)置了范圍后,還要通過SetScrollPos()設(shè)置滾動塊當(dāng)前位置。設(shè)置滾動塊當(dāng)前位置。例如,滾動塊的位置在例如,滾動塊的位置在-100到到100的中間,即為的中間,即為0的位置:的位置:pMyScroller-SetScrollPos(0);pMyScroller-SetScrollPos(0);標(biāo)題為標(biāo)題為Application of ScrollBar滾動條的滾滾動條的滾動范圍設(shè)為動范圍設(shè)為0到到20單擊滾動塊與單擊滾動塊與箭頭之間的區(qū)箭頭之間的區(qū)域。滾動塊上域。滾動塊上移或下移三格,移或下移三格,編輯框中的數(shù)編輯框中的數(shù)字加字加3 或減或減3單擊向上或向下的單擊向上或向下的箭頭,

57、滾動塊向上箭頭,滾動塊向上或向下移動一格,或向下移動一格,編輯框中的數(shù)字加編輯框中的數(shù)字加1或減或減1按住滾動塊上按住滾動塊上下拖動,編輯下拖動,編輯框中的數(shù)字隨框中的數(shù)字隨之變化之變化當(dāng)前值為當(dāng)前值為10單擊單擊Up按鈕,按鈕,滾動塊移到最滾動塊移到最上邊,編輯框上邊,編輯框的數(shù)字變?yōu)榈臄?shù)字變?yōu)?單擊單擊Down按鈕按鈕,滾動塊移到最滾動塊移到最下邊,編輯框的下邊,編輯框的數(shù)字變?yōu)閿?shù)字變?yōu)?0單擊單擊Reset 按按鈕,滾動塊移鈕,滾動塊移到中間,編輯到中間,編輯框的數(shù)字變?yōu)榭虻臄?shù)字變?yōu)?0單擊單擊Exit 按鈕,退按鈕,退出應(yīng)用程出應(yīng)用程序序13.2 滾動條類編程實例滾動條類編程實例1.

58、應(yīng)用程序的可視化編程部分應(yīng)用程序的可視化編程部分 對對話話框框中中各各個個對對象象的的屬屬性性 對對象象 ID Caption 滾滾動動條條 IDC_XCROLLBAR 無無 編編輯輯框框 IDC_EDIT1 無無 Up 按按鈕鈕 IDC_UP_BUTTON &Up Down 按按鈕鈕 IDC_DOWN_BUTTON &Down Reset 命命令令按按鈕鈕 IDC_RESET_BUTTON &Reset Exit 按按鈕鈕 IDC_EXIT_BUTTON &Exit 2. 應(yīng)用程序的代碼編程部分應(yīng)用程序的代碼編程部分(1 )給滾動條連接變量)給滾動條連接變量ID變量名變量名類別類別 類型類型

59、IDC_SCROLLBAR m_ScrollbarControlCscrollbarIDC_EDITlm_EditControlCEditBOOL CSCROLLBARDlg:OnInitDialog()BOOL CSCROLLBARDlg:OnInitDialog() CDialog:OnInitDialog(); CDialog:OnInitDialog(); / /將將“About.About.”菜單項加入到系統(tǒng)菜單中。菜單項加入到系統(tǒng)菜單中。 /IDM_ABOUTBOX/IDM_ABOUTBOX必須在系統(tǒng)命令范圍內(nèi)。必須在系統(tǒng)命令范圍內(nèi)。 ASSERT(IDM_ABOUTBOX & 0

60、 xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX & 0 xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX 0 xF000); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); pSysMenu-AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); (

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論