如何(快速)在 C++ 中填充 CListCtrl (MFC)?
在我的应用程序中,我有一些 CListCtrl 表。 我使用 for 循环使用数组中的数据填充/刷新它们。 在循环内部,我必须对显示值的方式进行一些调整,因此根本不可能以任何方式进行数据绑定。
真正的问题是填充表格所需的时间,因为它是逐行重新绘制的。 如果我在填充时将控件变为不可见,并在循环完成后使其再次可见,则整个方法会快得多!
现在我正在寻找一种方法来阻止控件重新绘制,直到它完全填满。 或者任何其他加快速度的方法。
in my application I have a few CListCtrl tables. I fill/refresh them with data from an array with a for-loop. Inside the loop I have to make some adjustments on how I display the values so data binding in any way is not possible at all.
The real problem is the time it takes to fill the table since it is redrawn row by row. If I turn the control invisible while it is filled and make it visible again when the loop is done the whole method is a lot faster!
Now I am looking for a way to stop the control from repainting until it is completely filled. Or any other way to speed things up.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您有很多记录,可能使用虚拟列表样式(
LVS_OWNERDATA
)更合适。 您可以在此处找到更多信息。If you have a lot of records may be it is more appropriate to use virtual list style (
LVS_OWNERDATA
). You could find more information here.查看方法 SetRedraw。 在开始填充控件之前调用 SetRedraw(FALSE),在完成时调用 SetRedraw(TRUE)。
我还建议为此使用 RAII:
然后使用如下:
如果您希望
freezeRedraw
在函数结束之前超出范围,您可以在填充列表控件的代码周围创建一个人工块。Look into the method SetRedraw. Call SetRedraw(FALSE) before starting to fill the control, SetRedraw(TRUE) when finished.
I would also recommend using RAII for this:
Then use like:
You can create an artificial block around the code where you populate the list control if you want
freezeRedraw
to go out of scope before the end of the function.