Download presentation
Presentation is loading. Please wait.
Published byDeborah Johnston Modified 6年之前
1
第5章 文本与字体 2018/12/4 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/12/4 Huang Weitong
2
第5章 文本与字体 2018/12/4 第十一章 编辑框类及其应用 2018/12/4 Huang Weitong
3
内容提要 编辑框类的结构及其方法 编辑框类控件的应用 2018/12/4
4
第5章 文本与字体 2018/12/4 § 编辑框类的结构 及其方法 2018/12/4 Huang Weitong
5
1.CEdit类 编辑框控件主要功能——输入或编辑文本 编辑框控件 Cedit类是Cwnd类直接派生的。 单行编辑框控件 多行编辑框控件
第5章 文本与字体 2018/12/4 1.CEdit类 编辑框控件主要功能——输入或编辑文本 编辑框控件 单行编辑框控件 多行编辑框控件 Cedit类是Cwnd类直接派生的。 2018/12/4 Huang Weitong
6
1.CEdit类 在MFC\Include\Afxwin.h中定义了Cedit类
第5章 文本与字体 2018/12/4 1.CEdit类 在MFC\Include\Afxwin.h中定义了Cedit类 当创建CEdit对象时,MFC自动赋予该对象一个标准的Windows编辑控件,它定义了CEdit对象。 2018/12/4 Huang Weitong
7
CEidt类的定义 class CEdit : public CWnd { DECLARE_DYNAMIC(CEdit) public:
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);
8
void SetMargins(UINT nLeft, UINT nRight); DWORD GetMargins() const;
#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的大小! 2018/12/4
9
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 'int'
10
// 剪贴板操作 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(); //虚拟析构函数 };
13
第5章 文本与字体 2018/12/4 § 编辑框控件的应用 2018/12/4 Huang Weitong
14
[例11-1]设计并实现带有两个编辑框的应用程序,其窗口布局如 图11-1,功能如下:
单击Showl——Edit1编辑框中显示“This is the first EditBox.” 单击Clear1——Edit1编辑框中的内容被清除; 单击Show2——Edit2编辑框中显示“This is the second EditBox!” 单击Clear2——Edit2编辑框中的内容被清除; 单击Transfer——Edit1编辑框的内容复制到Edit2的编辑框中去 单击Undo——取消上一次操作 单击Exit——退出程序的运行 2018/12/4
15
图11-1 应用程序的窗口布局
16
1.编程过程 建立工程文件:用MFC AppWizard(exe) 可视化编程: 工程项目名称:EditBox
建立基于对话框的应用程序,选择Dialog based,生成对话框窗口作为主窗口。 可视化编程: 设计界面 连接变量 修改特性 添加代码 2018/12/4
17
2.设计界面 在名为IDD_EDITBOX_DIALOG的对话框作为应用程序的主窗口中进行界面设计
在EditBox的工作区中选择Resource View 在名为IDD_EDITBOX_DIALOG的对话框作为应用程序的主窗口中进行界面设计 生成了工程文件和 工程工作区文件后 在EditBox的工作区 中选择ResourceView
18
VC在工作台中显示可以进行可视化编辑的IDD_EDITBOX_DIALOG对话框,直接利用控件工具窗实现可视化操作。
所有可建立 的控件类型 把鼠标停在 编辑框控件 上,即可显 示该控件的 类型。
19
编辑框控件布置对话框中如编辑框。 将鼠标移到Edit1编辑框上; 单击鼠标右键,并在快捷菜单中选择Properties命令;
在窗口中输入控件的ID标识值IDC_EDIT1; 用同样的方法设置其它各个对象的属性。
20
3.给界面对象连接变量 在编辑框EDIT1中,单击鼠标右键,在弹出的快捷菜单中,选择ClassWizard;
选择Member Variables; 单击IDC_EDIT1; (a)选择Member Variables选项卡 (b)单击Control Ids列表 框中IDC_EDIT1项, 使之高亮化 (c) 单击Add Variable 按钮,显示Add MemberVariable窗口
21
单击Add Variable按钮,显示AddMemberVariable窗口; 成员变量名设置为m_Edit1; 类别设置为Control;
变量类型设置为CEdit。 (d)置Member Variables name 为m_Edit1 (e)置Categroy 为Control (f)置 Variable type为CEdit1 注意:只有将m_Edit1设为CEdit 类型,才能调用该类的Copy () , Paste () 等成员函数,实现本应用程序的操作。
22
用同样的方法给编辑框EDIT2等其它对象连接各自的变量;
最终,ClassWizard窗口将变为下图所示。
23
4 .修改编辑框的特性 在编辑框EDIT1中,单击鼠标右键; 在快捷菜单中,选Properties命令;
选Styles选项卡,进行设置,修改其的特性。 用同样方法修改EDIT2的特性。 多行 编辑 允许回车键,可实现多行文本输入 水平及垂 直滚动条
24
5 . 给界面对象连接函数添加代码 在按钮Showl上,单击鼠标右键,在弹出的快捷菜单中,选择ClassWizard;
选择Message Map; 单击IDC_SHOW1_BUTTON; 单击BN_CLICKED (c)单击Message列表框 中BN_CLICKED项, (a)选择Member Map选项卡 (d) 单击Add Function 按钮,显示Add MemberFunction窗口 (b)单击Object Ids列表框中 IDC_SHOW1_BUTTON项,
25
单击Add Function按钮,弹出Add Member Function窗口
接受Add Member Function建议的函数名OnShow1Button(); Member functions中增加了成员函数OnShow1Button(); 单击Edit Code按钮, 显示代码文件,进行添加代码。 (e)接受Add Member Function建议的函数 名OnShow1Button() (b) Member functions 列表框中中增加了成员 函数OnShow1Button() (d) 单击Edit Code, 显示代码文件, 添加代码
26
(2) 给 Clear1按钮连接代码 (1) 给Showl按钮连接代码 void CEditBoxDlg::OnShow1Button()
{ m_Edit1.SetSel(0,-1); //选中编辑框IDC_EDIT1中的全部内容 m_Edit1.ReplaceSel("This is the first EditBox.");//替换内容 } 请注意:程序中SetSel()和 ReplaceSel()都是CEdit类中的成员函数,m_Edit1是属于CEdit类的对象,可以调用之。 (2) 给 Clear1按钮连接代码 void CEditBoxDlg::OnClear1Button() { m_Edit1.SetSel(0,-1);//选中编辑框IDC_EDIT1中的全部内容 m_Edit1.ReplaceSel("");//用空字符串代替所选文本,即删除之 }
27
(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_Edit2.ReplaceSel("");//用空字符串代替所选文本,即删除之
28
(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编辑框中 }
29
请注意:本应用程序的可视化编程到此已完成,编译连接后此应用程序便可执行。
(5) 给 Undo按钮连接代码 第5章 文本与字体 2018/12/4 void CEditBoxDlg::OnUndoButton() { m_Edit1.Undo();// 取消编辑框中上一次操作 m_Edit2.Undo(); } (6) 给Exit按钮连接代码 void CEditBoxDlg::OnExitButton() { OnOK(); } 请注意:本应用程序的可视化编程到此已完成,编译连接后此应用程序便可执行。 Huang Weitong
30
(第十一章) 完 2018/12/4
31
第11章课后练习题 编写一个程序,对每组4个元素的10组数据进行管理,用按键操作实现功能包括: [注]5月14日前完成 输入修改数据;
显示一组数据; 对一组数据求: 最大值; 最小值; 平均值; 均方差; [注]5月14日前完成 2018/12/4
Similar presentations