1、MFC cedit 控件使用方法CEdit类提供了Windows 编辑控件中的功能。编辑控件是一个子窗口矩形,用户可以向其中输入文本。可以通过对话模板或直接从代码中创建一个编辑控件。在两种情形下,首先调用CEdit构造程序构造CEdit对象,再调用Create成员函数创建Windows 编辑控件并将其与CEdit对象连接。构造在CEdit的派生类中可以单步实现。为派生类编写构造程序并从构造程序中调用Create。CEdit从CWnd 继承了重要的功能,要在CEdit对象中设置或获取文本,使用CWnd 成员函数SetWindowText和GetWindowText,可以设置和得到编辑控件的全部内
2、容,即使它是一个多行控件。如果编辑控件是多行的,使用CEdit成员函数GetLine,GetSel,GetSel和ReplaceSel来获取和写入控件的部分文本。如果要处理编辑控件发往其父类(通常是一个CDialog派生类)的通知消息,则向父类中为每一消息添加一个消息映射入口和消息处理成员函数。各消息映射入口可采用如下形式:ON_Notification(id,memberFxn)其中id指定了发送通知的编辑控件的子窗口ID,memberFxn为你写好的处理通知的父成员函数的名字。父函数形式如下:afx_msg void memberFxn();下面是一组可能的消息映射入口,以及在何种情况下向
3、父类发送的描述:ON_EN_CHANGE用户采取的行动可能会改变编辑控件的文本。与EN_UPDATE通知消息不同,该通知是在Windows 更新显示之后发送的。ON_EN_ERRSPACE编辑控件不能为特定请求分配足够的空间。ON_EN_HSCROLL用户单击了编辑控件中的水平滚动条,父窗口在屏幕更新之前被通知。ON_EN_KILLFOCUS编辑控件失去输入焦点。ON_EN_MAXTEXT当前输入超过了为编辑控件指定的数目,并作截尾处理。当编辑控件不具有ON_EN_HSCROLL风格且要输入的字符会超过编辑控件的宽度时,发送消息。当编辑控件不具有ON_EN_VSCROLL风格且要输入的字符会超
4、过编辑控件的高度时,也会发送消息。ON_EN_SETFOCUS编辑控件获得焦点。ON_EN_UPDATE编辑控件将要显示变动的文本。在控件对文本格式化之后但在显示文本之前发送消息,以便在必要时改变窗口尺寸。ON_EN_VSCROLL用户单击了编辑控件中的垂直滚动条,父窗口在屏幕更新之前被通知。如果在对话框内创建CEdit对象,CEdit对象在用户关闭对话框时自动被删除。如果使用对话框编辑器从对话资源中创建CEdit对象,CEdit对象在用户关闭对话框时自动被删除。如果在窗口内创建CEdit对象,也需要删除它。如果在栈上创建CEdit对象,它被自动删除。如果使用new函数在堆上创建CEdit对象
5、,在用户中止编辑控件时,必须对其调用delete来删除它。如果在CEdit对象中分配存储空间,覆盖CEdit析构程序来处理分配情况。关于CEdit的更多信息,请参阅联机文档“Visual C+程序员指南”中的“控件主题”。#include请参阅CWnd,CButton,CComboBox,CListBox,CScrollBar,CStatic,CDialogCEdit类的成员构造函数CEdit构造一个CEdit控件对象Create创建一个Windows编辑控件,并将其与CEdit对象连接CEdit属性CanUndo决定一个编辑控件操作是否能够被撤销GetLineCount获得多行编辑控件中的行
6、数GetModify决定编辑控件的内容是否被修改SetModify为编辑控件设置或清除修改标记GetRect为编辑控件获取格式化的矩形GetHandle获得为当前多行编辑控件分配的内存的句柄SetHandle设置为多行编辑控件使用的本地内存的句柄SetMargins为CEdit设置左边和右边的空白边界GetMargins获得为CEdit设置左边和右边的空白边界SetLimitText设置CEdit能够容纳的文本的最大量GetLimitText获得CEdit能够容纳的文本的最大量PosFromChar获得指定字符索引的左上角的坐标CharFromPos获得最靠近指定位置的字符的行和字符索引Get
7、Line从编辑控件中获得一行文本GetPasswordChar获得当用户输入文本时在编辑控件中显示的口令GetFirstVisibleLeLine决定在编辑控件中最顶部的可视的行CEdit 操作EmptyUndoBuffer重新设置(清除)编辑控件的撤销标记FmtLines设置在多行编辑控件中的软回车打开或关闭LimitText用户在输入文本时的文本长度限制LineFromChar获得包含指定字符索引的行的数目LineIndex获得在多行编辑控件中的某行的字符索引LineLength获得编辑控件中的行的长度LineScroll在多行编辑控件中滚动文本ReplaceSel用指定文本覆盖编辑控件中
8、当前被选中的文本SetPasswordChar设置或清除当用户输入文本时在编辑控件中显示的口令SetRect设置多行编辑控件的带格式的矩形,并更新该控件SetRectNP设置多行编辑控件的带格式的矩形,而不必重新绘制SetSel在编辑控件中选定文本SetTabStops设置多行编辑控件的制表键停顿位SetReadOnly为编辑控件设置只读状态CEdit剪贴板操作Undo撤销上一次的编辑控件操作Clear删除(清除)编辑控件中当前选中的文本Copy将编辑控件中的当前选中文本以CF_TEXT格式拷贝到剪贴板中Cut删除编辑控件中当前选中的文本,并将删除的文本以CF_TEXT格式拷贝到剪贴板中Pas
9、te在当前光标位置插入剪贴板内的文本。只有在剪贴板数据为CF_TEXT格式时才进行插入CEdit:CanUndoBOOL CanUndo() const;返回值如果上一次编辑操作可以用Undo成员函数撤销,则返回非零值,否则为0。说明调用该函数来决定上一次编辑操作是否可以撤销。要了解更多信息,请参阅Win 32文档中的EM_CANUNDO 。请参阅CEdit:Undo,CEdit:EmptyUndoBufferCEdit:CEditCEdit();说明构造一个CEdit对象。使用Create来创建Windows 编辑控件。请参阅CEdit:CreateCEdit:CharFromPosint
10、CharFromPos(CPoint pt) const;返回值返回WORD低位的字符索引,以及WORD高位的行索引。参数pt在客户区域中的CEdit对象的点的坐标。说明调用该函数来获取基于0索引的行和最接近CEdit控件中指定点的字符索引。注意该成员函数在Windows 95和Windows NT 4.0中有效。要了解更多的信息,请参阅Win 32文档中的EM_CHARFROMMOPS。请参阅CEdit:PosFromCharCEdit:Clearvoid Clear();说明调用该函数来删除(清除)编辑控件中当前选中的文本。由Clear进行的操作可以通过调用Undo成员函数撤销。要删除当前
11、选定文本并将其拷贝到剪贴板上,调用Cut成员函数。要了解更多的信息,请参阅Win 32文档中的WM_CLEAR。请参阅CEdit:Undo,CEdit:Copy,CEdit:Cut,CEdit:PasteCEdit:Copyvoid Copy();说明调用该函数将编辑控件中的当前选中文本以CF_TEXT格式拷贝到剪贴板中。要了解更多的信息,请参阅Win 32文档中的WM_COPY。请参阅CEdit:Clear,CEdit:Cut,CEdit:PasteCEdit:CreateBOOL Create(DWORD dwStyle,const RECT&rect,CWnd*pParentWnd,UN
12、IT 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_GETMINMAX
13、INFO 消息到编辑控件。缺省地,这些消息由CWnd 基类中的OnNcCalcSize,OnCreate,OnNcCreate和OnGetMinMaxInfo成员函数处理。要扩展缺省的消息处理,先从CEdit派生一个类,为新类添加消息映射并覆盖上述消息处理成员函数。例如,覆盖OnCreate为新类执行所需要的初始化操作。可以为编辑控件应用如下的风格:WS_CHILD总是采用WS_VISIBLE经常采用WS_DISABLED很少采用WS_GROUP组合控件WS_TABSTOP按制表键次序包含编辑控件请参阅CEdit:CEditCEdit:Cutvoid Cut();说明调用该函数来删除(剪切)在
14、编辑控件中的当前选定文本,并将其用CF_TEXT格式拷贝到剪贴板中。由Cut执行的删除可以由Undo成员函数来撤销。删除当前选定部分而不将已删除文本置于剪贴板,调用Clear成员函数。要了解更多的信息,请参阅Win 32文档中的WM_CUT。请参阅CEdit:Undo ,CEdit:Clear,CEdit:Copy,CEdit:PasteCEdit:EmptyUndoBufferVoid EmptyUndoBuffer();说明调用此成员函数重新设置(清除)一个编辑控件中的撤消标记,使编辑控件不可撤消最近一次操作。撤消标记在编辑控件的某个操作可以撤消时建立。当调用SetWindows 或Set
15、Handle Cwnd成员函数时,撤消标记自动被清除。要了解更多的信息,请参阅Win32文档中的EM_EMPTYUNDOBUFFER。请参阅CEdit:CanUndo, CEdit:SetHandle, CEdit:Undo,CWnd:SetWindowTextCEdit:FmtLinesBOOLFmtLines(BOOL bAddEOL);返回值如果发生格式化,则返回非零值,否则为0。参数bAddEOl指定是否要插入软断行符,值为True时插入软断行符,为False时去掉软断行符。说明调用此成员函数用于设置在一个多行编辑控件中是否包含软断行符。一个软断行符包含在断行行末插入两个回车和一个换行
16、,这是因为一行可容纳的文字有限。而一个硬断行符包含一个回车和一个断行。以硬断行符结束的行不受FmtLines的影响。仅在CEdit对象是一个多行编辑控件时Windows才响应此命令。FmtLines仅影响GetHandle返回的缓冲区和WM_GETTEXT返回的文本,而对编辑控件中的显示无影响。要了解更多信息,请参阅Win32文档中的EM_FMTLINES。请参阅CEdit:GetHandle, CWnd:GetWindowTextCEdit:GetFirstVisibleLineint GetFirstVisibleLine()const;返回值可视的最顶端行的行号(行号由0开始),对单行编
17、辑控件来说,返回值为0。说明调用此成员函数决定编辑控件中可视的最顶端行的行号。要了解更多信息,请参阅Win32文档中的EM_GETFIRSTVISIBLELINE。请参阅CEdit:GetLineCEdit:GetHandleHLOCAL GetHandle() const;返回值一个用于标识编辑控件内容的局部内存句柄。如果发生错误,例如发送信息到一个单行编辑控件,则返回值为0。说明调用此成员函数来获取一个多行编辑控件中当前分配的内存句柄。此句柄是一个局部内存句柄,可被任何局部Windows存储函数作为一个参数来获得。GetHandle仅仅被多行编辑控件处理。在一个多行编辑控件的对话框中调用此
18、成员函数时,对话框必须由DS_LOCAL-EDIT的样式标志集生成。如果不是,虽然也可以得到一个非零的返回值,但此返回值不可被使用。注意GetHandle不可在Windows 95下运行。如果在Windows 95下调用,会返回NULL。GetHandle可在Windows NT 3.51版及以上使用。要了解有关的更多信息,请参阅Win32文档中的EM_GETHANDLE。请参阅CEdit:SetHandleCEdit:GetLimitTextUINT GetLimitText() const;返回值对当前CEdit对象的文本大小限制,以字节计算。说明调用此成员函数来获取该CEdit对象的文本
19、大小限制,文本限制是此编辑控件可以接收的文本的最大长度(以字节计算)。注意此成员函数仅在Windows 95和Windows NT 4.0以上版本中可用。要了解更多信息,请参阅Win32文档中的EM_GETLIMITTEXT。请参阅CEdit:SetLimitText, CEdit:LimitTextCEdit:GetLineint GetLine(int nIndex, LPCTSTR lpszBuffer) const;int GetLine(int nIndex, LPCTSTR lpszBuffer, int nMaxLength) const;返回值实际拷贝的字节数。如果由nInde
20、x指定的行号大于此编辑控件的行数,则返回值为0。参数nIndex指定从多行编辑控件中检索的行的行号,行号由0指定。对单行编辑控件,此参数被忽略。lpszBuffer指向获取此行备份的缓冲区。缓冲区的第一个字必须指定能被拷贝到缓冲区的最大字节数。nMaxLength指定能被拷贝到缓冲区的最大字节数,GetLine在调用Windows之前将此值放置到lpszBuffer的第一个字中。说明调用此成员函数从编辑控件中获取文本的一行并将其放置到lpszBuffer缓冲区。被拷贝的行不包括空终止符。要了解更多信息,请参阅Win32文档中的EM_GETLINE。CEdit:GetLineCountInt G
21、etLineCount()const;返回值在多行编辑控件中的包含的一个整数总行数。如果没有向控件输入任何文本,则返回值为1。说明调用此成员函数获取一个多行编辑控件中的总行数。此函数仅应用于多行编辑控件。要了解更多信息,请参阅Win32文档中的EM_GETLINECOUNT。CEdit:GetMarginsDWORD GetMargins()const;返回值双字的低字位为左边距,高字位为右边距。说明调用此成员函数获取编辑控件的左右边距,以像素表示。注意此成员函数仅在Windows 95和Windows NT 4.0以上版本中可用。要了解更多信息,请参阅Win32文档中的EM_GETMARGI
22、NS。请参阅CEdit:SetMarginsCEdit:GetModifyBOOLGetModify()const返回值如果编辑控件的内容被改变,则返回值为非零,否则为0。说明调用此成员函数测试编辑控件的内容是否被改变。Windows有一个内部标记来表明编辑控件的内容是否被改变。当编辑控件首次被创建时此标记被清除,在调用SetModify成员函数时也被清除。要了解更多信息,请参阅Win32文档中的EM_GETMODIFY。请参阅CEdit:SetModifyCEdit:GetPasswordCharTCHAR GetPasswordChar()const;返回值指定在用户输入字符处显示的字符。
23、如果无密码,则返回NULL。说明调用此成员函数获取在用户输入密码时所显示的密码字符。如果编辑控件是用ES_PASSWORD风格建立的,则缺省的密码字符为一个星号(* )。要了解更多信息,请参阅Win32文档中的EM_GETPASSWORDCHAR。请参阅CEdit:SetPasswordCharCEdit:GetRectvoid GetRect(LPRECT lpRect)const;参数lpRect指向RECT结构以接收格式化矩形。说明调用此成员函数获取一个编辑控件的格式化矩形。此格式化矩形为文本的边界矩形,与编辑控件窗口的大小无关。多行编辑控件的格式化矩形可以被SetRect和SetRec
24、tNP成员函数改变。要了解更多信息,请参阅Win32文档中的EM_GETRECT。请参阅CEdit:SetRect, CEdit:SetRectNPCEdit:GetSelDWORD GetSel()const;void GetSel(int& nStartChar,int& nEndChar)const;返回值此版本返回一个双字,其低位字为起始位置,高位字为第一个未被选中的字符的位置。参数nStartChar指向当前选中部分的第一个字符位置,用整数表示。nEndChar指向第一个未被选中的字符的位置,用整数表示。说明调用此成员函数获取一个编辑控件中当前被选中部分(如果有)的起始和结束位置,可
25、用参数也可用返回值。要了解更多信息,请参阅Win32文档中的EM_GETSEL。请参阅CEdit:SetSelCEdit:LimitTextvoid LimitText(int nChars=0);参数nChars指定用户可以输入的文本的长度(以字节枚举)。如果参数为0,则长度设置为UINT_MAX个字节,这是缺省情况。说明调用此成员函数限定用户可以向编辑控件中输入的文本的长度。改变文本限定使用户能输入的文本受到限制,而对已在编辑控件中的文本没有影响,也不影响用CWnd中的SetWindowText成员函数能拷贝到编辑控件中的文本的长度。如果用SetWindowText函数输入的文本超过调用L
26、imitText函数所指定的值,则用户可以在编辑控件中删除任何文本,但文本限制会禁止用户将已存在的文本替换为新文本,直到删除当前所选文本而使文本大小降至限制以内。注意在Win32(Windows95和Windows NT)中,SetLimitText代替此函数。要了解更多信息,请参阅Win32文档中的EM_LIMITTEXT。请参阅CWnd:SetWindowsText,CEdit:GetLimitText,CEdit:SelLimitTextCEdit:LineFromCharInt LineFromChar(int nIndex=-1)const;返回值返回由nIndex指定的字符索引的行
27、号,此行号从0开始。如果nIndex为-1,则返回所选部分第一个字符的行号,如果无选定部分,则返回当前行号。参数nIndex包含编辑控件文本中所需字符的基于的索引值,或者包含-1。如果为-1则指定为当前行,即包含脱字符的行。说明调用此成员函数获取包含指定字符索引的行的行号,字符索引指编辑控件中从开始到指定字符的字符数。此成员函数仅适用于多行编辑控件。要了解更多信息,请参阅Win32文档中的EM_LINEFROMCHAR。请参阅CEdit:LineIndexCEdit:LineIndexInt LineIndex(int nLine=-1)const;返回值nLine所指定的行的字符索引。如果指
28、定的行号大于编辑控件的行数,则返回-1。参数nline包含编辑控件文本中所需字符的索引值(此索引由0开始),如果为-1则指定为当前行,即包含脱字符的行。说明调用此成员函数获取多行编辑控件中一行的字符索引,字符索引指从文本控件中文本开头到指定行的字符数。此成员函数仅适用于多行编辑控件。要了解更多信息,请参阅Win32文档中的EM_LINEINDEX。请参阅CEdit:LineFromCharCEdit:LineLengthInt LineLength(int nLine=-1)const;返回值当函数由多行编辑控件调用时,返回由nLine所指定的行的长度(以字节数表示);当函数由单行编辑控件调用
29、时,返回编辑控件中文本的长度(以字节数表示)。参数nLine指定要获取长度的行的字符索引。如果参数值为-1,表示当前行(即包含脱字符的行),不包括此行中被选中的部分文本的长度。LineLength在单行编辑控件调用时是被忽略的。说明调用此成员函数获取在编辑控件中一行的字符长度。调用此成员函数在多行编辑控件中获取一个指定了行号的行的字符索引。要了解更多信息,请参阅Win32文档中的EM_LINELENGTH。请参阅CEdit:LineIndexCEdit:LineScrollvoid LineScroll(int nLine,int nChars=0);参数nLine指定纵向滚动的行数。nChars指定水平滚动的字符数。如果编辑控件使用ES_RIGHT或ES_CENTE
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1