Click here to Skip to main content
13,448,598 members (52,262 online)
Click here to Skip to main content
Add your own
alternative version


89 bookmarked
Posted 10 May 2001

History ComboBox

, 20 Apr 2007
Rate this:
Please Sign up or sign in to vote.
CComboBox with support for item history.

Sample Image - HistoryCombo_demo.jpg


The History Combo class CHistoryCombo is based on CComboBox, and includes support for keeping item history, including reading from and saving to the registry. It can also be used to display the contents of an existing CRecentFileList object.

How to use it

Using the CHistoryCombo class is very straightforward. Follow the steps below to add one to an existing project:

  1. After putting the source files (HistoryCombo.cpp and HistoryCombo.h) into the directory you wish to use them from, add the files to your Visual Studio project.
  2. In the resource editor, add a combo where you wish.
  3. In Class Wizard, add a member variable for your combo control, selecting "Control" from the "Category" list, and selecting "CHistoryCombo" from the "Variable Type" list. (If CHistoryCombo does not appear in the list, you may need to delete your class wizard file (.clw) and regenerate it). I will assume your control variable name is m_comboHistory.
  4. Add a handler for WM_INITDIALOG in your dialog class if you don't already have one, and add the following code to it:
    m_comboHistory.LoadHistory("Settings", "HistoryCombo");

    (Note: you can specify any string you wish for the section, and key-prefix.)

  5. In your handler for the IDOK button, or wherever you choose, add the following:

That's all you need to do.

Serialization, and using a string for storage

For examples on how to use the CArchive support, and the loading and saving from and to a string, see the demo program.


Each function is documented in the CPP file, but here is a list of functions in CHistoryCombo:

CHistoryCombo(BOOL bAllowSortStyle = FALSE);
CString LoadHistory(LPCTSTR lpszSection, LPCTSTR lpszKeyPrefix, 
    BOOL bSaveRestoreLastCurrent = TRUE, LPCTSTR lpszKeyCurItem = NULL);
CString LoadHistory(CRecentFileList* pListMRU, BOOL bSelectMostRecent = TRUE);
void SaveHistory(BOOL bAddCurrentItemtoHistory = TRUE);
virtual void Serialize(CArchive& ar);
void SaveHistory(CArchive& ar, BOOL bAddCurrentItemtoHistory = TRUE);
void LoadHistory(CArchive& ar);
CArchive& operator<<(CArchive& ar, CHistoryCombo& ob);
CArchive& operator>>(CArchive& ar, CHistoryCombo& ob);
CString SaveHistoryToText(CString& sHistory, BOOL bAddCurrentItemToHistory = 
    TRUE, LPCTSTR lpszDelims = _T("\r\n"));
void LoadHistoryFromText(LPCTSTR lpszHistory, LPCTSTR lpszLastSelected = NULL,
    LPCTSTR lpszDelims = _T("\r\n"));
int AddString(LPCTSTR lpszString);
void SetMaxHistoryItems(int nMaxItems);
void ClearHistory(BOOL bDeleteRegistryEntries = TRUE);
void StoreValue(BOOL bIgnoreIfEmpty = TRUE);
void SetAutoComplete(BOOL bAutoComplete = TRUE);
BOOL GetAutoComplete();
static void SetAutoCompleteDefault(BOOL bAutoComplete = TRUE);
static BOOL GetAutoCompleteDefault()


Version 3.1 - 20 Apr 2007

Version 3.0 - 22 Jun 2004

  • Added serialization to/from a CArchive object (suggested by EPulse), which can be used by one of the three methods:
    • calling Serialize() directly with a CArchive object
    • calling the LoadHistory()/SaveHistory() overloads which take a CArchive object reference
    • using the insertion operator overloads >> and <<

      (The only difference between these methods is that using SaveHistory() gives you the option of not adding the current item to the history.)

  • Added loading/saving from/to a CString object (suggested by Uwe Keim)

Version 2.1 - 09 Jul 2003

  • Updated to support Unicode.

Version 2 - 01 May 2002

  • Removed CBS_SORT on creation, if specified.
  • Added option to allow the sort style to be set, if required.
  • Fixed SetMaxHistoryItems, so it removes old entries from the list to ensure that there are no more than the maximum. Also, made SaveHistory remove redundant profile entries above the maximum.
  • Uses WriteProfileString to remove profile entries rather than CRegKey.

Version 1 - 12 Apr 2001

  • First version.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Paul Vickery
Software Developer (Senior)
United Kingdom United Kingdom
Originally from an electronics background, I moved into software in 1996, partly as a result of being made redundant, and partly because I was very much enjoying the small amount of coding (in-at-the-deep-end-C) that I had been doing!

