// constants
// ---------------------------------------------------------------------------
-// FIXME does anybody use those? they're unused by wxWidgets...
+#if WXWIN_COMPATIBILITY_2_4
+// they're unused by wxWidgets...
enum
{
wxKEY_SHIFT = 1,
wxKEY_CTRL = 2
};
+#endif
// ---------------------------------------------------------------------------
// wxWindow declaration for MSW
// --------------
void OnPaint(wxPaintEvent& event);
+ void OnEraseBackground(wxEraseEvent& event);
#ifdef __WXWINCE__
- void OnInitDialog( wxInitDialogEvent& event );
+ void OnInitDialog(wxInitDialogEvent& event);
#endif
public:
- // For implementation purposes - sometimes decorations make the client area
- // smaller
- virtual wxPoint GetClientAreaOrigin() const;
-
// Windows subclassing
void SubclassWin(WXHWND hWnd);
void UnsubclassWin();
void UnpackScroll(WXWPARAM wParam, WXLPARAM lParam,
WXWORD *code, WXWORD *pos, WXHWND *hwnd);
void UnpackCtlColor(WXWPARAM wParam, WXLPARAM lParam,
- WXWORD *nCtlColor, WXHDC *hdc, WXHWND *hwnd);
+ WXHDC *hdc, WXHWND *hwnd);
void UnpackMenuSelect(WXWPARAM wParam, WXLPARAM lParam,
WXWORD *item, WXWORD *flags, WXHMENU *hmenu);
bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control);
- bool HandleCtlColor(WXHBRUSH *hBrush,
- WXHDC hdc,
- WXHWND hWnd,
- WXUINT nCtlColor,
- WXUINT message,
- WXWPARAM wParam,
- WXLPARAM lParam);
+ bool HandleCtlColor(WXHBRUSH *hBrush, WXHDC hdc, WXHWND hWnd);
bool HandlePaletteChanged(WXHWND hWndPalChange);
bool HandleQueryNewPalette();
// this function should return the brush to paint the window background
// with or 0 for the default brush
- virtual WXHBRUSH OnCtlColor(WXHDC hDC,
- WXHWND hWnd,
- WXUINT nCtlColor,
- WXUINT message,
- WXWPARAM wParam,
- WXLPARAM lParam);
+ virtual WXHBRUSH MSWControlColor(WXHDC hDC);
+
+ // this function should return the brush to paint the children controls
+ // background or 0 if this window doesn't impose any particular background
+ // on its children
+ //
+ // the base class version uses MSWGetBgColourForChild() and returns a solid
+ // brush if we have a non default background colour or 0 otherwise
+ virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC WXUNUSED(hDC), wxWindow *child)
+ {
+ return MSWGetSolidBgBrushForChild(child);
+ }
+
+ // return the background colour of this window under the given child
+ // (possible grand child)
+ //
+ // this is a hack as if the background is themed, there is no single colour
+ // representing it, but sometimes we can't use the pattern brush returned
+ // by MSWGetBgBrushForChild() anyhow and then this function is used as
+ // fallback
+ //
+ // the base class version returns bg colour if it had been explicitely set
+ // or wxNullColour otherwise
+ virtual wxColour MSWGetBgColourForChild(wxWindow *child);
+
+ // convenience function: returns a solid brush of the colour returned by
+ // MSWGetBgColourForChild() or 0
+ WXHBRUSH MSWGetSolidBgBrushForChild(wxWindow *child);
+
+ // normally just calls MSWGetBgBrushForChild() on the parent window but may
+ // be overridden if the default background brush is not suitable for some
+ // reason (e.g. wxStaticBox uses MSWGetSolidBgBrushForChild() instead)
+ virtual WXHBRUSH MSWGetBgBrushForSelf(wxWindow *parent, WXHDC hDC);
+
+ // return the background brush to use for this window by quering the parent
+ // windows via their MSWGetBgBrushForChild() recursively
+ WXHBRUSH MSWGetBgBrush(WXHDC hDC);
+
+ // overriding this method gives the parent window the opportunity to
+ // process WM_PRINTCLIENT for its children: this is currently used by
+ // wxNotebook to draw themed background for them
+ //
+ // return true if the message was processed or false to use default logic
+ // for it (currently this means handling it just as WM_PAINT i.e. render
+ // the control into the provided DC)
+ virtual bool MSWPrintChild(wxWindow *win, WXWPARAM wParam, WXLPARAM lParam);
+
// Responds to colour changes: passes event on to children.
void OnSysColourChanged(wxSysColourChangedEvent& event);
// check if mouse is in the window
bool IsMouseInWindow() const;
+ // synthesize a wxEVT_LEAVE_WINDOW event and set m_mouseInWindow to false
+ void GenerateMouseLeave();
+
// virtual function for implementing internal idle
// behaviour
virtual void OnInternalIdle() ;
int m_lastMouseEvent;
#endif // wxUSE_MOUSEEVENT_HACK
- WXHMENU m_hMenu; // Menu, if any
-
// implement the base class pure virtuals
virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const;
wxKeyEvent CreateKeyEvent(wxEventType evType, int id,
WXLPARAM lParam = 0, WXWPARAM wParam = 0) const;
+
+ // default OnEraseBackground() implementation, return true if we did erase
+ // the background, false otherwise
+ bool DoEraseBackground(wxDC& dc);
+
private:
// common part of all ctors
void Init();
// number of calls to Freeze() minus number of calls to Thaw()
unsigned int m_frozenness;
+ // current defer window position operation handle (may be NULL)
+ WXHANDLE m_hDWP;
+
+
DECLARE_DYNAMIC_CLASS(wxWindowMSW)
DECLARE_NO_COPY_CLASS(wxWindowMSW)
DECLARE_EVENT_TABLE()