CEdit类提供了Windows 编辑控件中的功能。编辑控件是一个子窗口矩形,用户可以向其中输入文本。可以通过对话模板或直接从代码中创建一个编辑控件。在两种情形下,首先调用CEdit构造程序构造CEdit对象,再调用Create成员函数创建Windows 编辑控件并将其与CEdit对象连接。构造在CEdit的派生类中可以单步实现。为派生类编写构造程序并从构造程序中调用Create。CEdit从CWnd 继承了重要的功能,要在CEdit对象中设置或获取文本,使用CWnd 成员函数SetWindowText和GetWindowText,可以设置和得到编辑控件的全部内容,即使它是一个多行控件。如果编辑控件是多行的,使用CEdit成员函数GetLine,GetSel,GetSel和ReplaceSel来获取和写入控件的部分文本。

 

如果要处理编辑控件发往其父类(通常是一个CDialog派生类)的通知消息,则向父类中为每一消息添加一个消息映射入口和消息处理成员函数。各消息映射入口可采用如下形式:

ON_Notification(id,memberFxn)

其中id指定了发送通知的编辑控件的子窗口ID,memberFxn为你写好的处理通知的父成员函数的名字。父函数形式如下:

afx_msg void memberFxn();

下面是一组可能的消息映射入口,以及在何种情况下向父类发送的描述:

ON_EN_CHANGE     用户采取的行动可能会改变编辑控件的文本。与EN_UPDATE通知消息不同,该通知是在

                 Windows 更新显示之后发送的。

ON_EN_ERRSPACE   编辑控件不能为特定请求分配足够的空间。

ON_EN_HSCROLL    用户单击了编辑控件中的水平滚动条,父窗口在屏幕更新之前被通知。

ON_EN_KILLFOCUS  编辑控件失去输入焦点。

ON_EN_MAXTEXT    当前输入超过了为编辑控件指定的数目,并作截尾处理。当编辑控件不具有

                 ON_EN_HSCROLL风格且要输入的字符会超过编辑控件的宽度时,发送消息。当编辑控件

                 不具有ON_EN_VSCROLL风格且要输入的字符会超过编辑控件的高度时,也会发送消息。

ON_EN_SETFOCUS   编辑控件获得焦点。

ON_EN_UPDATE     编辑控件将要显示变动的文本。在控件对文本格式化之后但在显示文本之前发送消息,

                 以便在必要时改变窗口尺寸。

ON_EN_VSCROLL    用户单击了编辑控件中的垂直滚动条,父窗口在屏幕更新之前被通知。

 

如果在对话框内创建CEdit对象,CEdit对象在用户关闭对话框时自动被删除。如果使用对话框编辑器从对话资源中创建CEdit对象,CEdit对象在用户关闭对话框时自动被删除。如果在窗口内创建CEdit对象,也需要删除它。如果在栈上创建CEdit对象,它被自动删除。如果使用new函数在堆上创建CEdit对象,在用户中止编辑控件时,必须对其调用delete来删除它。如果在CEdit对象中分配存储空间,覆盖CEdit析构程序来处理分配情况。关于CEdit的更多信息,请参阅联机文档“Visual C++程序员指南”中的“控件主题”。

#include<afxwin.h>

请参阅  CWnd,CButton,CComboBox,CListBox,CScrollBar,CStatic,CDialog

 

CEdit类的成员

构造函数

CEdit    构造一个CEdit控件对象

Create   创建一个Windows编辑控件,并将其与CEdit对象连接CEdit

属性

CanUndo        决定一个编辑控件操作是否能够被撤销

GetLineCount   获得多行编辑控件中的行数GetModify决定编辑控件的内容是否被修改SetModify为编辑控

               件设置或清除修改标记

GetRect        为编辑控件获取格式化的矩形

GetHandle      获得为当前多行编辑控件分配的内存的句柄

SetHandle      设置为多行编辑控件使用的本地内存的句柄

SetMargins     为CEdit设置左边和右边的空白边界

GetMargins     获得为CEdit设置左边和右边的空白边界

SetLimitText   设置CEdit能够容纳的文本的最大量

GetLimitText   获得CEdit能够容纳的文本的最大量

PosFromChar    获得指定字符索引的左上角的坐标

CharFromPos    获得最靠近指定位置的字符的行和字符索引

GetLine        从编辑控件中获得一行文本

GetPasswordChar          获得当用户输入文本时在编辑控件中显示的口令

GetFirstVisibleLeLine    决定在编辑控件中最顶部的可视的行

 

CEdit 操作

EmptyUndoBuffer      重新设置(清除)编辑控件的撤销标记

FmtLines             设置在多行编辑控件中的软回车打开或关闭

