1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/msw/control.h 3// Purpose: wxControl class 4// Author: Julian Smart 5// Modified by: 6// Created: 01/02/97 7// RCS-ID: $Id: control.h 45498 2007-04-16 13:03:05Z VZ $ 8// Copyright: (c) Julian Smart 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_CONTROL_H_ 13#define _WX_CONTROL_H_ 14 15#include "wx/dynarray.h" 16 17// General item class 18class WXDLLEXPORT wxControl : public wxControlBase 19{ 20public: 21 wxControl() { } 22 23 wxControl(wxWindow *parent, wxWindowID id, 24 const wxPoint& pos = wxDefaultPosition, 25 const wxSize& size = wxDefaultSize, long style = 0, 26 const wxValidator& validator = wxDefaultValidator, 27 const wxString& name = wxControlNameStr) 28 { 29 Create(parent, id, pos, size, style, validator, name); 30 } 31 32 bool Create(wxWindow *parent, wxWindowID id, 33 const wxPoint& pos = wxDefaultPosition, 34 const wxSize& size = wxDefaultSize, long style = 0, 35 const wxValidator& validator = wxDefaultValidator, 36 const wxString& name = wxControlNameStr); 37 38 virtual ~wxControl(); 39 40 // Simulates an event 41 virtual void Command(wxCommandEvent& event) { ProcessCommand(event); } 42 43 44 // implementation from now on 45 // -------------------------- 46 47 virtual wxVisualAttributes GetDefaultAttributes() const 48 { 49 return GetClassDefaultAttributes(GetWindowVariant()); 50 } 51 52 static wxVisualAttributes 53 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); 54 55 // Calls the callback and appropriate event handlers 56 bool ProcessCommand(wxCommandEvent& event); 57 58 // MSW-specific 59 virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); 60 61 // For ownerdraw items 62 virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *WXUNUSED(item)) { return false; } 63 virtual bool MSWOnMeasure(WXMEASUREITEMSTRUCT *WXUNUSED(item)) { return false; } 64 65 const wxArrayLong& GetSubcontrols() const { return m_subControls; } 66 67 // default handling of WM_CTLCOLORxxx: this is public so that wxWindow 68 // could call it 69 virtual WXHBRUSH MSWControlColor(WXHDC pDC, WXHWND hWnd); 70 71 // default style for the control include WS_TABSTOP if it AcceptsFocus() 72 virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; 73 74protected: 75 // choose the default border for this window 76 virtual wxBorder GetDefaultBorder() const; 77 78 // return default best size (doesn't really make any sense, override this) 79 virtual wxSize DoGetBestSize() const; 80 81 // This is a helper for all wxControls made with UPDOWN native control. 82 // In wxMSW it was only wxSpinCtrl derived from wxSpinButton but in 83 // WinCE of Smartphones this happens also for native wxTextCtrl, 84 // wxChoice and others. 85 virtual wxSize GetBestSpinnerSize(const bool is_vertical) const; 86 87 // create the control of the given Windows class: this is typically called 88 // from Create() method of the derived class passing its label, pos and 89 // size parameter (style parameter is not needed because m_windowStyle is 90 // supposed to had been already set and so is used instead when this 91 // function is called) 92 bool MSWCreateControl(const wxChar *classname, 93 const wxString& label, 94 const wxPoint& pos, 95 const wxSize& size); 96 97 // NB: the method below is deprecated now, with MSWGetStyle() the method 98 // above should be used instead! Once all the controls are updated to 99 // implement MSWGetStyle() this version will disappear. 100 // 101 // create the control of the given class with the given style (combination 102 // of WS_XXX flags, i.e. Windows style, not wxWidgets one), returns 103 // false if creation failed 104 // 105 // All parameters except classname and style are optional, if the 106 // size/position are not given, they should be set later with SetSize() 107 // and, label (the title of the window), of course, is left empty. The 108 // extended style is determined from the style and the app 3D settings 109 // automatically if it's not specified explicitly. 110 bool MSWCreateControl(const wxChar *classname, 111 WXDWORD style, 112 const wxPoint& pos = wxDefaultPosition, 113 const wxSize& size = wxDefaultSize, 114 const wxString& label = wxEmptyString, 115 WXDWORD exstyle = (WXDWORD)-1); 116 117 // call this from the derived class MSWControlColor() if you want to show 118 // the control greyed out (and opaque) 119 WXHBRUSH MSWControlColorDisabled(WXHDC pDC); 120 121 // common part of the 3 functions above: pass wxNullColour to use the 122 // appropriate background colour (meaning ours or our parents) or a fixed 123 // one 124 virtual WXHBRUSH DoMSWControlColor(WXHDC pDC, wxColour colBg, WXHWND hWnd); 125 126 // this is a helper for the derived class GetClassDefaultAttributes() 127 // implementation: it returns the right colours for the classes which 128 // contain something else (e.g. wxListBox, wxTextCtrl, ...) instead of 129 // being simple controls (such as wxButton, wxCheckBox, ...) 130 static wxVisualAttributes 131 GetCompositeControlsDefaultAttributes(wxWindowVariant variant); 132 133 // for controls like radiobuttons which are really composite this array 134 // holds the ids (not HWNDs!) of the sub controls 135 wxArrayLong m_subControls; 136 137private: 138 DECLARE_DYNAMIC_CLASS_NO_COPY(wxControl) 139}; 140 141#endif // _WX_CONTROL_H_ 142