首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于MFC显示的有关问题,很急有关问题解决了加分!

2013-01-11 
关于MFC显示的问题,很急,求助!!!!!问题解决了加分!!!实在没有办法了,只好向在线的各位求助!!!!问题解决了

关于MFC显示的问题,很急,求助!!!!!问题解决了加分!!!
实在没有办法了,只好向在线的各位求助!!!!问题解决了加分!!!
我的问题是这样的:我在一个程序段(void CSelfTestDlg::OnSurveymeterselftest(){})里面要多次调用一个添加显示ListControl条目的函数(AddRows()),我在运行的时候希望调用一次AddRows()就显示一行结果,总共15个条目,就是那种一条一条地显示出来的效果。可是程序运行的结果却是,它等了半天,最后一次给我15个条目同时跳出来了,不知道是什么原因。关于MFC显示的有关问题,很急有关问题解决了加分!
我的部分代码是这样的:
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

热点排行