MFC编程入门之二十一(常用控件:编辑框Edit Control)
上一节讲了静态文本框,本节讲的是编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本。在前面加法计算器的例子中已经演示了编辑框的基本应用。下面具体讲解编辑框的使用。
编辑框的通知消息
编辑框发生某些事件时会向父窗口发送通知消息。在对话框模板中的编辑框上点击右键,选择“Add Event Handler”,为编辑框添加消息处理函数时,可以在"Message type"列表中看到这些消息。下面简单介绍编辑框的部分通知消息。
EN_CHANGE:编辑框的内容被用户改变了,与EN_UPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的。
EN_ERRSPACE:编辑框控件无法申请足够的动态内存来满足需要。
EN_HSCROLL:用户在水平滚动条上单击鼠标。
EN_KILLFOCUS:编辑框失去输入焦点。
EN_MAXTEXT:输入的字符超过了规定的最大字符数。在没有ES_AUTOHSCROLL或
ES_AUTOVSCROLL:的编辑框中,正文超出了编辑框的边框时也会发出该消息。
EN_SETFOCUS:编辑框获得输入焦点。
EN_UPDATE:在编辑框准备显示改变了的正文时发送改消息。
EN_VSCROLL:用户在垂直滚动条上单击鼠标。
编辑框的创建
MFC为编辑框提供了CEdit类。编辑框的所有操作都封装到了CEdit类中。
与静态文本框的创建类似,除了可以在对话框模板上拖进一个编辑框,然后关联一个变量或通过API函数使用,也可以在程序中动态创建编辑框,即调用CEdit类的成员函数CReate。Create成员函数的原型如下:
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);
参数说明:
dwStyle:指定编辑框的风格。可以是MSDN中"edit styles"包含风格的任意组合。下面是"edit styles"的所有风格说明。
ES_AUTOHSCROLL:当用户在行尾键入一个字符是,正文将自动向右滚动10个字符,当用户按回车键时,正文总是滚向左边。
ES_AUTOVSCROLL:当用户在最后一个可见行按回车键时,正文向上滚动一页。
ES_CENTER:在多行编辑框中使用正文居中。
ES_LEFT:左对齐正文。
ES_LOWERCASE:把用户输入的字母统统转换成小写字母。
ES_MULTILINE:指定一个多行编辑器。若多行编辑器不指定ES_AUTOHSCROLL风格,则会自动换行,若不指定ES_AUTOVSCROLL,则多行编辑器会在窗口中正文装满时发出警告声响。
ES_NOHIDESEL:默认时,当编辑框失去输入焦点会隐藏所选的正文,当获得输入焦点时又显示出来。设置该风格可禁止这种默认行为。
ES_NUMBER:编辑框中只允许输入数字。
ES_OEMCONVERT:使用编辑框中的正文可以在ANSI字符集和OEM字符集之间相互转换。这在编辑框中包含文件名时是很有用的。
ES_PASSWORD:使所有键入的字符都用"*"来显示。
ES_READONLY:将编辑框设置成只读的。
ES_RIGHT:右对齐正文。
ES_UPPERCASE:把用户输入的字母统统转换成大写字母。
ES_WANTRETURN:使多行编辑器接收回车键输入并换行。如果不指定该风格,按回车键会选择默认的命令按钮,这往往会导致对话框的关闭。
除了上面的风格外,编辑框一般还会设置WS_CHILD、WS_VISIBLE、WS_BORDER等窗口风格。另外,编辑框可以是多行的,也就是在编辑框中显示多行文字,这就需要设置ES_MULTILINE风格,如果想要多行编辑框支持回车键,则还要设置ES_WANTRETURN。
对于在对话框模板中创建编辑框,它的属性中包含了上述的风格,例如,Multiline属性对应的就是ES_MULTILINE风格,Want Return属性对应ES_EANTRETURN风格。
其他三个参数与静态文本框的Create函数的参数类似,就不介绍了。
CEdit类的主要成员函数
使用编辑框最重要的莫过于,获取和设置编辑框中的正文,它们对应的成员函数分别是GetWindowText和SetWindowText,这两个函数都是继承自CWnd类的成员函数,另外,还可以使用CWnd类的GetWindowTextLength函数获取编辑框中的正文的长度。
下面简单介绍CEdit类的其他几个主要的成员函数:
int LineFromChar(int nIndex = -1) const;
返回多行编辑框中指定索引的字符所在行的行号(从零开始),只适用用于多行编辑框。nIndex等于-1则返回所选择正文的第一个字符所在行的索引。如果没有选择正文,则返回当前行的行号。
int LineIndex(int nLine = -1) const;
返回由nLine指定行的起始字符在编辑框的整个字符串中的索引,只适用于多行编辑框。如果制定行超过编辑框的最大行数,则返回-1,如果nLine为-1,则返回当前插入符所在行的起始字符的索引。
void GetSel(int& nStartChar, int& nEndChar) const;
获取选择正文的索引范围。nStartChar返回被选择正文的起始索引,nEndChar返回被选择正文的终止索引(不包括在选择范围内)。如果没有选择正文,则两者均为当前插入符的索引。
void SetSel(int& nStartChar, int& nEndChar) const;
选择编辑框中的正文。nStartChar为选择开始处的索引,nEndChar为选择结束处的索引。如果nStartChar为0并且nEndChar为-1,则选择所有正文,而如果nStartChar为-1则取消所有选择。bNoScroll为FALSE时滚动插入符并使之可见,为TRUE时不滚动。
void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE);
用lpszNewText指向的字符串来替换选择的正文。如果bCanUndo为TRUE则替换可以被取消。
int LineLength(int nLine = -1) const;
获取指定字符索引所在行的字节长度(行尾的回车和换行符不计算在内),参数nLine说明了为字符索引。如果nLine的值为-1,则函数返回当前行的长度(假如没有正文被选择),或选择正文占据的行的字符总数减去选择正文的字符数(假如有正文被选择)。若用于单行编辑框,则函数返回整个行的长度。
int GetLine(int nIndex, LPCTSTR lpszBuffer) const;
int GetLine(int nIndex, LPCTSTR lpszBuffer, int nMaxLength) const;
用来获得指定的正文(不包括行尾的回车和换行符),只适用于多行编辑框。参数nIndex是行号,lpszBuffer指向存放正文的缓冲区,nMaxLength规定了拷贝的最大字节数。若指定的行号小于编辑框的实际行数,函数返回实际拷贝的字节数,若指定的行号大于编辑框的实际行数,则函数返回0。需要注意的是,GetLine函数不会在缓冲区中字符串的末尾添加字符串结束符(NULL)。
UINT GetLimitText() const
获取编辑框能够接受的正文的最大字节数。
void LimitText(int nChars = 0);
设置用户在编辑框中可以输入的正文的最大长度(字节数)。如果nChars为0,则最大长度为UINT_MAX个字节。如果nChars为0,则最大长度为UINT_MAX个字节。
MFC编程入门之二十一(常用控件:编辑框Edit Control)的更多相关文章
- VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)
前面两节为大家讲了列表视图控件List Control,这一节开始介绍一种特殊的列表--树形控件Tree Control. 树形控件简介 树形控件在Windows系统中是很常见的,例如资源管理器左侧的 ...
- VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)
上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分. 标签控件的创建 MFC为标签控件的操作提供了CTabCtrl类. 与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Con ...
- VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)
鸡啄米上一节讲了静态文本框,本节要讲的编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子中已经演示了编辑框的基本应用.下面具体讲解编辑框 ...
- VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)
VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)-软件开发-鸡啄米 http://www.jizhuomi.com/software/141.html 上一讲中讲了VS20 ...
- VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)
前面一节中,鸡啄米讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用. 列表视图控件简介 列表视图控件List Control同样比较常见, ...
- MFC编程入门之二十八(常用控件:列表视图控件List Control上)
前面一节中,讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用. 列表视图控件简介 列表视图控件List Control同样比较常见,它能够把任何字符 ...
- VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)
上一节VS2010/MFC编程入门教程中鸡啄米讲了按钮控件Button.Radio Button和Check Box的基本用法,本节就继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件 ...
- MFC编程入门之二十五(常用控件:组合框控件ComboBox)
上一节讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如,在Windows系统的控制面板上设置语言或位置时,有很多选项,用来进行选择的控件就是组合框 ...
- MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)
本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的侠义的 ...
随机推荐
- 如何防止sql注入
注入法: 从理论上说,认证网页中会有型如: select * from admin where username='XXX' and password='YYY' 的语句,若在正式运行此句之前,如果没 ...
- linux安全运维之谁动了chattr
安全一直是老生常谈的问题,今天我们来谈谈chattr. 如果涉及到侵权问题:请联系w18030432178@outlook.com,我会尽快删除帖子 目录 0.chattr的简介 0.0 chattr ...
- win下命令行替代品Cmder
Cmder简单使用小结 Cmder是一款Windows环境下非常简洁美观易用的cmd替代者,它支持了大部分的Linux命令. 从官网下载下来一个zip安装包,解压之后运行根目录的Cmder.exe即可 ...
- [转]LocalDB数据库修改排序规则,修复汉字变问号
VS中新增的轻量级数据库LocalDB,有个这个,开发人员就不必再安装庞大的SQL server了,可以方便地测试运行小型项目:既然是轻量级数据库,它抛弃了庞大的身躯,功能上当然也会受到局限,其中之一 ...
- MAC OS UI设计
对比MAC OS 10.9到10.11的UI设计,苹果曾经卓尔不群的审美观逐步变得泯然众人. 当苹果也跟上扁平化的浪潮,许多搞设计的朋友都一时难以接受,曾经潮流的引领者变成了亦步亦趋的跟随者. MAC ...
- Xcode插件描述
Xcode插件 Xcode是iOS的集成开发环境,虽然苹果一直在不断改进Xcode,但程序员总是有各种新奇的想法和需求,当Xcode无法满足他们时,于是他们就会通过插件的方式来为Xcode增加新的功能 ...
- HttpGet 请求(带参数)
package com.example.util; import java.io.BufferedReader;import java.io.IOException;import java.io.In ...
- ASP.NET MVC异常处理
ASP.NET MVC异常处理方案 如何保留异常前填写表单的数据 ASP.NET MVC中的统一化自定义异常处理 MVC过滤器详解 MVC过滤器使用案例:统一处理异常顺道精简代码 ASP.NET MV ...
- spring @condition 注解
spring @condition注解是用来在不同条件下注入不同实现的 demo如下: package com.foreveross.service.weixin.test.condition; im ...
- Hadoop集群datanode磁盘不均衡的解决方案
一.引言: Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点,节点与节点之间磁盘大小不一样等等.当hdfs出现不平衡状况的时候,将引发很多问题,比 ...