Environment: VC6, NT4 SP3.
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.
Usage
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.