我用编辑框显示连续采集的5次数据,程序如下
         int i;
        CString data;
        for(i=0;i<5;i++)
        {
char strbuf[200] = "";
WDC_DIAG_ReadWriteAddr3(hDev, direction, dwAddrSpace, mode, strbuf);
        data+=strbuf;
m_recvChar.Format("%s", data);
UpdateData(FALSE);
        }
其中m_recvChar是编辑框变量实际操作中,又看到编辑框右边的滚动条滚动5次,但是编辑框中是空白,5次采集结束后,才一起显示出来
怎样才能,受到一次,就显示一次呢?

解决方案 »

  1.   

    5次采集结束后,才一起显示出来????什么意思,,,,,可以一起显示????是最后一个显示吧,,,,
    若想一个个地看,,其它办法就不说了,,,说个很笨的方法,,就是在循环里放一个AfxMessageBox("next");
      

  2.   

    另外我不知道楼主到底想怎样解决问题,,,,你说连续显示,,,其实是已经连续显示过了,,,只不过是循环速度太快了,,你根本来不及看清楚,,,,,最后是每隔一段时间(比如1秒)显示一遍,,,所以你最好将循环里的实现放在OnTimer()里,,,
      

  3.   

    直接这样使用:
    UpdateWindow();
    则对话框上的所有变化都会及时更新,而不用等到主线程循环结束。
    如果只是想让这个编辑框及时更新可以使用这个编辑框的UpdateWindow()。方法有两种:
    1.使用如下方法:
        //取得编辑框指针
        CWnd* pEdit = GetDlgItem(编辑框ID);    for(i=0;i <5;i++) 
        { 
            char strbuf[200] = ""; 
            WDC_DIAG_ReadWriteAddr3(hDev,direction,dwAddrSpace,mode,strbuf); 
            data+=strbuf; 
            m_recvChar.Format("%s",   data); 
            UpdateData(FALSE);
            //在这里只刷新编辑框
             pEdit->UpdateWindow();
        }
    2.就是给编辑框添加一个 Control 类型的变量,比如MyEdit,则只需把上面循环中的
             pEdit->UpdateWindow();
    改为
             MyEdit.UpdateWindow();这个功能是从 baoyz 学来的。
      

  4.   

    5次采集结束后,才一起显示出来????什么意思,,,,,可以一起显示????是最后一个显示吧,,,, 
    若想一个个地看,,其它办法就不说了,,,说个很笨的方法,,就是在循环里放一个AfxMessageBox("next");===========================================================================
    这个方法不行的,因为要自动处理,现在收5次,以后也许收10次,或更多,不能总是手动去点next
      

  5.   

    updata,
    设置之后必须更新的吧,要不是显示不出来的啊
      

  6.   

    看看每次循环之后updatedata(),
    再不行,开个线程
      

  7.   

    哦,原来你已经updatedata了
    那就开个线程吧,可能消息被阻塞了
      

  8.   

    开个线程也是个办法,,放到OnTimer(...)里又何尝不是个好办法,,,
      

  9.   

    楼主,你试过了在循环中的UpdateData(FALSE);后面加入UpdateWindow();了吗?
    如果你试过,我相信你一定已经应该结贴了!!!我再说一下我对你问题的理解:
    你收到一次数据后UpdateData(FALSE);然后等待下一次的数据,可以对话框中的编辑框中却没把你的UpdateData(FALSE);的结果显示出来。直到你的5次循都结事了,编辑框中显示出了你5次所有更新的结果。
    如果我上面的理解没有错,我希望楼主能认真对待我的回贴。而且我再次声明,这个方法UpdateWindow();的使用是从 baoyz 那学来的。
      

  10.   

    我测试你说的代码的方法是这样的(myEdit是我的编辑框的Value类别变量):
    开始用Sleep(1000);模拟你的代码接收数据时主线程的阻塞。
    myEdit = "";
    for(int i=0;i<5;i++)
    {
        myEdit += "123";
        UpdateData(FALSE);
        Sleep(1000);
    }
    结果直到循结束才看到编辑框中的5个123。把上述代码做如下改动后myEdit = "";
    for(int i=0;i<5;i++)
    {
        myEdit += "123";
        UpdateData(FALSE);
        UpdateWindow();
        Sleep(1000);
    }
    运行之后,5个123是每一秒显示多一组。
    难道这不是你要的结果吗?
      

  11.   

    我最后在说一下7楼的和10楼的,你们说的多线程我知道一定可以,你们可以这样说话,但我希望你们在说这样的话之前已经把别人说过的方法测试过了,这叫对自己说的话负责。至少我在回贴之前是经过测试的。我的测试环境是VC.net 2002
      

  12.   

    直接这样使用: 
    UpdateWindow(); 
    则对话框上的所有变化都会及时更新,而不用等到主线程循环结束。 
    如果只是想让这个编辑框及时更新可以使用这个编辑框的UpdateWindow()。方法有两种: 
    1.使用如下方法: 
            //取得编辑框指针 
            CWnd*   pEdit   =   GetDlgItem(编辑框ID);         for(i=0;i   <5;i++)   
            {   
                    char   strbuf[200]   =   "";   
                    WDC_DIAG_ReadWriteAddr3(hDev,direction,dwAddrSpace,mode,strbuf);   
                    data+=strbuf;   
                    m_recvChar.Format("%s",       data);   
                    UpdateData(FALSE); 
                    //在这里只刷新编辑框 
                      pEdit-> UpdateWindow(); 
            } 
    2.就是给编辑框添加一个   Control   类型的变量,比如MyEdit,则只需把上面循环中的 
                      pEdit-> UpdateWindow(); 
    改为 
                      MyEdit.UpdateWindow(); 这个功能是从   baoyz   学来的。==========================================================================
    这个方法是可行的,谢谢了