通过编写串口助手工具学习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()有些区别,具体可查寻相关资料。

时间: 2024-10-20 18:35:32

通过编写串口助手工具学习MFC过程——(六)添加Edit编辑框控件的相关文章

通过编写串口助手工具学习MFC过程&mdash;&mdash;(五)添加CheckBox复选框

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (五)添加CheckBox复选框 属性:Caption用于显示文本内容.

通过编写串口助手工具学习MFC过程&mdash;&mdash;(九)自动识别串口的方法

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (九)自动识别串口的方法 网上找了一下,找到两个介绍的较详细的,可用的方法

通过编写串口助手工具学习MFC过程&mdash;&mdash;(三)Unicode字符集的宽字符和多字节字符转换

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (三)Unicode字符集的宽字符和多字节字符转换 在上一节<(二)通过&qu

通过编写串口助手工具学习MFC过程&mdash;&mdash;(七)添加Tab Control控件

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (七)添加Tab Control控件 要在对话框里添加标签页,点击标签页上

通过编写串口助手工具学习MFC过程&mdash;&mdash;(四)添加ComboBox组合框

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (四)添加ComboBox组合框 ComboBox组合框有编辑框和下拉列表

通过编写串口助手工具学习MFC过程&mdash;&mdash;(八)遇到的一些问题

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (八)遇到的一些问题 本例中用到的控件就介绍完了,本节是在本例过程中遇到的

【mfc】组框、单选框控件与复选框控件

VC6中的MFC中的单选框与复选框控件也不简单,它没有VS中C#那样可以之间通过一个封装之后的函数进行判断,该单选框/复选框有没有被选中啊?或者控制单选框/复选框的选中状态.这东西比较复杂,通过相应的值来控制的. 一.基本目标 下面就用一个简单例子来说明VC6中的MFC中的单选框与复选框控件,点击"确定"按钮能够判断对话框中的所有单选框与复选框的选中状态.Radio1-Radio3互成一个组,组内仅能够有一个组员被选中,Radio4-Radio5也互成一组,选择Radio4能够令复选框

五、Android学习第四天补充——Android的常用控件(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的Android的几个常用控件的使用方法: 一.RadioGroup和RadioButton——单选按钮 二.Checkbox——复选框 三.Toast——提示框,会自动消失 四.ProgressBar——进度条工具 五.ListView——以列表形式将控件显示出来 下面就对这些内容做个详细的解释: 首

学习IOS开问题篇--视图的模型控件属性写在私有分类中的原因

在说原型模式之前,我们先来看java里面的深复制和浅复制: 1. 浅复制:被复制的对象的所有变量都持有和原来对象的变量相同的值,而所有的对其他对象的引用都指向原来的对象. 2. 深复制:被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他变量的对象.那些引用其他对象的变量将指向被复制过来的新对象,而不是原来那些被引用的对象.深复制需要把要复制的对象的所有引用都复制一遍. 这两者的区别就是关于引用对象的处理,浅复制是不考虑引用对象,而深复制需要考虑引用对象的问题. 对java中的clon