本人做一个接收GPRS数据的应用程序,需要将接收到数据显示在EDIT对话框IDC_EDIT3中,
目前采用的方法是每次有数据发送上来时,将网口数据读入CSting temp中,
再将对话框中现有数据读入CString str中(GetDlgItemText(IDC_EDIT3,str)),
然后str+=temp;SetDlgItemText(IDC_EDIT3,str);从而达到数据的显示。
但有一个问题是,我采用的是定时器方式来不停地读取数据,显示数据的。等对话框里数据较多时就会时常出现对话框死的现象。
我现在想,每一次并不将对话框中原有的数据读出,而是在其它后面(或者下一行)直接将新来数据显示出来。
不知道是否可以通过设置光标(插入符),再在光标处显示新数据的方式实现?
请高人指点。要是有其它更好的办法请指教,并指明实现方法。
最好有特定的函数或者代码。
谢谢。

解决方案 »

  1.   

    CEdit* m_edit=(CEdit*)GetDlgItem(IDC_EDIT3);
    int len=m_edit.GetWindowTextLength();
    m_edit.SetFocus();
    m_edit.SetSel(len,len);
    m_edit.ReplaceSel(temp); 
    这意思???
      

  2.   

    重写CEdit的文字显示函数
    EN_CHANGE
      

  3.   

    直接用DrawText自己写,或者添加多线程来处理
      

  4.   

    光标可以设置位置的,比如你想把光标置到最后,可以用SetSel方法,然后
    void SetSel( int nStartChar, int nEndChar, BOOL bNoScroll = FALSE );
    nStartChar和nEndChar都传你当前文本的长度就行。
    你也不用读,完全可以将edit控件的变量定义为cstring,就第一次读,然后以后有数据就是往这个变量中append而已,当然,你要保证每次添加的内容都是正确的,这样每次只需要append,然后setwindowtext就可以了。
      

  5.   

    一楼的方法,但EDIT控件的属性要设置成 多行 MUTL 才行
      

  6.   

    出现了以下编译错误,是不是缺哪个头文件?还是什么原因?如何解决?
    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)
      

  7.   


    已经解决问题了,我也是按着报错一步步试着改的,具体是什么原因,其实我也不大清楚。我采用了一楼的解决方法,谢谢大家的回帖。好人有好报。
    解决结果如下:
             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); 我以前也打算采用多线程来解决实时显示的问题,可惜看了近二十天书,看明白了,实现起来却束手无策。回头把这个东西详细写个贴子,请大家来指点一下如何实现多线程。再次感谢大家。