const cast inside WXWIN_COMPATIBILITY
[wxWidgets.git] / include / wx / msw / control.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: control.h
3 // Purpose: wxControl class
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 01/02/97
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_CONTROL_H_
13 #define _WX_CONTROL_H_
14
15 #ifdef __GNUG__
16 #pragma interface "control.h"
17 #endif
18
19 #include "wx/dynarray.h"
20
21 WXDLLEXPORT_DATA(extern const wxChar*) wxControlNameStr;
22
23 // General item class
24 class WXDLLEXPORT wxControl : public wxControlBase
25 {
26 DECLARE_ABSTRACT_CLASS(wxControl)
27
28 public:
29 wxControl();
30 wxControl(wxWindow *parent, wxWindowID id,
31 const wxPoint& pos = wxDefaultPosition,
32 const wxSize& size = wxDefaultSize, long style = 0,
33 const wxValidator& validator = wxDefaultValidator,
34 const wxString& name = wxControlNameStr)
35 {
36 Create(parent, id, pos, size, style, validator, name);
37 }
38
39 bool Create(wxWindow *parent, wxWindowID id,
40 const wxPoint& pos = wxDefaultPosition,
41 const wxSize& size = wxDefaultSize, long style = 0,
42 const wxValidator& validator = wxDefaultValidator,
43 const wxString& name = wxControlNameStr);
44
45 virtual ~wxControl();
46
47 // Simulates an event
48 virtual void Command(wxCommandEvent& event) { ProcessCommand(event); }
49
50 // implementation from now on
51 // --------------------------
52
53 // Calls the callback and appropriate event handlers
54 bool ProcessCommand(wxCommandEvent& event);
55
56 // MSW-specific
57 #ifdef __WIN95__
58 virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
59 #endif // Win95
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 wxArrayLong GetSubcontrols() { return m_subControls; }
66
67 void OnEraseBackground(wxEraseEvent& event);
68
69 virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
70 WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
71
72 #if WXWIN_COMPATIBILITY
73 virtual void SetButtonColour(const wxColour& WXUNUSED(col)) { }
74 wxColour* GetButtonColour() const { return NULL; }
75
76 inline virtual void SetLabelFont(const wxFont& font);
77 inline virtual void SetButtonFont(const wxFont& font);
78 inline wxFont& GetLabelFont() const;
79 inline wxFont& GetButtonFont() const;
80
81 // Adds callback
82 inline void Callback(const wxFunction function);
83
84 wxFunction GetCallback() { return m_callback; }
85
86 protected:
87 wxFunction m_callback; // Callback associated with the window
88 #endif // WXWIN_COMPATIBILITY
89
90 protected:
91 // for controls like radiobuttons which are really composite this array
92 // holds the ids (not HWNDs!) of the sub controls
93 wxArrayLong m_subControls;
94
95 virtual wxSize DoGetBestSize() const;
96
97 // create the control of the given class with the given style, returns FALSE
98 // if creation failed
99 //
100 // All parameters except classname and style are optional, if the
101 // size/position are not given, they should be set later with SetSize() and,
102 // label (the title of the window), of course, is left empty. The extended
103 // style is determined from the style and the app 3D settings automatically
104 // if it's not specified explicitly.
105 bool MSWCreateControl(const wxChar *classname,
106 WXDWORD style,
107 const wxPoint& pos = wxDefaultPosition,
108 const wxSize& size = wxDefaultSize,
109 const wxString& label = wxEmptyString,
110 WXDWORD exstyle = (WXDWORD)-1);
111
112 // determine the extended styles combination for this window (may slightly
113 // modify style parameter, this is why it's non const)
114 WXDWORD GetExStyle(WXDWORD& style, bool *want3D) const;
115
116 private:
117 DECLARE_EVENT_TABLE()
118 };
119
120
121 #if WXWIN_COMPATIBILITY
122 inline void wxControl::Callback(const wxFunction f) { m_callback = f; };
123 inline wxFont& wxControl::GetLabelFont() const { return (wxFont &)GetFont(); }
124 inline wxFont& wxControl::GetButtonFont() const { return (wxFont &)GetFont(); }
125 inline void wxControl::SetLabelFont(const wxFont& font) { SetFont(font); }
126 inline void wxControl::SetButtonFont(const wxFont& font) { SetFont(font); }
127 #endif // WXWIN_COMPATIBILITY
128
129 #endif
130 // _WX_CONTROL_H_