c++ - 如何(快速)在 C++ (MFC) 中填充 CListCtrl?

标签 c++ mfc clistctrl

在我的应用程序中,我有几个 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/

相关文章:

c++ - 标记一个字符串,并将每个分隔符放在它自己的标记中

c++ - 是否可以创建一个指向对象的智能指针并将该智能指针作为参数传递给构造函数?

c++ - 执行 if(){ } while() 语句

c++ - MFC/WinAPI : How detect when system language changes in windows 10?

c++ - 如何使用 MFC 禁用顶层菜单项并将其变灰

mfc - CMFCListCtrl 强制选择的项目有红色

c++ - 如何在重命名函数(c++)中使用变量?

c++ - 如何在没有未覆盖区域的情况下绘制 CEdit 控件?

c++ - 虚拟 CListCtrl 自动调整大小

c++ - CListCtrl ListView 中的垂直滚动条