资源预览内容
第1页 / 共43页
第2页 / 共43页
第3页 / 共43页
第4页 / 共43页
第5页 / 共43页
第6页 / 共43页
第7页 / 共43页
第8页 / 共43页
第9页 / 共43页
第10页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
vc3编辑框类与其应用第十一章编辑框类及其应用2024/9/182vc3编辑框类与其应用内容提要w w编辑框类的结构及其方法w w编辑框类控件的应用2024/9/183vc3编辑框类与其应用11.1.11.1.编辑框类的结构及其方法2024/9/184vc3编辑框类与其应用1.CEdit类FF编辑框控件主要功能输入或编辑文本FF编辑框控件单行编辑框控件多行编辑框控件FFCeditCedit类是CwndCwnd类直接派生的。2024/9/185vc3编辑框类与其应用1.CEdit类FF在MFCIncludeMFCIncludeAfxwin.h中定义了CeditCedit类FF当创建CEditCEdit对象时,MFCMFC自动赋予该对象一个标准的WindowsWindows编辑控件,它定义了CEditCEdit对象。2024/9/186vc3编辑框类与其应用class CEdit : public CWnd DECLARE_DYNAMIC(CEdit)public: CEdit(); /此为构造函数定义,以下定义成员函数 BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID); 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; HLOCAL GetHandle() const; void SetHandle(HLOCAL hBuffer);CEidt类的定义vc3编辑框类与其应用#if (WINVER = 0x400) 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 int GetLine(int nIndex, LPTSTR lpszBuffer) const; int GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const;/ 操作 void EmptyUndoBuffer(); BOOL FmtLines(BOOL bAddEOL);lpszBuffer的第一个字必须 是 buffer的大小!2024/9/188vc3编辑框类与其应用void LimitText(int nChars = 0);int LineFromChar(int nIndex = -1) const;int LineIndex(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 bNoScroll = 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 intvc3编辑框类与其应用/ 剪贴板操作 BOOL Undo(); void Clear(); void Copy(); void Cut(); void Paste(); BOOL SetReadOnly(BOOL bReadOnly = TRUE); int GetFirstVisibleLine() const; TCHAR GetPasswordChar() const;/ Implementationpublic: virtual CEdit(); /虚拟析构函数;vc3编辑框类与其应用vc3编辑框类与其应用vc3编辑框类与其应用11.2.11.2.编辑框控件的应用2024/9/1813vc3编辑框类与其应用例11-1设计并实现带有两个编辑框的应用程序,其窗口布局如 图11-1,功能如下:F单击ShowlEdit1编辑框中显示“This is the first EditBox.”F单击Clear1Edit1编辑框中的内容被清除;F单击Show2Edit2编辑框中显示“This is the second EditBox!”F单击Clear2Edit2编辑框中的内容被清除;F单击TransferEdit1编辑框的内容复制到Edit2的编辑框中去F单击Undo取消上一次操作F单击Exit退出程序的运行2024/9/1814vc3编辑框类与其应用图11-1 应用程序的窗口布局vc3编辑框类与其应用1.编程过程FF建立工程文件:用MFC AppWizard(exe)工程项目名称:工程项目名称:EditBoxEditBox建立基于对话框的应用程序,选择建立基于对话框的应用程序,选择Dialog basedDialog based,生,生成对话框窗口作为主窗口。成对话框窗口作为主窗口。FF可视化编程:设计界面设计界面连接变量连接变量修改特性修改特性添加代码添加代码2024/9/1816vc3编辑框类与其应用2.设计界面F在EditBoxEditBox的工作区中选择Resource ViewResource ViewF在名为IDD_EDITBOX_DIALOGIDD_EDITBOX_DIALOG的对话框作为应用程序的主窗口中进行界面设计生成了工程文件和工程工作区文件后在EditBoxEditBox的工作区中选择ResourceViewResourceViewvc3编辑框类与其应用2.设计界面(续)控件工具窗提供了VCVC中所有可建立的控件类型把鼠标停在编辑框控件上,即可显示该控件的类型。直接在可视化编辑的IDD_EDITBOX_DIALOGIDD_EDITBOX_DIALOG对话框, , 利用控件工具窗实现可视化操作2024/9/1818vc3编辑框类与其应用编辑框控件布置对话框中如编辑框。F将鼠标移到Edit1Edit1编辑框上;F单击鼠标右键,并在快捷菜单中选择PropertiesProperties命令;F在窗口中输入控件的IDID标识值IDC_EDIT1IDC_EDIT1;F用同样的方法设置其它各个对象的属性。vc3编辑框类与其应用3.给界面对象连接变量F在编辑框EDIT1中,单击鼠标右键,在弹出的快捷菜单中,选择ClassWizard;F选择Member Variables;F单击IDC_EDIT1;(a)选择Member Variables选项卡(b)单击Control Ids列表框中IDC_EDIT1项,使之高亮化(c) 单击Add Variable按钮,显示AddMemberVariable窗口vc3编辑框类与其应用F单击Add Variable按钮,显示AddMemberVariable窗口;F成员变量名设置为m_Edit1;F类别设置为Control;F变量类型设置为CEdit。注意:只有将m_Edit1设为CEdit 类型,才能调用该类的Copy () , Paste () 等成员函数,实现本应用程序的操作。(d)置Member Variables name为m_Edit1(f)置 Variable type为CEdit1(e)置Categroy 为Controlvc3编辑框类与其应用F用同样的方法给编辑框EDIT2等其它对象连接各自的变量;F最终,ClassWizard窗口将变为下图所示。vc3编辑框类与其应用水平及垂直滚动条4 .修改编辑框的特性F在编辑框EDIT1EDIT1中,单击鼠标右键;F在快捷菜单中,选PropertiesProperties命令;F选Styles选项卡,进行设置,修改其的特性。F用同样方法修改EDIT2EDIT2的特性。多行编辑允许回车键,可实现多行文本输入vc3编辑框类与其应用5 . 给界面对象连接函数添加代码F在按钮Showl上,单击鼠标右键,在弹出的快捷菜单中,选择ClassWizard;F选择Message Map;F单击IDC_SHOW1_BUTTON;F单击BN_CLICKED(a)选择Member Map选项卡(b)单击Object Ids列表框中IDC_SHOW1_BUTTON项,(d) 单击Add Function按钮,显示AddMemberFunction窗口(c)单击Message列表框中BN_CLICKED项,vc3编辑框类与其应用F单击Add Function按钮,弹出Add Member Function窗口F接受Add Member FunctionAdd Member Function建议的函数名F增加了成员函数OnShow1Button()OnShow1Button();F单击Edit Code按钮, 显示代码文件,进行添加代码。(e)接受Add Member Add Member FunctionFunction建议的函数名OnShow1Button()OnShow1Button()(b) 增加了成员函数OnShow1Button()(d) 单击Edit Code, 显示代码文件,添加代码vc3编辑框类与其应用void CEditBoxDlg:OnShow1Button()m_Edit1.SetSel(0,-1); /选中编辑框IDC_EDIT1中的全部内容m_Edit1.ReplaceSel(This is the first EditBox.);/替换内容请注意:程序中SetSel()和 ReplaceSel()都是CEdit类中的成员函数,m_Edit1是属于CEdit类的对象,可以调用之。(1) (1) 给ShowlShowl按钮连接代码(2) (2) 给Clear1Clear1按钮连接代码void CEditBoxDlg:OnClear1Button() m_Edit1.SetSel(0,-1);/选中编辑框IDC_EDIT1中的全部内容m_Edit1.ReplaceSel();/用空字符串代替所选文本,即删除之vc3编辑框类与其应用(3)(3)给Show2Show2和Clear2Clear2按钮连接代码void CEditBoxDlg:OnShow2Button() m_Edit2.SetSel(0,-1);/选中编辑框IDC_EDIT2中的全部内容。m_Edit2.ReplaceSel(This is the second EditBox.); /替换内容void CEditBoxDlg:OnClear2Button() m_Edit2.SetSel(0,-1);/选中编辑框IDC_EDIT2中的全部内容。 m_Edit2.ReplaceSel();/用空字符串代替所选文本,即删除之vc3编辑框类与其应用(4)(4)给按钮IDC_Transfer_BUTTONIDC_Transfer_BUTTON连接代码void CEditBoxDlg:OnCopyButton() m_Edit1.SetSel(0,-1);m_Edit1.Copy();/将m_Editl编辑框中所选的内容拷贝到剪贴板上m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel();m_Edit2.Paste();/将剪贴板中的内容粘贴到m_Edit2编辑框中vc3编辑框类与其应用(5) (5) 给 UndoUndo按钮连接代码void CEditBoxDlg:OnUndoButton() m_Edit1.Undo();/ 取消编辑框中上一次操作m_Edit2.Undo();(6) (6) 给ExitExit按钮连接代码void CEditBoxDlg:OnExitButton() OnOK();请注意:本应用程序的可视化编程到此已完成,编译连接后此应用程序便可执行。vc3编辑框类与其应用应用举例之二【11-811-8】编写一个程序,能够输入学生的信息,包括:“学号”、“姓名”、“性别”、“年龄”和所在的系,并能根据学生的“学号”、“姓名”和系别来进行检索。当检索到的信息超过一个时,能够依次显示。2024/9/1830vc3编辑框类与其应用F界面由”组合框、静态文本框和编辑框等组成2024/9/1831vc3编辑框类与其应用F单击工具窗“组合框”按钮后,在对话框的左上角按下鼠标左键并拖动鼠标画出一个大小合适的组合框,F在组合框上单击鼠标右键,在弹出的快捷菜单中选择PropertiesProperties菜单项,然后在弹出的Group box propertiesGroup box properties对话框中的输入IDID值和CaptionCaption属性2024/9/1832vc3编辑框类与其应用F单击“静态文本”按钮,在“学生信息”组合框左上角画静态文本框;F静态文本框上单击右键,选择PropertiesProperties菜单项;F选CaptionCaption属性编辑框,输入“学号”。F单击“编辑框”按钮,在“学生信息”组合框的右上角画编辑框;F编辑框上单击右键,选择PropertiesProperties菜单项;F在弹出的Edit propertiesEdit properties对话框中设置编辑框的属性。2024/9/1833vc3编辑框类与其应用F同样,在已建立的各个控件上单击鼠标右键,选择PropertiresPropertires选项,按照从上到下的顺序设置各编辑框对象的属性,如表11-1111-11所示。最后两列是控件连接的变量。2024/9/1834vc3编辑框类与其应用F删除对话框中的CancelCancel按钮和OKOK按钮。F单击工具栏 “按钮”按钮,在窗口的右下角画出一个按钮,F在按钮上单击右键,在弹出的菜单中选择PropertiesProperties项,F弹出了一个Push Button PropertiesPush Button Properties对话框,输入IDID和CaptionCaption属性F依次可以绘制其他的下压式按钮。属性如表11-1211-12所示2024/9/1835vc3编辑框类与其应用添加变量界面2024/9/1836vc3编辑框类与其应用在文件11-8Dlg.h11-8Dlg.h中的对话框类CMy11-8DlgCMy11-8Dlg定义前,加入记录学生信息的结构体定义:struct studentstruct student CString csCode;CString csCode;/学号CString csName;CString csName;/姓名CString csSex;CString csSex;/性别CString csAge;CString csAge;/年龄CString csDept;CString csDept;/系别;2024/9/1837vc3编辑框类与其应用在窗口中打开ClassViewClassView窗口,在对话框类CMy11-8DlgCMy11-8Dlg上单击鼠标右键,在弹出的菜单中选择Add Member Add Member VariablesVariables选项( (如右图) ),在弹出的Add Mmember VariablesAdd Mmember Variables对话框中的variablevariable编辑框中输入studentstudent,在variable namevariable name编辑框中输入structStudent10structStudent10,这样就定义了一个能记录1010个学生信息的结构数组。然后采用此种办法加入变量:int int nStudentNumnStudentNum,int nAccordNumint nAccordNum,int int nAccordItem10nAccordItem10。分别用来记录以输入学生的数目,检索时符合条件的学生的数目,符合检索条件的学生在structstudent10structstudent10中的位置。2024/9/1838vc3编辑框类与其应用void CMy11_8Dlg:OnBtnInput() void CMy11_8Dlg:OnBtnInput() UpdateData(TRUE);UpdateData(TRUE);/从窗口编辑框中读入数据structStudentnStudentNum.csCode = m_csCode;structStudentnStudentNum.csCode = m_csCode;/赋值给学生结构体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_csDept;structStudentnStudentNum.csDept = m_csDept;nStudentNum+;nStudentNum+; 定义函数UpdateData(TRUE)UpdateData(TRUE)将窗口中编辑框中信息存储到与编辑框连接的CStringCString型变量中去。然后将这些CStringCString型变量保存到structStudentstructStudent数组中。然后变量nStudentNumnStudentNum自增。2024/9/1839vc3编辑框类与其应用void CMy11_8Dlg:OnBtnSearch() void CMy11_8Dlg:OnBtnSearch() BOOL bAccordCode = FALSE; /BOOL bAccordCode = FALSE; /设置学号是否符合的变量BOOL bAccordName = FALSE; /BOOL bAccordName = FALSE; /设置姓名是否符合的变量BOOL bAccordDept = FALSE; /BOOL bAccordDept = FALSE; /设置所在系名称是否符合的变量CString csBuffer;CString csBuffer;nAccordNum = 0;nAccordNum = 0;/符合SearchSearch条件的记录个数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.csName; 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 = structStudentnAccordItem0.csDept; UpdateData(FALSE); UpdateData(FALSE); /当记录数大于1 1时,Continue,Continue按钮有效. .if(nAccordNum1)if(nAccordNum1) GetDlgItem(IDC_BTN_CONTINUE)-EnableWindow(1); GetDlgItem(IDC_BTN_CONTINUE)-EnableWindow(1); 2024/9/1841vc3编辑框类与其应用 当符合检索条件的学生数大于1 1时,“下一条信息”按钮有效。单击此按钮,用于显示下一个学生信息。void CMy11_8Dlg:OnBtnContinue() void CMy11_8Dlg:OnBtnContinue() static int nCurAccordNum=2;static int nCurAccordNum=2; /定义已显示过记录的数量的变量 /当总记录数大于2 2并且已显示过的记录数小于总记录数时. .if(nAccordNum = 2 & nCurAccordNum= 2 & nCurAccordNumEnableWindow(0); GetDlgItem(IDC_BTN_CONTINUE)-EnableWindow(0); /Continue/Continue按钮无效nCurAccordNum = 1;nCurAccordNum = 1;/恢复原值 2024/9/1842vc3编辑框类与其应用( (第十一章) )完2024/9/1843vc3编辑框类与其应用
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号