在我的应用程序中,我有几个 CListCtrl 表。我用带有 for 循环的数组中的数据填充/刷新它们。在循环内,我必须对显示值的方式进行一些调整,因此根本不可能以任何方式进行数据绑定(bind)。
真正的问题是填充表格所花费的时间,因为它是逐行重绘的。如果我在控件填充时将其变为不可见,并在循环完成后使其再次可见,那么整个方法会快得多!
现在我正在寻找一种方法来阻止控件在完全填充之前重新绘制。或者任何其他加快速度的方法。
最佳答案
查看 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
在函数结束之前超出范围,您可以在填充列表控件的代码周围创建一个人工 block 。
关于c++ - 如何(快速)在 C++ (MFC) 中填充 CListCtrl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1109522/