I swiftly moved from C to C++, and learned MFC, and then went on to real-time C on Unix. After this I moved to the company for which I currently work, which specialises in Configuration Management software, and currently program mainly in C/C++, for Windows. I have been gradually moving their legacy C code over to use C++ (with STL, MFC, ATL, and WTL). I have pulled in other technologies (Java, C#, VB, COM, SOAP) where appropriate, especially when integrating with third-party products.

In addition to that, I have overseen the technical side of the company website (ASP, VBScript, JavaScript, HTML, CSS), and have also worked closely with colleagues working on other products (Web-based, C#, ASP.NET, SQL, etc).

For developing, I mainly use Visual Studio 2010, along with an in-house-designed editor based on Andrei Stcherbatchenko's syntax parsing classes, and various (mostly freeware) tools. For website design, I use Dreaweaver CS3.

When not developing software, I enjoy listening to and playing music, playing electric and acoustic guitars and mandolin.

You may also be interested in...

Comments and Discussions

GeneralMy vote of 5 Pin
Richchu25-Jun-13 18:51
memberRichchu25-Jun-13 18:51 
GeneralGood job! Pin
Sergey Podobry12-Nov-10 0:38
memberSergey Podobry12-Nov-10 0:38 
GeneralQuestion Pin
Piccinano14-Mar-10 1:01
memberPiccinano14-Mar-10 1:01 
GeneralRe: Question Pin
Dieter Hammer9-Jun-10 22:46
memberDieter Hammer9-Jun-10 22:46 
GeneralI need help Pin
sebilkullan16-Dec-09 22:18
membersebilkullan16-Dec-09 22:18 
GeneralThanks Pin
ranu_hai25-Feb-08 0:10
memberranu_hai25-Feb-08 0:10 
GeneralExcellent! Pin
Steve_Harris7-Nov-06 4:13
memberSteve_Harris7-Nov-06 4:13 
GeneralRe: Excellent! Pin
Paul S. Vickery20-Apr-07 4:51
memberPaul S. Vickery20-Apr-07 4:51 
Thanks for the compliment. It's a bit late for you now, but I've just uploaded an update which includes Chris Maunder's auto-completion code, as well as making it compilable in VS2003/2005.

If you add SQL support, be sure to tell me! Wink | ;)

"The way of a fool seems right to him, but a wise man listens to advice" - Proverbs 12:15 (NIV)

GeneralGood,but... Pin
Fzz11-Oct-05 16:01
memberFzz11-Oct-05 16:01 
AnswerRe: Good,but... Pin
Paul S. Vickery17-Oct-05 4:32
memberPaul S. Vickery17-Oct-05 4:32 
GeneralRe: Good,but... Pin
Fzz21-Oct-05 2:52
memberFzz21-Oct-05 2:52 
GeneralUNICODE support? test engine won't let you cut/paste greek into combobox Pin
Michael Shiels8-Feb-05 15:57
memberMichael Shiels8-Feb-05 15:57 
Questionmore than one comboBox in the same dialog? Pin
m3t3ora11-Aug-03 20:07
memberm3t3ora11-Aug-03 20:07 
QuestionHow to get CHistoryCombo object in toolbar in CMainFrame? Pin
kydfru22-Jun-03 21:49
memberkydfru22-Jun-03 21:49 
AnswerRe: How to get CHistoryCombo object in toolbar in CMainFrame? Pin
Paul S. Vickery22-Jun-03 23:18
memberPaul S. Vickery22-Jun-03 23:18 
GeneralThank you very much for your class and for your help! Pin
kydfru22-Jun-03 23:37
memberkydfru22-Jun-03 23:37 
GeneralA Bug? It cann't show large text in edit box! Pin
Zhongzhu14-Apr-03 3:17
memberZhongzhu14-Apr-03 3:17 
GeneralRe: A Bug? It cann't show large text in edit box! Pin
Paul S. Vickery14-Apr-03 6:00
memberPaul S. Vickery14-Apr-03 6:00 
GeneralThanks a lot! Pin
Zhongzhu14-Apr-03 15:32
memberZhongzhu14-Apr-03 15:32 
GeneralRe: A Bug? It cann't show large text in edit box! Pin
no_reg_name29-Jun-04 23:25
memberno_reg_name29-Jun-04 23:25 
GeneralRe: A Bug? It cann't show large text in edit box! Pin
Paul S. Vickery2-Jul-04 0:58
memberPaul S. Vickery2-Jul-04 0:58 
GeneralRe: A Bug? It cann't show large text in edit box! Pin
no_reg_name4-Jul-04 23:39
memberno_reg_name4-Jul-04 23:39 
GeneralSerializing a ComboBox Pin
EPulse26-Aug-02 21:55
memberEPulse26-Aug-02 21:55 
GeneralRe: Serializing a ComboBox Pin
Paul S. Vickery28-Aug-02 0:01
memberPaul S. Vickery28-Aug-02 0:01 
GeneralRe: Serializing a ComboBox Pin
EPulse28-Aug-02 0:38
memberEPulse28-Aug-02 0:38 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.180318.3 | Last Updated 20 Apr 2007
Article Copyright 2001 by Paul Vickery
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid