Have you ever wanted the CCombobox class to display
"readable" text when it is disabled? No matter whether
it is a drop-down or a drop-list type of combobox!
Here’s a class that’ll do that (and much more, although the
rest is not visually related)!
For example, in the pictures below, you can see the
"before" and "after" effects of disabling the
comboboxes using the standard "EnableWindow()" function
call to either enable/disable the combobox.
Before |
After |
The TComboBox class also provides mechanisms for quite a few
time saving headaches when working with comboboxes, such as:
- Function calls to add entries into the combobox with
"hidden" string information (i.e. in the
screens above, the data "Item Data 1,2" is
associated with the first combobox but is not visable). I
know that Microsoft provides the
"SetItemData()" member function for comboboxes,
but it only allows for a DWORD, not a string. Therefore,
there is no need to have global variables defined to
contain the "hidden" information. Such an
example is trying to use a CStringArray as data to be
associated with the various entries in the combobox. As
soon as the CStringArray goes out of scope, specifically
if it is defined locally to a function, the data for the
combobox will no longer be valid once the function exists. - The ability to select an item based on the
"hidden" code (i.e. in the above example, the
statement to select the item in the third combobox was
basically ‘m_cbcDropDownNew.SelectCode(-1, "Item
Data 1,2")’. - The ability to "force fill" the combobox if the
information isn’t found. It is displayed differently
(i.e. with special characters before/after the entry), to
let you know that the entry was forced (the characters
displayed are by default ‘+’ and ‘;’ – so a forced item
would look like "+Drop List 3;"). - Let the combobox deal with duplicates (whether you want
duplicates, or you don’t). - Function calls to switch the mode from drop-down to
drop-list (so that you don’t have to remember the style
code necessary to switch to either).
Once you get the code, it is simple enough to add to whatever
project you are working on, by opening up ClassWizard, and
clicking on the "Add Class…" button in the upper
right hand corner of ClassWizard. Click on "New…"
from the drop down menu. The class name should be entered as
CTComboBox, and the base class should be CCombobox. After
clicking on OK, the files "TComboBox.h" and
"TComboBox.cpp" will be generated. Once that is done,
simply replace the files with the two that come with the demo
project. I’d like to give you an easier way to do this, but I’m
using VC 5.0, and haven’t been able to find out any other way to
add a class to a project (P.S. if anyone knows a better way, feel
free to recommend one!).
Once you’ve added the class to the project, all you have to do
to add member variables that are based on the
"CTComboBox" class, is to "Add variable…",
give the variable a name, set the "Category" to
control, and a select "variable type" of
"CTComboBox". ClassWizard will of course remind you
that you need to include the "tcombobox.h" file in the
header of the dialog itself.