LimitText            用户在输入文本时的文本长度限制

LineFromChar         获得包含指定字符索引的行的数目

LineIndex            获得在多行编辑控件中的某行的字符索引

LineLength           获得编辑控件中的行的长度

LineScroll           在多行编辑控件中滚动文本

ReplaceSel           用指定文本覆盖编辑控件中当前被选中的文本

SetPasswordChar      设置或清除当用户输入文本时在编辑控件中显示的口令

SetRect              设置多行编辑控件的带格式的矩形,并更新该控件

SetRectNP            设置多行编辑控件的带格式的矩形,而不必重新绘制

SetSel               在编辑控件中选定文本

SetTabStops          设置多行编辑控件的制表键停顿位

SetReadOnly          为编辑控件设置只读状态

 

CEdit剪贴板操作

Undo           撤销上一次的编辑控件操作

Clear          删除(清除)编辑控件中当前选中的文本

Copy           将编辑控件中的当前选中文本以CF_TEXT格式拷贝到剪贴板中

Cut            删除编辑控件中当前选中的文本,并将删除的文本以CF_TEXT格式拷贝到剪贴板中

Paste          在当前光标位置插入剪贴板内的文本。只有在剪贴板数据为CF_TEXT格式时才进行插入

 

CEdit::CanUndo

BOOL CanUndo() const;

返回值如果上一次编辑操作可以用Undo成员函数撤销,则返回非零值,否则为0。说明调用该函数来决定上一次编辑操作是否可以撤销。

要了解更多信息,请参阅Win 32文档中的EM_CANUNDO 。请参阅  CEdit::Undo,CEdit::EmptyUndoBuffer

 

CEdit::CEditCEdit();说明构造一个CEdit对象。使用Create来创建Windows 编辑控件。

请参阅  CEdit::Create

 

CEdit::CharFromPos

int CharFromPos(CPoint pt) const;

返回值返回WORD低位的字符索引,以及WORD高位的行索引。参数pt在客户区域中的CEdit对象的点的坐标。说明调用该函数来获取基于0索引的行和最接近CEdit控件中指定点的字符索引。

注意  该成员函数在Windows 95和Windows NT 4.0中有效。

要了解更多的信息,请参阅Win 32文档中的EM_CHARFROMMOPS。请参阅  CEdit::PosFromChar

 

CEdit::Clear

void Clear();

说明调用该函数来删除(清除)编辑控件中当前选中的文本。

由Clear进行的操作可以通过调用Undo成员函数撤销。要删除当前选定文本并将其拷贝到剪贴板上,调用Cut成员函数。要了解更多的信息,请参阅Win 32文档中的WM_CLEAR。请参阅 CEdit::Undo,CEdit::Copy,CEdit::Cut,CEdit::Paste

 

CEdit::Copyv

oid Copy();

说明调用该函数将编辑控件中的当前选中文本以CF_TEXT格式拷贝到剪贴板中。要了解更多的信息,请参阅Win 32文档中的WM_COPY。请参阅  CEdit::Clear,CEdit::Cut,CEdit::Paste

 

CEdit::Create

BOOL Create(DWORD dwStyle,const RECT&rect,CWnd*pParentWnd,UNIT nID);

返回值初始化成功,则返回非零值,否则为0。参数dwStyle指定编辑控件的风格。可以组合使用控件的编辑风格。

 

rect          指定控件的尺寸和位置。可以是RECT结构或CRect对象 。

pParentWnd    指定编辑控件的父窗口(通常使用CDialog )。其值不能为NULL。

nID           指定编辑控件的ID。

 

说明

构造CEdit对象分两步。首先调用CEdit构造程序,再调用Create,这样就创建了一个Windows 编辑控件,并将其与CEdit对象连接。当执行Create时,Windows 发送WM_NCCREATE ,WM_NCCALCSIZE ,WM_CREATE 和WM_GETMINMAXINFO 消息到编辑控件。

缺省地,这些消息由CWnd 基类中的OnNcCalcSize,OnCreate,OnNcCreate和OnGetMinMaxInfo成员函数处理。要扩展缺省的消息处理,先从CEdit派生一个类,为新类添加消息映射并覆盖上述消息处理成员函数。例如,覆盖OnCreate为新类执行所需要的初始化操作。

可以为编辑控件应用如下的风格:

WS_CHILD     总是采用

WS_VISIBLE   经常采用

WS_DISABLED  很少采用

WS_GROUP     组合控件

WS_TABSTOP   按制表键次序包含编辑控件

请参阅  CEdit::CEdit

 

CEdit::Cut

void Cut();

