7

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

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

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

4

2 回答 2

20

查看方法 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 ...

freezeRedraw如果您想在函数结束之前超出范围,您可以在填充列表控件的代码周围创建一个人工块。

于 2009-07-10T13:31:27.897 回答
6

如果您有很多记录,使用虚拟列表样式 ( ) 可能更合适LVS_OWNERDATA您可以在此处找到更多信息。

于 2009-07-10T14:13:04.227 回答