MFC编程入门之二十一(常用控件:编辑框Edit Control)

摘要:
在上一节中,我们讨论了静态文本框。在本节中,我们说过编辑框也是非常常见的控件。我们可以在编辑框中输入和编辑文本。MFC为编辑框提供CEdit类。它可以是MSDN中“编辑样式”的任意组合。voidGetSelconst;获取所选正文的索引范围。如果nStartChar为0,而EndChar为-1,则选中所有实体,如果nStartChar为-1,将取消选中所有实体。如果用于单行编辑框,该函数将返回整行的长度。

  上一节讲了静态文本框,本节讲的是编辑框(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)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于win10系统如何调用debug查看CPU汇编指令和内存pytest文档40-pytest.ini配置用例查找规则(面试题)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

数据库之索引与慢查询优化

一、介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。 2.为什么要有索引呢? 索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。...

Python-正则

一:字符组 使用[],表示同一个位置可以匹配的字符 [0-9] :可以匹配到数字(同一位置) [a-z]:可以匹配小写字母 [A-Z]:可以匹配大写字母 [A-Za-z0-9] 可以匹配大小写字母和数字 二:元字符 .  可以匹配出了换行符以外的任意字符 w 可以匹配数字,字母和下划线 s  可以匹配任意空白符 d 可以匹配数字 可以匹配换行符 可以匹...

数据库模糊搜索时,关键字中有%号,怎么办?

  数据库模糊搜索时,关键字中有%号,怎么办?     数据库模糊搜索时,都知道应该用通配符%号来模糊匹配。如:select *from table where content like '%key%'。但当关键字key中也包含有%号时,应该怎么办?   数据库中有关键字:escape就是用来转换的。使用escape关键字定义转义符时,当转义符置于通配符之...

Elasticsearch入门和基本使用

1. 什么是Elasticsearch? Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统;Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。用于快速存储,搜索和海量数据分析; 2. Elasticsearch的优点 1)横向可扩展性:只需要增加一台机器,添加一些配置即可; 2)分片机制提供...

sql server维护解决方案(备份、检查完整性、索引碎片整理)

请务必看原文原文:https://ola.hallengren.com/frequently-asked-questions.html经常问的问题入门 如何开始使用SQL Server维护解决方案? SQL Server维护解决方案入门很容易。跟着这些步骤。 下载MaintenanceSolution.sql。 在脚本中,找到以下行:SET @Ba...

SqlLite 简明教程

SQL DML 和 DDL可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。注:"--"双减号为行注释SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。查询和更新指令构成了 SQL 的 DML 部分:SELECT - 从数据库表中获取数据UPDATE - 更新数据库表...