1

我的列表控件项只会在功能停止时显示。我需要在函数运行时一个一个显示列表控件项。

另一个函数不断地传递值,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);
}
4

1 回答 1

0

这是动画,通常需要第二个线程来更新显示。

然而,使用第二个线程可能是矫枉过正。您可以调用SetTimer以固定时间间隔更新窗口。然后捕获WM_TIMER消息,OnTimerOnTimer. 完成动画后,调用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);
    }
}
于 2019-09-21T22:02:30.290 回答