编辑类控件

   以窗口类名"EDIT"创建的编辑类控件是一个可以用来接受用户键盘字符输入的矩形区域,可以在其内进行编辑操作。该控件是程序接受用户字符输入的一种主要手段,输入的内容存放在其父窗口容量有限的(32KB)局部堆中。

  MFC的CEdit类提供了有关编辑类控件的功能函数。编辑控件既可以在对话框模板上创建也可以通过代码来直接创建,这两种方式均要通过CEdit的构造函数来构造一个CEdit对象。CEdit类从CWnd继承了一些重要的函数,比如可以通过使用CWnd类成员函数SetWindowText()和GetWindowText()来设定和获取一个编辑控件中的文本。同按钮类控件类似,如果要处理由编辑控件发送给其父窗口的通知消息,需要在父窗口类中为每一个待处理消息增添消息映射入口和消息响应函数。

  在调用Create()函数创建编辑控件时,Windows系统将发出WM_NCCREATE、WM_NCCALCSIZE、WM_CREATE和WM_GETMINMAXINFO等消息给编辑控件。这些消息缺省地分别由OnNcCreate()、OnNcCalcSize()、OnCreate()和OnGetMinMaxInfo()等CWnd类成员函数进行处理,可以根据实际需要对其进行重载使用。作为一种特殊的窗口,编辑控件除了需要指定普通窗口风格外,还可以通过选用不同的控件风格而获取相应的功能效果,可选用的编辑风格列表如下:

编辑风格说明
ES_AUTOHSCROLL当在行尾添加一个字符后自动向右滚动10个字符。
ES_AUTOVSCROLL当输入回车后自动上滚一行。
ES_CENTER字符居中显示。
ES_LEFT字符左对齐。
ES_LOWERCASE统一转化为小写字母。
ES_MULTILINE允许多行显示。
ES_NOHIDESEL当编辑失去焦点时隐藏对字符的选定,重新获得焦点后以反色显示选中内容。
ES_OEMCONVERT将ANSI字符转化为OEM字符。
ES_PASSWORD以星号显示字符,多用于回显密码。
ES_RIGHT字符右对齐
ES_UPPERCASE统一转化为大写字母。
ES_READONLY设置字符为只读。
ES_WANTRETURN 接受回车键输入。

  下面给出创建、用编辑控件的示例代码,该示例首先通过Create()函数创建一个控件对象,并通过SetWindowText()函数为其设置字符。通过添加对控件通知消息的响应代码可以检测文本是否发生了改变。程序主要实现清单如下:

// 控件的创建部分:
// 创建编辑控件
m_ctrEdit.Create(WS_VISIBLE | WS_CHILD | WS_BORDER | ES_WANTRETURN | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, CRect(10, 50, 250, 150), this, ID_EDIT1);
// 为控件设置字符
m_ctrEdit.SetWindowText("Hello World!");
……
// 添件对控件通知消息的响应
//{{AFX_MSG(CSample02View)
afx_msg void OnEnChange();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
……
BEGIN_MESSAGE_MAP(CSample02View, CView)
//{{AFX_MSG_MAP(CSample02View)
ON_EN_CHANGE(ID_EDIT1, OnEnChange)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
……
void CSample02View::OnEnChange()
{
// 通知消息响应代码
AfxMessageBox("内容已改变!");
}

 

 

 

 
编辑框(Edit)控件实际上是一个简易的文本编辑器,用户可以在编辑框中输入可添加或插入文本。还有复制、粘贴、剪切、删除等编辑功能。
  应用程序用CreateWindowEx创建编辑框控件时,可根据控件的用途在下表中选择部份常数来设定其风格属性(style)。