说明调用该函数来删除(剪切)在编辑控件中的当前选定文本,并将其用CF_TEXT格式拷贝到剪贴板中。由Cut执行的删除可以由Undo成员函数来撤销。删除当前选定部分而不将已删除文本置于剪贴板,调用Clear成员函数。要了解更多的信息,请参阅Win 32文档中的WM_CUT。请参阅  CEdit::Undo ,CEdit::Clear,CEdit::Copy,CEdit::Paste

 

CEdit::EmptyUndoBuffer

Void EmptyUndoBuffer();

说明调用此成员函数重新设置(清除)一个编辑控件中的撤消标记,使编辑控件不可撤消最近一次操作。撤消标记在编辑控件的某个操作可以撤消时建立。当调用SetWindows 或SetHandle Cwnd成员函数时,撤消标记自动被清除。要了解更多的信息,请参阅Win32文档中的EM_EMPTYUNDOBUFFER。请参阅  CEdit::CanUndo, CEdit::SetHandle, CEdit::Undo,CWnd::SetWindowText

 

CEdit::FmtLines

BOOL  FmtLines(BOOL bAddEOL);

返回值如果发生格式化,则返回非零值,否则为0。

参数

    bAddEOl

    指定是否要插入软断行符,值为True时插入软断行符,为False时去掉软断行符。说明调用此成员函数用于设置在一个多行编辑控件中是否包含软断行符。一个软断行符包含在断行行末插入两个回车和一个换行,这是因为一行可容纳的文字有限。而一个硬断行符包含一个回车和一个断行。以硬断行符结束的行不受FmtLines的影响。

仅在CEdit对象是一个多行编辑控件时Windows才响应此命令。FmtLines仅影响GetHandle返回的缓冲区和WM_GETTEXT返回的文本,而对编辑控件中的显示无影响。

要了解更多信息,请参阅Win32文档中的EM_FMTLINES。

请参阅  CEdit::GetHandle, CWnd::GetWindowText

 

CEdit::GetFirstVisibleLine

int GetFirstVisibleLine()const;

返回值可视的最顶端行的行号(行号由0开始),对单行编辑控件来说,返回值为0。说明调用此成员函数决定编辑控件中可视的最顶端行的行号。

要了解更多信息,请参阅Win32文档中的EM_GETFIRSTVISIBLELINE。

请参阅  CEdit::GetLine

 

CEdit::GetHandle

HLOCAL GetHandle() const;

返回值一个用于标识编辑控件内容的局部内存句柄。如果发生错误,例如发送信息到一个单行编辑控件,则返回值为0。说明调用此成员函数来获取一个多行编辑控件中当前分配的内存句柄。此句柄是一个局部内存句柄,可被任何局部Windows存储函数作为一个参数来获得。

GetHandle仅仅被多行编辑控件处理。

在一个多行编辑控件的对话框中调用此成员函数时,对话框必须由DS_LOCAL-EDIT的样式标志集生成。如果不是,虽然也可以得到一个非零的返回值,但此返回值不可被使用。

注意 

      GetHandle不可在Windows 95下运行。如果在Windows 95下调用,会返回NULL。GetHandle可在Windows NT 3.51版及以上使用。要了解有关的更多信息,请参阅Win32文档中的EM_GETHANDLE。

请参阅  CEdit::SetHandle

 

CEdit::GetLimitText

UINT GetLimitText() const;

返回值对当前CEdit对象的文本大小限制,以字节计算。说明调用此成员函数来获取该CEdit对象的文本大小限制,文本限制是此编辑控件可以接收的文本的最大长度(以字节计算)。

注意 

     此成员函数仅在Windows 95和Windows NT 4.0以上版本中可用。要了解更多信息,请参阅Win32文档中的EM_GETLIMITTEXT。

请参阅  CEdit::SetLimitText, CEdit::LimitText

 

CEdit::GetLine

int GetLine(int nIndex, LPCTSTR lpszBuffer) const;

int GetLine(int nIndex, LPCTSTR lpszBuffer, int nMaxLength) const;

返回值实际拷贝的字节数。如果由nIndex指定的行号大于此编辑控件的行数,则返回值为0。

参数

nIndex    指定从多行编辑控件中检索的行的行号,行号由0指定。对单行编辑控件,此参数被忽略。

lpszBuffer指向获取此行备份的缓冲区。缓冲区的第一个字必须指定能被拷贝到缓冲区的最大字节数。  nMaxLength指定能被拷贝到缓冲区的最大字节数,GetLine在调用Windows之前将此值放置到lpszBuffer的第一个字中。说明调用此成员函数从编辑控件中获取文本的一行并将其放置到lpszBuffer缓冲区。被拷贝的行不包括空终止符。要了解更多信息,请参阅Win32文档中的EM_GETLINE。

请参阅  CEdit::LineLength, CWnd::GetWindowText