0

如何使用本机 C++ WIN32 API将Microsoft Office Access 2007数据库中的大量记录添加到列表框控件中?

大家好!我想使用本机 C++ WIN32 API 制作像 Microsoft Encarta English Dictionary 这样的字典。我的数据库是 Microsoft Office Access 2007 格式的数据库,它有 21,364 条记录(充满了词汇及其含义)。我想尽可能快地使用CreateWindow带有“”窗口类名称的“”函数将词汇表添加到列表框控件中,这样没有人会因等待而烦恼。listbox

我对OLE DB数据库连接方法非常感兴趣,因为据说它是所有其他方法中最快的。我按照此链接中给出的 OLE DB 教程进行操作:http: //msdn.microsoft.com/en-us/library/office/ff965871%28v=office.14%29。按照教程,我成功连接到具有 21,364 条记录的Microsoft Office Access 2007SendMessage格式的数据库,并使用“ ”函数在“ ”循环中使用“ LB_ADDSTRING”消息类型将词汇表添加到列表框中。for

但是,我觉得使用 " " 循环将21,364 条记录添加到列表框中for需要的时间比有人耐心等待的时间要长一些。相反,我确信Microsoft Encarta 英语词典应该有数以百万计的词汇,而且它们都添加到列表框中的速度如此之快,以至于有人会欣喜若狂!

谁能告诉我,指导我,用代码示例向我展示如何使用本机 C++ WIN32 API加快将大量Microsoft Office Access 2007数据库记录添加到列表框中的速度?我将非常感谢!

4

1 回答 1

3

当/如果您想快速将大量记录添加到列表框中,您可以采取一些步骤。

  1. 预先对数据进行排序,并告诉列表框不要对数据进行排序。
  2. 为数据分配空间(MS 建议,但我认为与此没有什么区别)。
  3. 考虑使用“虚拟列表框”——所有者按需绘制项目,而不是从插入它们开始。

对于约 20,000 个项目,第一个可能就足够了。在关闭排序的情况下快速检查将 20,000 个项目插入列表框中,我得到了大约半秒的时间,没有做更多的事情,所以当它被填充时有一个暂停,除非它是不够烦人的经常发生(即,您经常销毁并重新填充列表框)。

同时,我确实觉得有必要指出,一个包含 20,000 个项目的列表框永远不可能被认为是一个真正伟大的设计。您可能想要/需要做一些事情来缩小您在任何给定时间真正向用户显示的内容。

于 2013-08-07T05:19:08.673 回答