常数说明
ES_MULTILINE多行文本,指定编辑控件可以多行文本编辑,用户每按一次Enter,在当前光标次输入一个回车换行符(0Dh,0Ah),文本增加一行。
ES_LEFT文本显示居左。
ES_CENTER文本显示居中。
ES_RIGHT文本显示居右。
ES_LOWERCASE把用户输入的字母统统转换成小写字母。
ES_UPPERCASE把用户输入的字母统统转换成大写字母。
ES_OEMCONVERT使编辑框中的正文可以在ANSI字符集和OEM字符集之间相互转换。这在编辑框中包含文件名时是很有用的。
ES_AUTOHSCROLL当用户在行尾键入一个字符时,正文将自动向右滚动10个字符,当用户按回车键时,正文总是滚向左边。
ES_AUTOVSCROLL当用户在最后一个可见行按回车键时,正文向上滚动一页。
ES_NUMBER只接收数码输入,其它字符输入一律无效。
ES_NOHIDESEL当编辑框失去输入焦点,正文中的选择保持不变,缺省时正文中的选择将失效。
ES_READONLY将编辑框设置成只读的。
ES_PASSWORD使所有键入的字符都用“*”来显示。
ES_WANTRETURN使多行编辑器接收回车键输入并换行。如果不指定该风格,按回车键会选择缺省的命令按钮,这往往会导致对话框的关闭。

  当用户在编辑控件上进行各种操作时,其父窗口将收到WM_COMMAND通知消息,同时wParam的低16位带控件的ID。lParam带控件句柄(hWnd),wParam的高16位带有如下表的消息代码。
消息代码用户操作
EN_CHANGE编辑框的内容被用户改变了。与EN_UPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的。
EN_ERRSPACE编辑框控件无法申请足够的动态内存来满足需要。
EN_HSCROLL用户在水平滚动条上单击鼠标。
EN_KILLFOCUS编辑框失去输入焦点。
EN_MAXTEXT输入的字符超过了规定的最大字符数。在没有ES_AUTOHSCROLL或ES_AUTOVSCROLL的编辑框中,当正文超出了编辑框的边框时也会发出该消息。
EN_SETFOCUS编辑框获得输入焦点。
EN_UPDATE在编辑框准备显示改变了的正文时发送该消息。
EN_VSCROLL用户在垂直滚动条上单击鼠标。

  应用程序可以通过调用SendMessage向控件发送如下消息来设定和查询控件各种参数。
