编辑框Edit control.docx
- 文档编号:1351319
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:13
- 大小:34.58KB
编辑框Edit control.docx
《编辑框Edit control.docx》由会员分享,可在线阅读,更多相关《编辑框Edit control.docx(13页珍藏版)》请在冰点文库上搜索。
编辑框Editcontrol
首页 » 软件开发 » VS2010/MFC编程入门之二十一(常用控件:
编辑框EditControl)
VS2010/MFC编程入门之二十一(常用控件:
编辑框EditControl)
分类标签:
编程入门 VS2010 VC++ MFC
鸡啄米上一节讲了静态文本框,本节要讲的编辑框(EditControl)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本。
在前面加法计算器的例子中已经演示了编辑框的基本应用。
下面具体讲解编辑框的使用。
编辑框的通知消息
编辑框发生某些事件时会向父窗口发送通知消息。
在对话框模板中的编辑框上点右键,选择“AddEventHandler”,为编辑框添加消息处理函数时,可以在“Messagetype”列表中看到这些消息。
下面简单介绍编辑框的部分通知消息。
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成员函数的原型如下:
virtualBOOLCreate(
DWORDdwStyle,
constRECT&rect,
CWnd*pParentWnd,
UINTnID
);
参数说明:
dwStyle:
指定编辑框的风格。
可以是MSDN中“editstyles”包含风格的任意组合。
下面是“editstyles”的所有风格说明。
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风格,WantReturn属性对应ES_WANTRETURN风格。
其他三个参数与静态文本框的Create函数的参数类似,就不介绍了。
CEdit类的主要成员函数
使用编辑框最重要的莫过于,获取和设置编辑框中的正文,它们对应的成员函数分别是GetWindowText和SetWindowText,这两个函数都是继承自CWnd类的成员函数,另外,还可以使用CWnd类的GetWindowTextLength函数获取编辑框中正文的长度。
下面简单介绍CEdit类的其他几个主要的成员函数:
intLineFromChar(intnIndex=–1)const;
返回多行编辑框中指定索引的字符所在行的行号(从零开始),只适用于多行编辑框。
nIndex等于-1则返回所选择正文的第一个字符所在行的索引。
如果没有选择正文,则返回当前行的行号。
intLineIndex(intnLine=–1)const;
返回由nLine指定行的起始字符在编辑框的整个字符串中的索引,只适用于多行编辑框。
如果指定行超过编辑框的最大行数,则返回-1,而如果nLine为-1,则返回当前插入符所在行的起始字符的索引。
voidGetSel(int&nStartChar,int&nEndChar)const;
获取选择正文的索引范围。
nStartChar返回被选择正文的起始索引,nEndChar返回被选择正文的终止索引(不包括在选择范围内)。
如果没有选择正文,则两者均为当前插入符的索引。
voidSetSel(intnStartChar,intnEndChar,BOOLbNoScroll=FALSE);
选择编辑框中的正文。
nStartChar为选择开始处的索引,nEndChar为选择结束处的索引。
如果nStartChar为0并且nEndChar为-1,则选择所有正文,而如果nStartChar为-1则取消所有选择。
bNoScroll为FALSE时滚动插入符并使之可见,为TRUE时不滚动。
voidReplaceSel(LPCTSTRlpszNewText,BOOLbCanUndo=FALSE);
用lpszNewText指向的字符串来替换选择的正文。
如果bCanUndo为TRUE则替换可以被撤销。
intGetLineCount()const;
获取正文的行数,只适用于多行编辑框。
如果编辑框没有正文则返回1。
intLineLength(intnLine=–1)const;
获取指定字符索引所在行的字节长度(行尾的回车和换行符不计算在内),参数nLine说明了为字符索引。
如果nLine的值为-1,则函数返回当前行的长度(假如没有正文被选择),或选择正文占据的行的字符总数减去选择正文的字符数(假如有正文被选择)。
若用于单行编辑框,则函数返回整个正文的长度。
intGetLine(intnIndex,LPTSTRlpszBuffer)const;
intGetLine(intnIndex,LPTSTRlpszBuffer,intnMaxLength)const;
用来获得指定行的正文(不包括行尾的回车和换行符),只适用于多行编辑框。
参数nIndex是行号,lpszBuffer指向存放正文的缓冲区,nMaxLength规定了拷贝的最大字节数。
若指定的行号小于编辑框的实际行数,函数返回实际拷贝的字节数,若指定的行号大于编辑框的实际行数,则函数返回0。
需要注意的是,GetLine函数不会在缓冲区中字符串的末尾添加字符串结束符(NULL)。
UINTGetLimitText()const;
获取编辑框能够接受的正文的最大字节数。
voidLimitText(intnChars=0);
设置用户在编辑框中可以输入的正文的最大长度(字节数)。
如果nChars为0,则最大长度为UINT_MAX个字节。
CEdit类应用实例
下面鸡啄米为大家写一个简单的例子,来说明CEdit类的几个成员函数的使用方法。
此例的功能是,首先在编辑框中显示一行正文,然后替换其中部分字符为另一个含有回车符的字符串,最终显示为两行正文。
下面是简单的步骤介绍:
1.创建基于对话框的MFC程序,名称为“Example21”。
2.在自动生成的对话框模板IDD_EXAMPLE21_DIALOG中,删除静态文本框“TODO:
Placedialogcontrolshere.”,添加一个编辑框,ID设为IDC_MULTI_LINE_EDIT,属性Multiline设置为true。
3.为编辑框IDC_MULTI_LINE_EDIT添加CEdit类型的控件变量m_editMultiLine。
4.修改CExample21Dlg:
:
OnInitDialog()函数为:
C++代码
1.BOOL CExample21Dlg:
:
OnInitDialog()
2.{
3. CDialogEx:
:
OnInitDialog();
4.
5. // Add "About..." menu item to system menu.
6.
7. // IDM_ABOUTBOX must be in the system command range.
8. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
9. ASSERT(IDM_ABOUTBOX < 0xF000);
10.
11. CMenu* pSysMenu = GetSystemMenu(FALSE);
12. if (pSysMenu !
= NULL)
13. {
14. BOOL bNameValid;
15. CString strAboutMenu;
16. bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
17. ASSERT(bNameValid);
18. if (!
strAboutMenu.IsEmpty())
19. {
20. pSysMenu->AppendMenu(MF_SEPARATOR);
21. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
22. }
23. }
24.
25. // Set the icon for this dialog. The framework does this automatically
26. // when the application's main window is not a dialog
27. SetIcon(m_hIcon, TRUE); // Set big icon
28. SetIcon(m_hIcon, FALSE); // Set small icon
29.
30. // TODO:
Add extra initialization here
31. m_editMultiLine.SetWindowText(_T("鸡啄米博客/software")); // 设置编辑框正文为“鸡啄米博客.com”
32. m_editMultiLine.SetSel(3, 5); // 选择起始索引为3,终止索引为5(不包括在选择范围内)的正文,即“博客”
33. m_editMultiLine.ReplaceSel(_T("\r\")); // 将选择的“博客”替换为“\r\”
34.
35. return TRUE; // return TRUE unless you set the focus to a control
36.}
5.编译运行程序,结果对话框如下:
首页 » 软件开发 » VS2010/MFC编程入门之二十一(常用控件:
编辑框EditControl)
VS2010/MFC编程入门之二十一(常用控件:
编辑框EditControl)
分类标签:
编程入门 VS2010 VC++ MFC
鸡啄米上一节讲了静态文本框,本节要讲的编辑框(EditControl)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本。
在前面加法计算器的例子中已经演示了编辑框的基本应用。
下面具体讲解编辑框的使用。
编辑框的通知消息
编辑框发生某些事件时会向父窗口发送通知消息。
在对话框模板中的编辑框上点右键,选择“AddEventHandler”,为编辑框添加消息处理函数时,可以在“Messagetype”列表中看到这些消息。
下面简单介绍编辑框的部分通知消息。
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成员函数的原型如下:
virtualBOOLCreate(
DWORDdwStyle,
constRECT&rect,
CWnd*pParentWnd,
UINTnID
);
参数说明:
dwStyle:
指定编辑框的风格。
可以是MSDN中“editstyles”包含风格的任意组合。
下面是“editstyles”的所有风格说明。
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风格,WantReturn属性对应ES_WANTRETURN风格。
其他三个参数与静态文本框的Create函数的参数类似,就不介绍了。
CEdit类的主要成员函数
使用编辑框最重要的莫过于,获取和设置编辑框中的正文,它们对应的成员函数分别是GetWindowText和SetWindowText,这两个函数都是继承自CWnd类的成员函数,另外,还可以使用CWnd类的GetWindowTextLength函数获取编辑框中正文的长度。
下面简单介绍CEdit类的其他几个主要的成员函数:
intLineFromChar(intnIndex=–1)const;
返回多行编辑框中指定索引的字符所在行的行号(从零开始),只适用于多行编辑框。
nIndex等于-1则返回所选择正文的第一个字符所在行的索引。
如果没有选择正文,则返回当前行的行号。
intLineIndex(intnLine=–1)const;
返回由nLine指定行的起始字符在编辑框的整个字符串中的索引,只适用于多行编辑框。
如果指定行超过编辑框的最大行数,则返回-1,而如果nLine为-1,则返回当前插入符所在行的起始字符的索引。
voidGetSel(int&nStartChar,int&nEndChar)const;
获取选择正文的索引范围。
nStartChar返回被选择正文的起始索引,nEndChar返回被选择正文的终止索引(不包括在选择范围内)。
如果没有选择正文,则两者均为当前插入符的索引。
voidSetSel(intnStartChar,intnEndChar,BOOLbNoScroll=FALSE);
选择编辑框中的正文。
nStartChar为选择开始处的索引,nEndChar为选择结束处的索引。
如果nStartChar为0并且nEndChar为-1,则选择所有正文,而如果nStartChar为-1则取消所有选择。
bNoScroll为FALSE时滚动插入符并使之可见,为TRUE时不滚动。
voidReplaceSel(LPCTSTRlpszNewText,BOOLbCanUndo=FALSE);
用lpszNewText指向的字符串来替换选择的正文。
如果bCanUndo为TRUE则替换可以被撤销。
intGetLineCount()const;
获取正文的行数,只适用于多行编辑框。
如果编辑框没有正文则返回1。
intLineLength(intnLine=–1)const;
获取指定字符索引所在行的字节长度(行尾的回车和换行符不计算在内),参数nLine说明了为字符索引。
如果nLine的值为-1,则函数返回当前行的长度(假如没有正文被选择),或选择正文占据的行的字符总数减去选择正文的字符数(假如有正文被选择)。
若用于单行编辑框,则函数返回整个正文的长度。
intGetLine(intnIndex,LPTSTRlpszBuffer)const;
intGetLine(intnIndex,LPTSTRlpszBuffer,intnMaxLength)const;
用来获得指定行的正文(不包括行尾的回车和换行符),只适用于多行编辑框。
参数nIndex是行号,lpszBuffer指向存放正文的缓冲区,nMaxLength规定了拷贝的最大字节数。
若指定的行号小于编辑框的实际行数,函数返回实际拷贝的字节数,若指定的行号大于编辑框的实际行数,则函数返回0。
需要注意的是,GetLine函数不会在缓冲区中字符串的末尾添加字符串结束符(NULL)。
UINTGetLimitText()const;
获取编辑框能够接受的正文的最大字节数。
voidLimitText(intnChars=0);
设置用户在编辑框中可以输入的正文的最大长度(字节数)。
如果nChars为0,则最大长度为UINT_MAX个字节。
CEdit类应用实例
下面鸡啄米为大家写一个简单的例子,来说明CEdit类的几个成员函数的使
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编辑框Edit control 编辑 Edit