《Windows C 程序设计11.ppt》由会员分享,可在线阅读,更多相关《Windows C 程序设计11.ppt(44页珍藏版)》请在金锄头文库上搜索。
1、2019/5/23,1,面向对象与可视化 程序设计 -Visual C+ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年10月,2019/5/23,2,第十一章 编辑框类及其应用,2019/5/23,3,内容提要,编辑框类的结构及其方法 编辑框类控件的应用,2019/5/23,4,11.1. 编辑框类的结构 及其方法,2019/5/23,5,1.CEdit类,编辑框控件主要功能输入或编辑文本 编辑框控件 单行编辑框控件 多行编辑框控件 Cedit类是Cwnd类直接派生的。,2019/5/23,6,1.CEdit类,在MFC
2、IncludeAfxwin.h中定义了Cedit类 当创建CEdit对象时,MFC自动赋予该对象一个标准的Windows编辑控件,它定义了CEdit对象。,class CEdit : public CWnd DECLARE_DYNAMIC(CEdit) public: CEdit(); /此为构造函数定义,以下定义成员函数 BOOL Create(DWORD dwStyle, const RECT,CEidt类的定义,2019/5/23,8,#if (WINVER = 0x400) void SetMargins(UINT nLeft, UINT nRight); DWORD GetMargi
3、ns() 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 Fm
4、tLines(BOOL bAddEOL);,lpszBuffer的第一个字必须 是 buffer的大小!,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 = F
5、ALSE); 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
6、SetTabStops(const int / takes an int,/ 剪贴板操作 BOOL Undo(); void Clear(); void Copy(); void Cut(); void Paste(); BOOL SetReadOnly(BOOL bReadOnly = TRUE); int GetFirstVisibleLine() const; TCHAR GetPasswordChar() const; / Implementation public: virtual CEdit(); /虚拟析构函数 ;,2019/5/23,13,11.2. 编辑框控件的应用,2019
7、/5/23,14,例11-1设计并实现带有两个编辑框的应用程序,其窗口布局如 图11-1,功能如下: 单击ShowlEdit1编辑框中显示“This is the first EditBox.” 单击Clear1Edit1编辑框中的内容被清除; 单击Show2Edit2编辑框中显示“This is the second EditBox!” 单击Clear2Edit2编辑框中的内容被清除; 单击TransferEdit1编辑框的内容复制到Edit2的编辑框中去 单击Undo取消上一次操作 单击Exit退出程序的运行,图11-1 应用程序的窗口布局,2019/5/23,16,1.编程过程,建立工程
8、文件:用MFC AppWizard(exe) 工程项目名称:EditBox 建立基于对话框的应用程序,选择Dialog based,生成对话框窗口作为主窗口。 可视化编程: 设计界面 连接变量 修改特性 添加代码,2.设计界面,在EditBox的工作区中选择Resource View 在名为IDD_EDITBOX_DIALOG的对话框作为应用程序的主窗口中进行界面设计,生成了工程文件和 工程工作区文件后 在EditBox的工作区 中选择ResourceView,2019/5/23,18,2.设计界面(续),控件工具窗 提供了VC中 所有可建立 的控件类型,把鼠标停在 编辑框控件 上,即可显 示
9、该控件的 类型。,直接在可视化编辑的 IDD_EDITBOX_DIALOG 对话框, 利用控件工 具窗实现可视化操作,编辑框控件布置对话框中如编辑框。,将鼠标移到Edit1编辑框上; 单击鼠标右键,并在快捷菜单中选择Properties命令; 在窗口中输入控件的ID标识值IDC_EDIT1; 用同样的方法设置其它各个对象的属性。,3.给界面对象连接变量,在编辑框EDIT1中,单击鼠标右键,在弹出的快捷菜单中,选择ClassWizard; 选择Member Variables; 单击IDC_EDIT1;,(a)选择Member Variables选项卡,(b)单击Control Ids列表 框中
10、IDC_EDIT1项, 使之高亮化,(c) 单击Add Variable 按钮,显示Add MemberVariable窗口,单击Add Variable按钮,显示AddMemberVariable窗口; 成员变量名设置为m_Edit1; 类别设置为Control; 变量类型设置为CEdit。,注意:只有将m_Edit1设为CEdit 类型,才能调用该类的Copy () , Paste () 等成员函数,实现本应用程序的操作。,(d)置Member Variables name 为m_Edit1,(f)置 Variable type为CEdit1,(e)置Categroy 为Control,用
11、同样的方法给编辑框EDIT2等其它对象连接各自的变量; 最终,ClassWizard窗口将变为下图所示。,水平及垂 直滚动条,4 .修改编辑框的特性,在编辑框EDIT1中,单击鼠标右键; 在快捷菜单中,选Properties命令; 选Styles选项卡,进行设置,修改其的特性。 用同样方法修改EDIT2的特性。,多行 编辑,允许回车键,可实现多行文本输入,5 . 给界面对象连接函数添加代码,在按钮Showl上,单击鼠标右键,在弹出的快捷菜单中,选择ClassWizard; 选择Message Map; 单击IDC_SHOW1_BUTTON; 单击BN_CLICKED,(a)选择Member M
12、ap选项卡,(b)单击Object Ids列表框中 IDC_SHOW1_BUTTON项,,(d) 单击Add Function 按钮,显示Add MemberFunction窗口,(c)单击Message列表框 中BN_CLICKED项,,单击Add Function按钮,弹出Add Member Function窗口 接受Add Member Function建议的函数名 增加了成员函数OnShow1Button(); 单击Edit Code按钮, 显示代码文件,进行添加代码。,(e)接受Add Member Function建议的函数 名OnShow1Button(),(b) 增加了成员函
13、数 OnShow1Button(),(d) 单击Edit Code, 显示代码文件, 添加代码,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) 给Showl按钮连接代码,(2) 给Clear1按钮连接代码,void CEditBoxD
14、lg:OnClear1Button() m_Edit1.SetSel(0,-1);/选中编辑框IDC_EDIT1中的全部内容 m_Edit1.ReplaceSel(“);/用空字符串代替所选文本,即删除之 ,(3)给Show2和Clear2按钮连接代码,void CEditBoxDlg:OnShow2Button() m_Edit2.SetSel(0,-1);/选中编辑框IDC_EDIT2中的全部内容。 m_Edit2.ReplaceSel(“This is the second EditBox.“); /替换内容 void CEditBoxDlg:OnClear2Button() m_Edi
15、t2.SetSel(0,-1);/选中编辑框IDC_EDIT2中的全部内容。 m_Edit2.ReplaceSel(“);/用空字符串代替所选文本,即删除之 ,(4)给按钮IDC_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编辑框中 ,(5) 给 Und
16、o按钮连接代码,void CEditBoxDlg:OnUndoButton() m_Edit1.Undo();/ 取消编辑框中上一次操作 m_Edit2.Undo(); ,(6) 给Exit按钮连接代码,void CEditBoxDlg:OnExitButton() OnOK(); ,请注意:本应用程序的可视化编程到此已完成,编译连接后此应用程序便可执行。,2019/5/23,30,应用举例之二,【11-8】编写一个程序,能够输入学生的信息,包括:“学号”、“姓名”、“性别”、“年龄”和所在的系,并能根据学生的“学号”、“姓名”和系别来进行检索。当检索到的信息超过一个时,能够依次显示。,2019/5/23,31,界面由”组合框、静态文本框和编辑框等组成,2019/5/23,32,单击工具窗“组合框”按钮后,在对话框的左上角按下鼠标左键并拖动鼠标画出一个大小合适的组合框, 在组合框上单击