1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxOwnerDrawnComboBox 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows license 
   7 ///////////////////////////////////////////////////////////////////////////// 
  10 enum wxOwnerDrawnComboBoxPaintingFlags
 
  13         Combo control is being painted, instead of a list item. 
  14         Argument item may be @c wxNOT_FOUND in this case. 
  16     wxODCB_PAINTING_CONTROL         
= 0x0001, 
  19         An item with selection background is being painted. 
  20         DC text colour should already be correct. 
  22     wxODCB_PAINTING_SELECTED        
= 0x0002 
  26     @class wxOwnerDrawnComboBox 
  28     wxOwnerDrawnComboBox is a combobox with owner-drawn list items. 
  29     In essence, it is a wxComboCtrl with wxVListBox popup and wxControlWithItems 
  32     Implementing item drawing and measuring is similar to wxVListBox. 
  33     Application needs to subclass wxOwnerDrawnComboBox and implement 
  34     OnDrawItem(), OnMeasureItem() and OnMeasureItemWidth(). 
  37     @style{wxODCB_DCLICK_CYCLES} 
  38            Double-clicking cycles item if wxCB_READONLY is also used. 
  39            Synonymous with wxCC_SPECIAL_DCLICK. 
  40     @style{wxODCB_STD_CONTROL_PAINT} 
  41            Control itself is not custom painted using OnDrawItem. Even if this 
  42            style is not used, writable wxOwnerDrawnComboBox is never custom 
  43            painted unless SetCustomPaintWidth() is called. 
  46     @see wxComboCtrl window styles and @ref overview_windowstyles. 
  48     @beginEventTable{wxCommandEvent} 
  49     @event{EVT_COMBOBOX(id, func)} 
  50            Process a wxEVT_COMMAND_COMBOBOX_SELECTED event, when an item on 
  51            the list is selected. Note that calling GetValue() returns the new 
  55     @see Events emitted by wxComboCtrl. 
  59     @appearance{ownerdrawncombobox.png} 
  61     @see wxComboCtrl, wxComboBox, wxVListBox, wxCommandEvent 
  63 class wxOwnerDrawnComboBox 
: public wxComboCtrl
 
  69     wxOwnerDrawnComboBox(); 
  73         Constructor, creating and showing a owner-drawn combobox. 
  76             Parent window. Must not be @NULL. 
  78             Window identifier. The value @c wxID_ANY indicates a default value. 
  80             Initial selection string. An empty string indicates no selection. 
  85             If ::wxDefaultSize is specified then the window is sized appropriately. 
  87             Number of strings with which to initialise the control. 
  89             An array of strings with which to initialise the control. 
  91             Window style. See wxOwnerDrawnComboBox. 
  97         @see Create(), wxValidator 
  99     wxOwnerDrawnComboBox(wxWindow
* parent
, wxWindowID id
, 
 100                          const wxString
& value 
= "", 
 101                          const wxPoint
& pos 
= wxDefaultPosition
, 
 102                          const wxSize
& size 
= wxDefaultSize
, 
 104                          const wxString
[] choices 
= NULL
, 
 106                          const wxValidator
& validator 
= wxDefaultValidator
, 
 107                          const wxString
& name 
= "comboBox"); 
 109         Constructor, creating and showing a owner-drawn combobox. 
 112             Parent window. Must not be @NULL. 
 114             Window identifier. The value @c wxID_ANY indicates a default value. 
 116             Initial selection string. An empty string indicates no selection. 
 121             If ::wxDefaultSize is specified then the window is sized appropriately. 
 123             An array of strings with which to initialise the control. 
 125             Window style. See wxOwnerDrawnComboBox. 
 131         @see Create(), wxValidator 
 133     wxOwnerDrawnComboBox(wxWindow
* parent
, wxWindowID id
, 
 134                          const wxString
& value
, 
 137                          const wxArrayString
& choices
, 
 139                          const wxValidator
& validator 
= wxDefaultValidator
, 
 140                          const wxString
& name 
= "comboBox"); 
 144         Destructor, destroying the owner-drawn combobox. 
 146     virtual ~wxOwnerDrawnComboBox(); 
 150         Creates the combobox for two-step construction. 
 151         See wxOwnerDrawnComboBox() for further details. 
 153         @remarks Derived classes should call or replace this function. 
 155     bool Create(wxWindow
* parent
, wxWindowID id
, 
 156                 const wxString
& value 
= "", 
 157                 const wxPoint
& pos 
= wxDefaultPosition
, 
 158                 const wxSize
& size 
= wxDefaultSize
, 
 159                 int n
, const wxString choices
[], 
 161                 const wxValidator
& validator 
= wxDefaultValidator
, 
 162                 const wxString
& name 
= "comboBox"); 
 163     bool Create(wxWindow
* parent
, wxWindowID id
, 
 164                 const wxString
& value
, 
 167                 const wxArrayString
& choices
, 
 169                 const wxValidator
& validator 
= wxDefaultValidator
, 
 170                 const wxString
& name 
= "comboBox"); 
 174         Returns index to the widest item in the list. 
 176     virtual int GetWidestItem(); 
 179         Returns width of the widest item in the list. 
 181     virtual int GetWidestItemWidth(); 
 186         This method is used to draw the items background and, maybe, a border around it. 
 188         The base class version implements a reasonable default behaviour which consists 
 189         in drawing the selected item with the standard background colour and drawing a 
 190         border around the item if it is either selected or current. 
 192         @remarks flags has the same meaning as with OnDrawItem(). 
 194     virtual void OnDrawBackground(wxDC
& dc
, const wxRect
& rect
, int item
, 
 198         The derived class may implement this function to actually draw the item 
 199         with the given index on the provided DC. 
 201         If function is not implemented, the item text is simply drawn, as if the control 
 202         was a normal combobox. 
 205             The device context to use for drawing 
 207             The bounding rectangle for the item being drawn (DC clipping 
 208             region is set to this rectangle before calling this function) 
 210             The index of the item to be drawn 
 212             A combination of the ::wxOwnerDrawnComboBoxPaintingFlags enumeration values. 
 214     virtual void OnDrawItem(wxDC
& dc
, const wxRect
& rect
, int item
, 
 218         The derived class may implement this method to return the height of the 
 219         specified item (in pixels). 
 221         The default implementation returns text height, as if this control was 
 224     virtual wxCoord 
OnMeasureItem(size_t item
) const; 
 227         The derived class may implement this method to return the width of the 
 228         specified item (in pixels). If -1 is returned, then the item text width 
 231         The default implementation returns -1. 
 233     virtual wxCoord 
OnMeasureItemWidth(size_t item
) const;