我的列表控件只有在功能停止时才会显示。我需要在函数运行时将列表控件项一项一项地显示出来。
另一个函数不断将值传递给 HRESULT function()
,直到数据处理完成。
//function to show the list item
HRESULT function(datetime, strNumOfGroup, strDisributionRegion, strSpeed){
m_count = m_hyperTerminal.GetItemCount();
items = m_hyperTerminal.InsertItem(m_count, datetime);// Five columns in the list control
m_hyperTerminal.SetItemText(items, 1, strNumOfGroup);
m_hyperTerminal.SetItemText(items, 2, strCompactness);
m_hyperTerminal.SetItemText(items, 3, strDistributionRegion);
m_hyperTerminal.SetItemText(items, 4, strSpeed);
}
这是动画,通常需要第二个线程来更新显示。
然而,使用第二个线程可能有点矫枉过正。您可以调用 SetTimer
以固定的时间间隔更新窗口。然后捕获WM_TIMER
消息,在OnTimer
中执行所有在OnTimer
中的更新。完成动画后,调用 KillTimer
例子:
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
...
ON_WM_TIMER()
END_MESSAGE_MAP()
BOOL CMyDialog::OnInitDialog()
{
BOOL res = CDialog::OnInitDialog();
...
SetTimer(1, 1000, NULL);
return res;
}
void CMyDialog::OnTimer(UINT_PTR nid)
{
CDialog::OnTimer(nid);
if(nid == 1)
{
static int n = 0;
if(n == 0) m_hyperTerminal.SetItemText(0, 1, L"strNumOfGroup");
if(n == 1) m_hyperTerminal.SetItemText(0, 2, L"strCompactness");
if(n == 2) m_hyperTerminal.SetItemText(0, 3, L"strDistributionRegion");
if(n == 3) m_hyperTerminal.SetItemText(0, 4, L"strSpeed");
n++;
if(n > 4)
KillTimer(1);
}
}
我是一名优秀的程序员,十分优秀!