如何实现下拉列表中的历史记录?

时间:2023-01-29 10:13:51
想在组合框的下拉列表中实现历史记录,有什么好办法没有。大家提提建议。

下拉列表中的历史记录是指:在组合框的编辑框中输入过的内容作为历史记录,就象在文件打开和保存对话框中的文件名输入框、Windows的运行对话框以及IE的地址栏中的那样。

10 个解决方案

#1


把他保存起来如何

#2


如何在编辑框中使用IAutoComplete接口
http://www.vckbase.com/document/viewdoc/?id=595

#3


使用文件保存相关信息即可!

#4


听说使用IAutoComplete接口可麻烦,要创建自动完成对象,还要实现IEnumString等接口。除非我要使用系统的ACL资源,比如的IE的最近文档记录等。

如果只是需要历史记录,并不需要自动完成功能,那么历史记录存放在哪儿比较合适呢?ini?注册表?

#5


保存一下相关信息

#6


使用一个文本文件,保存相关的选择,呵呵
如果是固定个数,那么写注册表也行。
使用文件和注册表有点麻烦的就是在添加的时候需要判断是否已经存在!

#7


http://www.codeguru.com/Cpp/controls/combobox/article.php/c1799/
http://www.codeguru.com/Cpp/controls/combobox/article.php/c1807/

#8


不多的,在InitDialog中直接赋值

#9


已查看各位的建议

个人觉得把MRU历史记录保存在注册表中比较好,毕竟类似于【打开对话框】的历史记录的功能只是程序中的一个方便用户的小功能而已,把各种历史记录也放进ini文件比较碍眼;ini文件用来保存应用程序的参数等信息。

现准备参考“laiyiling(陌生人 专注MS技术)”的建议,使用CRecentFileList类,把MRU功能集成到自定义CComboBox中(CMRUComboBox)。

#10


在使用CRecentFileList类时,发现只能添加文件名字符串,而不能添加不是文件名的字符串,如URL链接,晕~
所以准备采用CString* m_arrNames之类数据结构自己实现表操作。


好了,结帖吧,总结一下

实现组合框的下拉列表中的历史记录的基本原理:

1、历史记录可以保存到注册表中或ini文件中

2、在InitInstance、OnCreate或OnInitDialog中,读ini文件或注册表,将其内容添加至组合框的列表框中
考虑到增删操作的复杂性(避免重复记录等),从注册表中读出的内容应先保存到内部数据结构中,然后增删都在内部数据结构上操作。

3、在ExitInstance、OnDestroy、OnOK或它们的析构函数中,将组合框的列表框中的内容写入ini文件或注册表

HistoryList增删操作以及注册表的读写可以参考MFC中CRecentFileList类的实现
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxadv.h
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\src\mfc\filelist.cpp

#1


把他保存起来如何

#2


如何在编辑框中使用IAutoComplete接口
http://www.vckbase.com/document/viewdoc/?id=595

#3


使用文件保存相关信息即可!

#4


听说使用IAutoComplete接口可麻烦,要创建自动完成对象,还要实现IEnumString等接口。除非我要使用系统的ACL资源,比如的IE的最近文档记录等。

如果只是需要历史记录,并不需要自动完成功能,那么历史记录存放在哪儿比较合适呢?ini?注册表?

#5


保存一下相关信息

#6


使用一个文本文件,保存相关的选择,呵呵
如果是固定个数,那么写注册表也行。
使用文件和注册表有点麻烦的就是在添加的时候需要判断是否已经存在!

#7


http://www.codeguru.com/Cpp/controls/combobox/article.php/c1799/
http://www.codeguru.com/Cpp/controls/combobox/article.php/c1807/

#8


不多的,在InitDialog中直接赋值

#9


已查看各位的建议

个人觉得把MRU历史记录保存在注册表中比较好,毕竟类似于【打开对话框】的历史记录的功能只是程序中的一个方便用户的小功能而已,把各种历史记录也放进ini文件比较碍眼;ini文件用来保存应用程序的参数等信息。

现准备参考“laiyiling(陌生人 专注MS技术)”的建议,使用CRecentFileList类,把MRU功能集成到自定义CComboBox中(CMRUComboBox)。

#10


在使用CRecentFileList类时,发现只能添加文件名字符串,而不能添加不是文件名的字符串,如URL链接,晕~
所以准备采用CString* m_arrNames之类数据结构自己实现表操作。


好了,结帖吧,总结一下

实现组合框的下拉列表中的历史记录的基本原理:

1、历史记录可以保存到注册表中或ini文件中

2、在InitInstance、OnCreate或OnInitDialog中,读ini文件或注册表,将其内容添加至组合框的列表框中
考虑到增删操作的复杂性(避免重复记录等),从注册表中读出的内容应先保存到内部数据结构中,然后增删都在内部数据结构上操作。

3、在ExitInstance、OnDestroy、OnOK或它们的析构函数中,将组合框的列表框中的内容写入ini文件或注册表

HistoryList增删操作以及注册表的读写可以参考MFC中CRecentFileList类的实现
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxadv.h
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\src\mfc\filelist.cpp