关于MFC显示的问题,很急,求助!!!!!问题解决了加分!!!
实在没有办法了,只好向在线的各位求助!!!!问题解决了加分!!!
我的问题是这样的:我在一个程序段(void CSelfTestDlg::OnSurveymeterselftest(){})里面要多次调用一个添加显示ListControl条目的函数(AddRows()),我在运行的时候希望调用一次AddRows()就显示一行结果,总共15个条目,就是那种一条一条地显示出来的效果。可是程序运行的结果却是,它等了半天,最后一次给我15个条目同时跳出来了,不知道是什么原因。
我的部分代码是这样的:
void CSelfTestDlg::OnSurveymeterselftest() //检测仪自检
{
// TODO: Add your control notification handler code here
m_SS.EnableWindow(false);
CString str;
int slot=13,busnumber=1,re = 0,re1 = 0, ch = 0;
DWORD WINAPI ThreadFunc_422(LPVOID lpParam);
……………………………………
if(cardnum!=0)
{
str.Format("1553B板卡已连接!");
AddRows(&(this->m_ListSelftest),0,str);
}
……………………………………
if(cardnum==0)
{
str.Format("1553B 连接设备失败!硬件初始化失败!");
AddRows(&(this->m_ListSelftest),0,str);
return;
}
……………………………………
if(re)
{
str.Format("1553B 内部测试失败!板卡自检测失败!");
AddRows(&(this->m_ListSelftest),0,str);
return;
}
else
{
str.Format("1553B 内部自检测成功!");
AddRows(&(this->m_ListSelftest),0,str);
}
return; ……………………………………
}
void CSelfTestDlg::AddRows(CListCtrl *list, BYTE chno, CString str)
{
DWORD dwcount = 0;
BOOL blinsert = FALSE;
dwcount = list->GetItemCount();
if(dwRxCnt_ST[chno]>=dwcount)
{
list->InsertItem(dwRxCnt_ST[chno],"");
dwRxCnt_ST[chno]++;
blinsert = TRUE;
}
else
blinsert = FALSE;
if (!blinsert)
dwRxCnt_ST[chno]++;
list->SetItemText(dwRxCnt_ST[chno]-1,chno,str);
this->m_ListSelftest.SetRedraw(TRUE);
Sleep(20);
}
最后按理说应该是15行文字一个一个按顺序显示出来,但是运行结果却是界面先空白等待了一段时间,最后跳出来所有的15行结果,结果都是对的。结果是这样的:
[解决办法]
AddRows(....);
DoEvents();
void DoEvents()
{
MSG msg;
while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
DispatchMessage(&msg);
TranslateMessage(&msg);
}
}
参考:VC版DoEvents/处理事件
http://blog.csdn.net/cometnet/article/details/8278383