MFC中CEdit类使用方法小结.docx
《MFC中CEdit类使用方法小结.docx》由会员分享,可在线阅读,更多相关《MFC中CEdit类使用方法小结.docx(26页珍藏版)》请在冰豆网上搜索。
MFC中CEdit类使用方法小结
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_msgvoidmemberFxn();
下面是一组可能的消息映射入口,以及在何种情况下向父类发送的描述:
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的更多信息,请参阅联机文档“VisualC++程序员指南”中的“控件主题”。
#include
请参阅?
?
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
BOOLCanUndo()const;
返回值如果上一次编辑操作可以用Undo成员函数撤销,则返回非零值,否则为0。
说明调用该函数来决定上一次编辑操作是否可以撤销。
要了解更多信息,请参阅Win32文档中的EM_CANUNDO。
请参阅?
?
CEdit:
:
Undo,CEdit:
:
EmptyUndoBuffer
CEdit:
:
CEditCEdit();说明构造一个CEdit对象。
使用Create来创建Windows编辑控件。
请参阅?
?
CEdit:
:
Create
CEdit:
:
CharFromPos
intCharFromPos(CPointpt)const;
返回值返回WORD低位的字符索引,以及WORD高位的行索引。
参数pt在客户区域中的CEdit对象的点的坐标。
说明调用该函数来获取基于0索引的行和最接近CEdit控件中指定点的字符索引。
注意?
?
该成员函数在Windows95和WindowsNT4.0中有效。
要了解更多的信息,请参阅Win32文档中的EM_CHARFROMMOPS。
请参阅?
?
CEdit:
:
PosFromChar
CEdit:
:
Clear
voidClear();
说明调用该函数来删除(清除)编辑控件中当前选中的文本。
由Clear进行的操作可以通过调用Undo成员函数撤销。
要删除当前选定文本并将其拷贝到剪贴板上,调用Cut成员函数。
要了解更多的信息,请参阅Win32文档中的WM_CLEAR。
请参阅?
CEdit:
:
Undo,CEdit:
:
Copy,CEdit:
:
Cut,CEdit:
:
Paste
CEdit:
:
Copyv
oidCopy();
说明调用该函数将编辑控件中的当前选中文本以CF_TEXT格式拷贝到剪贴板中。
要了解更多的信息,请参阅Win32文档中的WM_COPY。
请参阅?
?
CEdit:
:
Clear,CEdit:
:
Cut,CEdit:
:
Paste
CEdit:
:
Create
BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UNITnID);
返回值初始化成功,则返回非零值,否则为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
voidCut();
说明调用该函数来删除(剪切)在编辑控件中的当前选定文本,并将其用CF_TEXT格式拷贝到剪贴板中。
由Cut执行的删除可以由Undo成员函数来撤销。
删除当前选定部分而不将已删除文本置于剪贴板,调用Clear成员函数。
要了解更多的信息,请参阅Win32文档中的WM_CUT。
请参阅?
?
CEdit:
:
Undo,CEdit:
:
Clear,CEdit:
:
Copy,CEdit:
:
Paste
CEdit:
:
EmptyUndoBuffer
VoidEmptyUndoBuffer();
说明调用此成员函数重新设置(清除)一个编辑控件中的撤消标记,使编辑控件不可撤消最近一次操作。
撤消标记在编辑控件的某个操作可以撤消时建立。
当调用SetWindows或SetHandleCwnd成员函数时,撤消标记自动被清除。
要了解更多的信息,请参阅Win32文档中的EM_EMPTYUNDOBUFFER。
请参阅?
?
CEdit:
:
CanUndo,CEdit:
:
SetHandle,CEdit:
:
Undo,CWnd:
:
SetWindowText
CEdit:
:
FmtLines
BOOL?
?
FmtLines(BOOLbAddEOL);
返回值如果发生格式化,则返回非零值,否则为0。
参数
?
?
?
?
bAddEOl
?
?
?
?
指定是否要插入软断行符,值为True时插入软断行符,为False时去掉软断行符。
说明调用此成员函数用于设置在一个多行编辑控件中是否包含软断行符。
一个软断行符包含在断行行末插入两个回车和一个换行,这是因为一行可容纳的文字有限。
而一个硬断行符包含一个回车和一个断行。
以硬断行符结束的行不受FmtLines的影响。
仅在CEdit对象是一个多行编辑控件时Windows才响应此命令。
FmtLines仅影响GetHandle返回的缓冲区和WM_GETTEXT返回的文本,而对编辑控件中的显示无影响。
要了解更多信息,请参阅Win32文档中的EM_FMTLINES。
请参阅?
?
CEdit:
:
GetHandle,CWnd:
:
GetWindowText
CEdit:
:
GetFirstVisibleLine
intGetFirstVisibleLine()const;
返回值可视的最顶端行的行号(行号由0开始),对单行编辑控件来说,返回值为0。
说明调用此成员函数决定编辑控件中可视的最顶端行的行号。
要了解更多信息,请参阅Win32文档中的EM_GETFIRSTVISIBLELINE。
请参阅?
?
CEdit:
:
GetLine
CEdit:
:
GetHandle
HLOCALGetHandle()const;
返回值一个用于标识编辑控件内容的局部内存句柄。
如果发生错误,例如发送信息到一个单行编辑控件,则返回值为0。
说明调用此成员函数来获取一个多行编辑控件中当前分配的内存句柄。
此句柄是一个局部内存句柄,可被任何局部Windows存储函数作为一个参数来获得。
GetHandle仅仅被多行编辑控件处理。
在一个多行编辑控件的对话框中调用此成员函数时,对话框必须由DS_LOCAL-EDIT的样式标志集生成。
如果不是,虽然也可以得到一个非零的返回值,但此返回值不可被使用。
注意?
?
?
?
?
?
?
GetHandle不可在Windows95下运行。
如果在Windows95下调用,会返回NULL。
GetHandle可在WindowsNT3.51版及以上使用。
要了解有关的更多信息,请参阅Win32文档中的EM_GETHANDLE。
请参阅?
?
CEdit:
:
SetHandle
CEdit:
:
GetLimitText
UINTGetLimitText()const;
返回值对当前CEdit对象的文本大小限制,以字节计算。
说明调用此成员函数来获取该CEdit对象的文本大小限制,文本限制是此编辑控件可以接收的文本的最大长度(以字节计算)。
注意?
?
?
?
?
?
此成员函数仅在Windows95和WindowsNT4.0以上版本中可用。
要了解更多信息,请参阅Win32文档中的EM_GETLIMITTEXT。
请参阅?
?
CEdit:
:
SetLimitText,CEdit:
:
LimitText
CEdit:
:
GetLine
intGetLine(intnIndex,LPCTSTRlpszBuffer)const;
intGetLine(intnIndex,LPCTSTRlpszBuffer,intnMaxLength)const;
返回值实际拷贝的字节数。
如果由nIndex指定的行号大于此编辑控件的行数,则返回值为0。
参数
nIndex?
?
?
?
指定从多行编辑控件中检索的行的行号,行号由0指定。
对单行编辑控件,此参数被忽略。
lpszBuffer指向获取此行备份的缓冲区。
缓冲区的第一个字必须指定能被拷贝到缓冲区的最大字节数。
?
?
nMaxLength指定能被拷贝到缓冲区的最大字节数,GetLine在调用Windows之前将此值放置到lpszBuffer的第一个字中。
说明调用此成员函数从编辑控件中获取文本的一行并将其放置到lpszBuffer缓冲区。
被拷贝的行不包括空终止符。
要了解更多信息,请参阅Win32文档中的EM_GETLINE。
CEdit:
:
GetLineCount
IntGetLineCount()const;
返回值
在多行编辑控件中的包含的一个整数总行数。
如果没有向控件输入任何文本,则返回值为1。
说明调用此成员函数获取一个多行编辑控件中的总行数。
此函数仅应用于多行编辑控件。
要了解更多信息,请参阅Win32文档中的EM_GETLINECOUNT。
CEdit:
:
GetMargins
DWORDGetMargins()const;
返回值
双字的低字位为左边距,高字位为右边距。
说明调用此成员函数获取编辑控件的左右边距,以像素表示。
注意?
?
此成员函数仅在Windows95和WindowsNT4.0以上版本中可用。
要了解更多信息,请参阅Win32文档中的EM_GETMARGINS。
请参阅?
?
CEdit:
:
SetMargins
CEdit:
:
GetModify
BOOL?
?
GetModify()const
返回值
?
?
?
?
?
?
如果编辑控件的内容被改变,则返回值为非零,否则为0。
说明
?
?
?
?
调用此成员函数测试编辑控件的内容是否被改变。
Windows有一个内部标记来表明编辑控件的内容是否被改变。
当编辑控件首次被创建时此标记被清除,在调用SetModify成员函数时也被清除。
要了解更多信息,请参阅Win32文档中的EM_GETMODIFY。
请参阅?
?
CEdit:
:
SetModify
CEdit:
:
GetPasswordChar
TCHARGetPasswordChar()const;
返回值
?
?
?
?
指定在用户输入字符处显示的字符。
如果无密码,则返回NULL。
说明
?
?
?
?
调用此成员函数获取在用户输入密码时所显示的密码字符。
如果编辑控件是用ES_PASSWORD风格建立的,则缺省的密码字符为一个星号(*)。
要了解更多信息,请参阅Win32文档中的EM_GETPASSWORDCHAR。
请参阅?
?
CEdit:
:
SetPasswordChar
CEdit:
:
GetRect
voidGetRect(LPRECTlpRect)const;
参数
?
?
?
lpRect?
?
?
指向RECT结构以接收格式化矩形。
说明
?
?
?
?
调用此成员函数获取一个编辑控件的格式化矩形。
此格式化矩形为文本的边界矩形,与编辑控件窗口的大小无关。
多行编辑控件的格式化矩形可以被SetRect和SetRectNP成员函数改变。
要了解更多信息,请参阅Win32文档中的EM_GETRECT。
请参阅?
?
CEdit:
:
SetRect,CEdit:
:
SetRectNP
CEdit:
:
GetSel
DWORDGetSel()const;
voidGetSel(int&nStartChar,int&nEndChar)const;
返回值
?
?
?
?
?
?
此版本返回一个双字,其低位字为起始位置,高位字为第一个未被选中的字符的位置。
参数
?
?
?
nStartChar?
?
?
?
指向当前选中部分的第一个字符位置,用整数表示。
?
?
?
nEndChar?
?
?
?
?
?
指向第一个未被选中的字符的位置,用整数表示。
说明
?
?
?
?
?
调用此成员函数获取一个编辑控件中当前被选中部分(如果有)的起始和结束位置,可用参数也可用返回值。
要了解更多信息,请参阅Win32文档中的EM_GETSEL。
请参阅?
?
CEdit:
:
SetSel
CEdit:
:
LimitText
voidLimitText(intnChars=0);
参数
?
?
?
nChars?
?
?
?
指定用户可以输入的文本的长度(以字节枚举)。
如果参数为0,则长度设置为UINT_MAX个字节,这是缺省情况。
说明
?
?
?
?
调用此成员函数限定用户可以向编辑控件中输入的文本的长度。
改变文本限定使用户能输入的文本受到限制,而对已在编辑控件中的文本没有影响,也不影响用CWnd中的SetWindowText成员函数能拷贝到编辑控件中的文本的长度。
如果用SetWindowText函数输入的文本超过调用LimitText函数所指定的值,则用户可以在编辑控件中删除任何文本,但文本限制会禁止用户将已存在的文本替换为新文本,直到删除当前所选文本而使文本大小降至限制以内。
注意?
?
在Win32(Windows95和WindowsNT)中,SetLimitText代替此函数。
要了解更多信息,请参阅Win32文档中的EM_LIMITTEXT。
请参阅?
?
CWnd:
:
SetWindowsText,CEdit:
:
GetLimitText,CEdit:
:
SelLimitText
CEdit:
:
LineFromChar
IntLineFromChar(intnIndex=-1)const;
返回值
?
?
?
?
返回由nIndex指定的字符索引的行号,此行号从0开始。
如果nIndex为-1,则返回所选部分第一个字符的行号,如果无选定部分,则返回当前行号。
参数
?
?
?
?
nIndex包含编辑控件文本中所需字符的基于0的索引值,或者包含-1。
如果为-1则指定为当前行,即包含脱字符的行。
说明?
?
调用此成员函数获取包含指定字符索引的行的行号,字符索引指编辑控件中从开始到指定字符的字符数。
此成员函数仅适用于多行编辑控件。
要了解更多信息,请参阅Win32文档中的EM_LINEFROMCHAR。
请参阅?
?
CEdit:
:
LineIndex
CEdit:
:
LineIndex
IntLineIndex(intnLine=-1)const;
返回值
?
?
nLine所指定的行的字符索引。
如果指定的行号大于编辑控件的行数,则返回-1。
参数
?
?
?
nline?
?
?
包含编辑控件文本中所需字符的索引值(此索引由0开始),如果为-1则指定为当前行,即包含脱字符的行。
说明
?
?
?
调用此成员函数获取多行编辑控件中一行的字符索引,字符索引指从文本控件中文本开头到指定行的字符数。
此成员函数仅适用于多行编辑控件。
要了解更多信息,请参阅Win32文档中的EM_LINEINDEX。
请参阅?
?
CEdit:
:
LineFromChar
CEdit:
:
LineLength
IntLineLength(intnLine=-1)const;
返回值
?
?
?
?
当函数由多行编辑控件调用时,返回由nLine所指定的行的长度(以字节数表示);当函数由单行编辑控件调用时,返回编辑控件中文本的长度(以字节数表示)。
参数
?
?
?
?
nLine指定要获取长度的行的字符索引。
如果参数值为-1,表示当前行(即包含脱字符的行),不包括此行中被选中的部分文本的长度。
LineLength在单行编辑控件调用时是被忽略的。
说明
?
?
?
?
调用此成员函数获取在编辑控件中一行的字符长度。
调用此成员函数在多行编辑控件中获取一个指定了行号的行的字符索引。
要了解更多信息,请参阅Win32文档中的EM_LINELENGTH。
请参阅?
?
CEdit:
:
LineIndex
CEdit:
:
LineScroll
voidLineScroll(intnLine,intnChars=0);
参数
?
?
?
nLine?
?
?
?
指定纵向滚动的行数。
?
?
?
nChars?
?
?
指定水平滚动的字符数。
如果编辑控件使用ES_RIGHT或ES_CENTER风格,此值无效。
说明
?
?
?
调用此成员函数滚动多行编辑控件的文本。
此成员函数仅用于多行编辑控件。
编辑控件的纵向滚动不能超过该文本的最后一行,如果当前行号加上由nLines指定的行数超过编辑控件中的总行数,则它的值被调整而使得文本的最后一行滚动达到编辑控件窗口的顶端。
此函数可以水平滚动经过每行的最后一个字符。
要了解更多信息,请参阅Win32文档中的EM_LLNESC