Switch between drop-list and drop-down mode

Environment: VC6, NT4 SP3.

switch_list.jpg (5874 bytes)

switch_drop.jpg (4847 bytes)

After reading the article written by Robert Cremer , I realized that his version doesn't correctly draw the blue selection rectangle around the selected item within the combo box. Therefore, I took a different tack in the designing of my version of a class that allows you to programmatically switch a combo box between "drop-list" and "drop-down" mode.

To do this, I create an edit control that simulates the child edit of a real drop-down combo box. The included files have one CComboBox derived class with overrides on OnDropDown and OnCloseUp, and one CEdit derived class that takes care of the up/down arrows used no navigate in the combobox.

The only (let's say) tricky parts are:

  • Making the edit selectable by mouse. I used ::SetWindowPos to put in in the front of the combo in the Z-order
  • Making the combo selectable/not selectable by TAB. ModifyStyle(WS_TABSTOP,0) to remove, ModifyStyle(0,WS_TABSTOP) to add the combo to the tab order list.


In order to use this class, simply follow these steps:
  • In your dialog, add a drop-list combobox
  • Add a member variable to the dialog of the type CComboBox
  • Modify the dialog's header file so that instead of the newly created combo box variable being declared as a CComboBox, it is declared as a CFineCombo.
  • Now, update your dialog's code to include calls to SwitchToDrop(TRUE) (switches to drop-down) or SwitchToDrop(FALSE) (switches to drop-list) where appropriate.
  • Delete the ClassWizard (.clw) file.
  • Rebuild the ClassWizard file so that it contains the newly added CFineCombo class.


Download demo project - 20 Kb
Download source - 3 Kb


  • highlight the characters in Drop down mode

    Posted by Legacy on 08/12/1999 12:00am

    Originally posted by: Ian

    Hi Bruno,

    Your program is really helpful to me. Thanks.

    I'd like to highlight the characters (set by SetWindowText(str)) right away after switching to Drop down mode. However I couldn't fig it out after spending several hours. Your help will be much appreciated.


  • no CBN_SELCHANGE message?

    Posted by Legacy on 08/06/1999 12:00am

    Originally posted by: Thomas Scherer

    Hey Bruno
    if the "CFineEdit" is active, the "parent dialog window" will be not notified about selection changing with "up/down key". I changed your code like this..

    void CFineEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    switch( .. ) {
    MAKEWPARAM(m_combo->GetDlgCtrlID(), CBN_SELCHANGE),

    Insert the "SendMessage.." line at both locations (Down / Up) and the user will be notified!

    Thomas Scherer

  • How to rebuild CLW file?

    Posted by Legacy on 07/28/1999 12:00am

    Originally posted by: Tom Stepka

    Exactly how does one go about rebuilding a deleted CLW file?

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Moving from an on-premises environment to Office 365 does not remove the need to plan for disruptions or reduce the business risk requirements for protecting email services. If anything, some risks increase with a move to the cloud. Read how to ease the transition every business faces if considering or already migrating to cloud email. This white paper discusses: Setting expectations when migrating to Office 365 Understanding the implications of relying solely on Exchange Online security Necessary archiving …

  • Lenovo recommends Windows 8 Pro. "I dropped my laptop getting out of the taxi." This probably sounds familiar to most IT professionals. If your employees are traveling, you know their devices are in for a rough go. Whether it's a trip to the conference room or a convention out of town, any time equipment leaves a user's desk it is at risk of being put into harm's way. Stay connected at all times, whether at the office or on the go, with agile, durable, and flexible devices like the Lenovo® …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date