uMsgwParamlParam说明
EM_UNDO00撤消前一次在控件的编辑操作,当重复发送本消息,控件将在撤消和恢复中来回切换。
EM_CANUNDO00检测控件撤消缓冲区是否为空,通常控件把最后一次在控件的编辑操作保存在一个撤消缓冲区,如果缓冲区非空则返回TRUE表示上次操作可以撤消,否则返回FALSE,应用程序可以利用该返回值来禁止或允许菜单或工具条的“撤消”项。
EM_EMPTYUNDOBUFFER00清除控件的撤消缓冲区,使其不能撤消前一次编辑操作。
EM_REPLACESELTRUE或FALSE替换文本指针用指定文本替换编辑控件中的当前选定内容,如果wParam为TRUE,则本次操作允许撤消,FALSE禁止撤消。
EM_SETSEL起点终点设置编辑控件中文本选定内容范围,该范围被高亮度显示,用于为复制、替换、粘贴、剪切、删除等编辑功能指定范围。使用本功能,键盘光标将被移至指定的终点后面,通常使用指定相同起点和终点来移动键盘光标而不选定范围。当指定的起点等于0和终点等于-1时,全文全部被选中,此法常用在清空编辑控件。当指定的起点等于-2和终点等于-1时,全文均不选,键盘光标移至文本未端,此法常用在文本未端追加内容。注意:当控件没有输入焦点时,本操作将会失败,一般在执行本操作前都应调用SetFocus先取得输入焦点。
EM_GETSEL起点缓冲地址
或NULL
终点缓冲地址
或NULL
取得编辑控件中选定内容的范围,返回值中低16位为起点与高16位为终点,如果wParam和lParam中指定了地址,则会在该地址填入相应值(dword)。本操作也常用来求取键盘光标位置。
EM_CHARFROMPOS0位置取得指定位置处的字符相对于文本头部的偏移,使用本操作应先在lParam的高16位指定行号,低16位指定列号,行列是按编辑控件的客户区左上角为原点(0,0)计算的。如果指定的位置超出控件客户区则返回-1
EM_FMTLINESTRUE或FALSE0决定是否在取回的文本宇串中包含软回车字符
EM_GETFIRSTVISIBLELINE00取得编辑控件中显示的第一行
EM_GETHANDLE00取得编辑控件文本缓冲区。
EM_GETLIMITTEXT00获取一个编辑控件中文本的最大长度
EM_GETLINE行号缓冲地址从编辑控件取回一行的内容,缓冲区第一个字(word)必须先填写缓冲区的长度,
EM_GETLINECOUNT00取得一个编辑控件的总行数
EM_GETMARGINS00获取编辑控件的左、右边距,返回值低16位为左边距,高16位为右边距
EM_GETMODIFY00取编辑控件的修改标志,返回 TRUE则控件文本已被修改,返回FALSE则未变。此值可以来决定是否提示用户存盘。
EM_GETPASSWORDCHAR00取得编辑控件用来显示密码的字符,返回NULL表示没有字符。
EM_GETRECT0RECT结构地址获取一个编辑控件的格式化矩形
EM_GETTHUMB00取得多行文本编辑控件的滚动框的当前位置。
EM_GETWORDBREAKPROC00取得整字换行回调函数EditWordBreakProc指针。
EM_LIMITTEXT最大值0限制编辑中文本的最大长度
EM_LINEFROMCHAR字符偏移0取得指定的字符偏移处的行号。
EM_LINEINDEX行号0取得指定行第一个字符偏移
EM_LINELENGTH字符偏移0取得指定字符偏移处对应的一行长度字符数。
EM_LINESCROLL列字符行数滚动编辑控件
EM_POSFROMCHARPOINT结构地址字符偏移取得指定字符偏移的显示位置行列号,行列是按编辑控件的客户区左上角为原点(0,0)计算的。字符偏移是相对于文本头部的偏移。
EM_SCROLLSB_LINEDOWN
SB_LINEUP
SB_PAGEDOWN
SB_PAGEUP
0编辑框显示文本垂直滚动。滚动方向:SB_LINEDOWN向下滚动一行,SB_LINEUP向上滚动一行,SB_PAGEDOWN向下滚动一页,SB_PAGEUP向上滚动一页。
EM_SCROLLCARET00把键盘光标移至可见范围。
EM_SETHANDLE缓冲区指针0为编辑控件指定新的文本缓冲区。此操作仅适用对话框创建带DS_LOCALEDIT风格的控件。
EM_SETLIMITTEXT长度(字节)0限制编辑控件中的文本缓冲区最大长度。
EM_SETMARGINSEC_LEFTMARGIN
EC_RIGHTMARGIN
EC_USEFONTINFO
边距设置编辑控件的左、右边距,当wParam含EC_LEFTMARGIN时在lParam的低16位指定左边距点数,当wParam含EC_RIGHTMARGIN时在lParam的高16位指定右边距点数。当指定wParam为EC_USEFONTINFO时,则用当前字体的字符"A"的宽度指定右边距和字符"C"的宽度指定左边距lParam被忽略。
EM_SETMODIFYTRUE或FALSE0用于设置或清除一个编辑控件的修改标志
EM_SETPASSWORDCHAR字符0指定控件用来显示密码字符,缺省为“*”。当wParam为0时,本操作将清除控件的ES_PASSWORD风格,并按实际字符显示。
EM_SETREADONLYTRUE或FALSE0决定是否将编辑控件设为只读,同时决定控件的ES_READONLY风格
EM_SETRECT0RECT结构地址为一个编辑控件设置格式化矩形
EM_SETRECTNP0RECT结构地址与EM_SETRECT类似,只是控件此时不会重画
EM_SETTABSTOPS制表站数站距表地址设置编辑控件中的制表站间距,当制表站数为0时lParam被忽略,所有制表站距均为32个对话框单位,当制表站数不为0时lParam指向一个由32位(dword)组成的站距表,以对话框单位为宽度计算单位。
EM_SETWORDBREAK00本操作现已不支持,请使用EM_SETWORDBREAKPROC。
EM_SETWORDBREAKPROC0函数入口地址设置整字换行回调函数EditWordBreakProc指针。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值