C++ 如何(快速)在C++;(MFC)?

C++ 如何(快速)在C++;(MFC)?,c++,mfc,clistctrl,C++,Mfc,Clistctrl,在我的应用程序中,我有几个CListCtrl表。我使用来自带有for循环的数组的数据填充/刷新它们。在循环内部,我必须对显示值的方式进行一些调整,以使数据绑定完全不可能 真正的问题是填充表格所需的时间,因为表格是逐行重新绘制的。如果我在控件填充时使其不可见,并在循环完成时使其再次可见,则整个方法的速度要快得多 现在我正在寻找一种方法来阻止控件重新绘制,直到控件完全填充为止。或任何其他加快速度的方法。查看SetRedraw方法。在开始填充控件之前调用SetRedraw(FALSE),在完成时调用S

在我的应用程序中,我有几个CListCtrl表。我使用来自带有for循环的数组的数据填充/刷新它们。在循环内部,我必须对显示值的方式进行一些调整,以使数据绑定完全不可能

真正的问题是填充表格所需的时间,因为表格是逐行重新绘制的。如果我在控件填充时使其不可见,并在循环完成时使其再次可见,则整个方法的速度要快得多


现在我正在寻找一种方法来阻止控件重新绘制,直到控件完全填充为止。或任何其他加快速度的方法。

查看SetRedraw方法。在开始填充控件之前调用SetRedraw(FALSE),在完成时调用SetRedraw(TRUE)

我还建议使用RAII进行以下操作:

class CFreezeRedraw
{
public:
   CFreezeRedraw(CWnd & wnd) : m_Wnd(wnd) { m_Wnd.SetRedraw(FALSE); }
   ~CFreezeRedraw() { m_Wnd.SetRedraw(TRUE); }
private:
   CWnd & m_Wnd;
};
然后使用类似于:

CFreezeRedraw freezeRedraw(myListCtrl);
//... populate control ...

如果希望
冻结重画
在函数结束前超出范围,则可以在填充列表控件的代码周围创建一个人工块。

如果有大量记录,则更适合使用虚拟列表样式(
LVS_OWNERDATA
)。你可以找到更多的信息