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++ - 使用 CTabCtrl 和子 CFormViews 的 Tab 顺序

c++ - MFC 应用程序在添加列表控件元素时卡住

c++ - 如何捕捉 CListCtrl 列宽变化事件?

c++ - 如何在 C++/MFC 中将二进制数据编码为文本?

c++ - 如何在MFC对话框应用程序中将复选框设置为默认选中?

c++ - 即使 CMenu 当前打开,如何强制 LVN_HOTTRACK 始终触发

c++ - C 与 C++ 的数值模拟(性能)

c++ - 如何找到机器上为 C 或 CPP 安装/可用的库?

c++ - 对象间共享数据的线程安全访问

c++ - 检查是否在两个匹配元素之间找到 vector 成员