我用编辑框显示连续采集的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次采集结束后,才一起显示出来
怎样才能,受到一次,就显示一次呢?
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次采集结束后,才一起显示出来
怎样才能,受到一次,就显示一次呢?
解决方案 »
- new与delete使用的问题
- vs2008中TCHAR的输出
- 服务端用C++写,客户端用JAVA写,互相通信问题
- ListView刷新问题,在线等.
- 急急···请问一下单击按钮事件后更新界面的问题(新手帖)
- 郁闷,网上发简历都成个星期了,一点回应也没! 散分!
- 今天是程序员节,祝大家程序员节快乐,hello world!
- 我在服务程序中(用户为system)怎么得到其它用户的上网记录信息?
- 如果出现warning:all references to "OLEPRO32.DLL" discarded by /OPT:REF,这是不是说明我加的控件无效呢!
- 在VS2010 用的QT框架做的海康sdk开发,预览不出图像。
- 问一个WSAAsyncSelect、WSAEventSelect模型的问题。
- 截屏被阻止怎么办?像nProject子类的保护软件,导致截屏失败。
若想一个个地看,,其它办法就不说了,,,说个很笨的方法,,就是在循环里放一个AfxMessageBox("next");
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 学来的。
若想一个个地看,,其它办法就不说了,,,说个很笨的方法,,就是在循环里放一个AfxMessageBox("next");===========================================================================
这个方法不行的,因为要自动处理,现在收5次,以后也许收10次,或更多,不能总是手动去点next
设置之后必须更新的吧,要不是显示不出来的啊
再不行,开个线程
那就开个线程吧,可能消息被阻塞了
如果你试过,我相信你一定已经应该结贴了!!!我再说一下我对你问题的理解:
你收到一次数据后UpdateData(FALSE);然后等待下一次的数据,可以对话框中的编辑框中却没把你的UpdateData(FALSE);的结果显示出来。直到你的5次循都结事了,编辑框中显示出了你5次所有更新的结果。
如果我上面的理解没有错,我希望楼主能认真对待我的回贴。而且我再次声明,这个方法UpdateWindow();的使用是从 baoyz 那学来的。
开始用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是每一秒显示多一组。
难道这不是你要的结果吗?
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 学来的。==========================================================================
这个方法是可行的,谢谢了