本人做一个接收GPRS数据的应用程序,需要将接收到数据显示在EDIT对话框IDC_EDIT3中,
目前采用的方法是每次有数据发送上来时,将网口数据读入CSting temp中,
再将对话框中现有数据读入CString str中(GetDlgItemText(IDC_EDIT3,str)),
然后str+=temp;SetDlgItemText(IDC_EDIT3,str);从而达到数据的显示。
但有一个问题是,我采用的是定时器方式来不停地读取数据,显示数据的。等对话框里数据较多时就会时常出现对话框死的现象。
我现在想,每一次并不将对话框中原有的数据读出,而是在其它后面(或者下一行)直接将新来数据显示出来。
不知道是否可以通过设置光标(插入符),再在光标处显示新数据的方式实现?
请高人指点。要是有其它更好的办法请指教,并指明实现方法。
最好有特定的函数或者代码。
谢谢。
目前采用的方法是每次有数据发送上来时,将网口数据读入CSting temp中,
再将对话框中现有数据读入CString str中(GetDlgItemText(IDC_EDIT3,str)),
然后str+=temp;SetDlgItemText(IDC_EDIT3,str);从而达到数据的显示。
但有一个问题是,我采用的是定时器方式来不停地读取数据,显示数据的。等对话框里数据较多时就会时常出现对话框死的现象。
我现在想,每一次并不将对话框中原有的数据读出,而是在其它后面(或者下一行)直接将新来数据显示出来。
不知道是否可以通过设置光标(插入符),再在光标处显示新数据的方式实现?
请高人指点。要是有其它更好的办法请指教,并指明实现方法。
最好有特定的函数或者代码。
谢谢。
int len=m_edit.GetWindowTextLength();
m_edit.SetFocus();
m_edit.SetSel(len,len);
m_edit.ReplaceSel(temp);
这意思???
EN_CHANGE
void SetSel( int nStartChar, int nEndChar, BOOL bNoScroll = FALSE );
nStartChar和nEndChar都传你当前文本的长度就行。
你也不用读,完全可以将edit控件的变量定义为cstring,就第一次读,然后以后有数据就是往这个变量中append而已,当然,你要保证每次添加的内容都是正确的,这样每次只需要append,然后setwindowtext就可以了。
Compiling...
TestDlg.cpp
E:\F\myVCproject\0420\BoleKuailai\TestDlg.cpp(121) : error C2228: left of '.GetWindowTextLengthA' must have class/struct/union type
E:\F\myVCproject\0420\BoleKuailai\TestDlg.cpp(122) : error C2228: left of '.SetFocus' must have class/struct/union type
E:\F\myVCproject\0420\BoleKuailai\TestDlg.cpp(123) : error C2228: left of '.SetSel' must have class/struct/union type
E:\F\myVCproject\0420\BoleKuailai\TestDlg.cpp(124) : error C2228: left of '.ReplaceSel' must have class/struct/union type
Error executing cl.exe.BoleKuailai.exe - 4 error(s), 0 warning(s)
已经解决问题了,我也是按着报错一步步试着改的,具体是什么原因,其实我也不大清楚。我采用了一楼的解决方法,谢谢大家的回帖。好人有好报。
解决结果如下:
CString temp="";
GetDlgItemText(IDC_EDIT2,temp);//读取需要显示的新数据
int len=GetDlgItem(IDC_EDIT3)->GetWindowTextLength();
GetDlgItem(IDC_EDIT3)->SetFocus();
((CEdit*)GetDlgItem(IDC_EDIT3))->SetSel(len,len);
((CEdit*)GetDlgItem(IDC_EDIT3))->ReplaceSel(temp); 我以前也打算采用多线程来解决实时显示的问题,可惜看了近二十天书,看明白了,实现起来却束手无策。回头把这个东西详细写个贴子,请大家来指点一下如何实现多线程。再次感谢大家。