在我的应用程序中,我有一些CListCtrl表.我用带有for循环的数组填充/刷新它们.在循环内部,我必须对如何显示值进行一些调整,这样就无法以任何方式进行数据绑定.
真正的问题是填充表所需的时间,因为它是逐行重绘的.如果我在控件填充时将其置于不可见状态,并在循环完成后再次使其可见,则整个方法要快得多!
现在我正在寻找一种方法来阻止控件重新绘制,直到完全填满.或任何其他方式来加快速度.
Nic*_*yer 19
查看方法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;
};
Run Code Online (Sandbox Code Playgroud)
然后使用像:
CFreezeRedraw freezeRedraw(myListCtrl);
//... populate control ...
Run Code Online (Sandbox Code Playgroud)
如果要freezeRedraw在函数结束之前超出范围,可以在填充列表控件的代码周围创建一个人工块.