代码之家  ›  专栏  ›  技术社区  ›  TalkingCode

如何快速填充C++中的CclitCrl?

  •  6
  • TalkingCode  · 技术社区  · 15 年前

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

    真正的问题是,由于表是逐行重新绘制的,所以需要花费一些时间来填充它。如果我在控件被填充时将其设置为不可见,并在循环完成时使其再次可见,则整个方法将更快!

    现在我正在寻找一种方法来阻止控件重新绘制,直到它完全填满。或者其他加速的方法。

    2 回复  |  直到 15 年前
        1
  •  18
  •   Nick Meyer    15 年前

    研究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 在函数结束之前超出范围。

        2
  •  6
  •   Kirill V. Lyadvinsky    15 年前

    如果您有很多记录,那么使用虚拟列表样式可能更合适( LVS_OWNERDATA )你可以找到更多的信息 here .

    推荐文章