通过编写串口助手工具学习MFC过程——(六)添加Edit编辑框控件
通过编写串口助手工具学习MFC过程
因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉。这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅。做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然。另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008)
(六)添加Edit编辑框控件
属性说明:
Auto HScroll 设置True当编辑框输入的文字大于边框时自动水平方向增加。
Auto VScroll 设置True就可以实现每一行填满后自动换行了。
Vetrical Scroll属性设置为True,当输入或显示超过编辑框的大小后就会出现垂直滚动条。
Multiline 属性设置为True,多行使能,当编辑框输入的文字大于边框时可以向下换行。
ReadOnly 设置True只能显示和读取,不能做为输入编辑,可以使用SetWindowText显示。
添加控件、修改属性ID和增加变量部分略,参见按按钮部分。
1、Edit的基本功能:
SetWindowText()设置文本显示
GetWindowText()获取文本显示
这两个函数是API函数,多数控件均支持这两个函数。
2、实现特殊功能:自动换行,垂直滚动条自动下移
(1)将其Multiline属性设置为True,Auto HScroll属性设置False,Auto VScroll属性设置True,这样就可以实现每一行填满后自动换行了(Auto VScroll设置成Faile也可以实现 )。
(2)再将Vetrical Scroll属性设置为True,当输入或显示超过编辑框的大小后就会出现垂直滚动条。
(3)如果是输入,滚动条会自动移动跟随到当前输入行,但是如果是设置将很多内容一次性让编辑框显示,滚动条就会一直处于最上方,需要手动拉到最下面才能看见最后一行的内容,在很多时候这是我们不需要的,而是想要滚动条处于最下方,如下的代码将实现这一功能:
this->SetDlgItemTextW(IDC_ALLMSG_SHOW,allMsg);//将allMsg内容显示到ID为IDC_ALLMSG_SHOW的编辑框
m_showmsg.LineScroll(m_showmsg.GetLineCount());//m_showmsg为该编辑框的control变量名
(使用控件变量的一些成员函数设置滚动条的位置)
这个功能实现方法,以上内容 引用:http://blog.sina.com.cn/s/blog_5d2bad130100sysh.html
本例中实现显示的方法是SetWindowText。
m_EditRXData.SetWindowText(pCComSer->m_strRXData); //显示接收
m_EditRXData.LineScroll(m_EditRXData.GetLineCount());//EditRXData为该编辑框的control变量名(使用控件变量的一些成员函数设置滚动条的位置)
CEdit::LineScroll
void LineScroll(int nLine,int nChars = 0);
参数:
|
nLine |
指定纵向滚动的行数。 |
|
nChars |
指定水平滚动的字符数。如果编辑控件使用ES_RIGHT或ES_CENTER风格,此值无效。 |
说明:
调用此成员函数滚动多行编辑控件的文本。
此成员函数仅用于多行编辑控件。
编辑控件的纵向滚动不能超过该文本的最后一行,如果当前行号加上由nLines指定的行数超过编辑控件中的总行数,则它的值被调整而使得文本的最后一行滚动达到编辑控件窗口的顶端。
此函数可以水平滚动经过每行的最后一个字符。
3、实现特殊功能:限定Edit输入指定内容的代码
Update事件和 change事件都可以
void CserialtestDlg::OnEnUpdateEdit1()
{
// TODO: 如果该控件是RICHEDIT 控件,它将不
// 发送此通知,除非重写CDialog::OnInitDialog()
// 函数,以将EM_SETEVENTMASK 消息发送到该控件,
// 同时将ENM_UPDATE 标志“或”运算到lParam 掩码中。
// TODO: 在此添加控件通知处理程序代码
/*
CString strTemp=_T("");
edit1.GetWindowText(strTemp);
int len = strTemp.GetLength();
for (int i = 0; i < len; i ++)
{
if(strTemp.GetAt(i) <'0' || strTemp.GetAt(i) > '9')
{
strTemp = strTemp.Left(i);
edit1.SetWindowText(strTemp);
edit1.SetSel(i,i,TRUE);
AfxMessageBox(_T("输入数字不对!"));
return;
}
}
*/
}
void CserialtestDlg::OnEnChangeEdit1()
{
// TODO: 如果该控件是RICHEDIT 控件,它将不
// 发送此通知,除非重写CDialog::OnInitDialog()
// 函数并调用CRichEditCtrl().SetEventMask(),
// 同时将ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
CString strTemp=_T("");
TCHAR TxTmp ;
edit1.GetWindowText(strTemp);
int len = strTemp.GetLength();
for (int i = 0; i < len; i ++)
{
TxTmp = strTemp.GetAt(i);
if((TxTmp>=_T('0') && TxTmp <= _T('9'))|| (TxTmp>=_T('a') && TxTmp <= _T('f')) \
|| (TxTmp>=_T('A') && TxTmp <= _T('F')) || (TxTmp == _T(' ')))
{
;
}
else
{
//strTemp = strTemp.Left(i); // 从左取字串
strTemp.Delete(i,1); //现在还不太完善
m_EditTXData.SetWindowText(strTemp);
m_EditTXData.SetSel(i,i,TRUE);
AfxMessageBox(_T("请输入正确格式0-9 a-f A-F!"));
return;
}
}
}
这两个函数的实现方法完全一样,只是不同的事件类型,一个是update更新事件,一个是change改变事件,这两个事件均能实现,任选其一。
函数实现方法是从编辑框中获取文本内容,逐个字符检查是否是数字(此功能用于发送16进制数字时,禁止输入非数字的字符),检测到此字符后,将这个字符删除,并重新显示剩下的字符串,并设置编辑框中光标位置。
此函数中涉及了几个字符串CString类型的操作,这个是VC中的数据类型,相关操作请参考API,以后也会直接介绍。在VC操作中用这个类型操作字符串还是比较方便的,类似于JAVA的String类型。这里简单介绍一下这里用到的几个函数。
TCHAR TxTmp ;//TCHAR 与环境有关,Unicode字符集是Wchar,多字节字符集是char类型
CString strTemp=_T(""); //初始化 strTemp为空字符串。
int len = strTemp.GetLength(); //获取字符串的长度。不包含结尾的空字符。
TxTmp = strTemp.GetAt(i);
TCHAR GetAt( int nIndex ) const;
返回下标为nIndex的字符,与字符串的[]用法相同
strTemp = strTemp.Left(i); // 从左取字串 ,此句在此处的功能是,如在字符串的中间修改一个字符或插入一个字符不是数字的,从这个字符到后面的字符串都将删除,显然不够合理。
strTemp.Delete(i,1); //现在还不太完善
int Delete( int nIndex, int nCount = 1 )
删除字符,删除从下标nIndex开始的nCount个字符。
此句在此处的功能是从字符串中间删除一个字符,如果插入一个不是数字的字符,直接将此字符删除,但如果修改字符串中的一个字符使之成为非数字字符,直接将此字符删除,这样原来存在的字符也就删除了,虽然比上面的函数稍好一些,但也不是十分完美。
m_EditTXData.SetSel(i,i,TRUE); //将光标位置置于插入字符处
CEdit::SetSel
void SetSel(DWORD dwSelection, BOOL bNoScroll = FALSE);
void SetSel(int nStartChar, int nEndChar, BOOL bNoScroll = False);
参数:
|
dwSelection |
低位字指定起始位置,高位字为结束位置。如果低位为0,高位为-1,则编辑控件中的全部文本被选中;如果低位字为-1,则任何当前选定内容被去掉选定状态。 |
|
bNoScroll |
指示是否显示脱字符是滚动可见的。如果值为FALSE,则显示,TRUE不显示。 |
|
nStartChar |
指出当前选中部分的开始位置。如果nStartChar=0且nEndChar=-1,则编辑控件的文本被全选;如果nStartChar=-1,则任何当前选定内容被去掉选定状态。 |
|
nEndChar |
指出结束位置。 |
说明:
调用此成员函数在一个编辑控件中选择一定范围的字符。
AfxMessageBox(); MFC中的函数 ,弹出信息框用于显示。与WIN32 API的MessageBox()有些区别,具体可查寻相关资料。
通过编写串口助手工具学习MFC过程——(六)添加Edit编辑框控件的更多相关文章
- 通过编写串口助手工具学习MFC过程--(十一)弹出模态型对话框
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- 通过编写串口助手工具学习MFC过程——(十)UpdateData()用法和编辑框的赋值、取值
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- 通过编写串口助手工具学习MFC过程——(九)自动识别串口的方法
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- 通过编写串口助手工具学习MFC过程——(八)遇到的一些问题
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- 通过编写串口助手工具学习MFC过程——(七)添加Tab Control控件
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- 通过编写串口助手工具学习MFC过程——(五)添加CheckBox复选框
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- 通过编写串口助手工具学习MFC过程——(四)添加ComboBox组合框
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- 通过编写串口助手工具学习MFC过程——(三)Unicode字符集的宽字符和多字节字符转换
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- 通过编写串口助手工具学习MFC过程——(二)通过“打开串口”按钮了解基本操作
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
随机推荐
- aspnet:MaxHttpCollectionKeys 不起作用
场景: vs2010 webform 表单域长度,在webconfig中加入该节点,有的项目起作用,有的项目无效,不知道是什么原因??
- python – 如何禁用Django的CSRF验证?
如果只需要一些视图不使用CSRF,可以使用@csrf_exempt: from django.views.decorators.csrf import csrf_exempt @csrf_exempt ...
- new 做了什么
var a=function(){ this.che1 = function () { console.log(1) } this.che2 = function () { console.log(2 ...
- BZOJ 4517: [Sdoi2016]排列计数 错排 + 组合
从 $n$ 个数中选 $m$ 个不错排,那就是说 $n-m$ 个数是错排的. 用组合数乘一下就好了. Code: #include <cstdio> #include <algori ...
- MongoClient类
在2.10.0版本中引入了MongoClient类,同时在其API中也说明了Mongo类会在将来的版本中被MongoClient替换(Note: This class has been superse ...
- NOIP游(GUNCU)记
小学奥数不会做 状压DP打不出 一脸懵逼 本来抱着一个拿省一的心态去考的,结果DAY1刚开始就爆炸了. T1居然想了半个小时多没思路,然后打了个表,可能是应为太紧张了吧,居然打了表之后还没有看出规律来 ...
- Luogu P2678 跳石头
题目链接:Click here Solution: 最小值最大,显然二分,二分出mid后贪心去除石头,判断m次内是否可行即可 Code: #include<bits/stdc++.h> # ...
- Node.js 几个重启工程的工具
pm2, forever, nodemon, supervisor 均可在 npm 查找相关资料和用法. 线上工程推荐 pm2 开发推荐 supervisor
- C#获取网页信息并存入数据库
1,获取以及商品分类信息 给一网页获取网页上商品信息的分类 using Skay.WebBot; using System; using System.Collections.Generic; usi ...
- iOS 消息转发以及 NSProxy 实战
最后更新: 2018-01-17 一.消息派发机制-NSObject 在 iOS 开发中, 调用对象的方法就是给对象发送一个消息.了解消息的派发机制对于iOS开发来说是一个很实用且强大的工具, 下面我 ...