}
// return the themed brush for painting our children
- virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, WXHWND hWnd);
+ virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, wxWindow *child);
// draw child background
virtual bool MSWPrintChild(WXHDC hDC, wxWindow *win);
// background or 0 if this window doesn't impose any particular background
// on its children
//
+ // the hDC parameter is the DC background will be drawn on, it can be used
+ // to call SetBrushOrgEx() on it if the returned brush is a bitmap one
+ //
+ // child parameter is never NULL
+ //
// the base class version returns a solid brush if we have a non default
// background colour or 0 otherwise
- virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, WXHWND hWnd);
+ virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, wxWindowMSW *child);
// return the background brush to use for painting the given window by
// quering the parent windows via their MSWGetBgBrushForChild() recursively
- //
- // hWndToPaint is normally NULL meaning this window itself, but it can also
- // be a child of this window which is used by the static box and could be
- // potentially useful for other transparent controls
- WXHBRUSH MSWGetBgBrush(WXHDC hDC, WXHWND hWndToPaint = NULL);
+ WXHBRUSH MSWGetBgBrush(WXHDC hDC) { return MSWGetBgBrush(hDC, this); }
+ WXHBRUSH MSWGetBgBrush(WXHDC hDC, wxWindowMSW *child);
// gives the parent the possibility to draw its children background, e.g.
// this is used by wxNotebook to do it using DrawThemeBackground()
WXHBRUSH hbr = 0;
if ( !colBg.Ok() )
{
- hbr = MSWGetBgBrush(pDC, hWnd);
+ if ( wxWindow *win = wxFindWinFromHandle(hWnd) )
+ hbr = MSWGetBgBrush(pDC, win);
// if the control doesn't have any bg colour, foreground colour will be
// ignored as the return value would be 0 -- so forcefully give it a
}
}
-WXHBRUSH wxNotebook::MSWGetBgBrushForChild(WXHDC hDC, WXHWND hWnd)
+WXHBRUSH wxNotebook::MSWGetBgBrushForChild(WXHDC hDC, wxWindow *child)
{
if ( m_hbrBackground )
{
// before drawing with the background brush, we need to position it
// correctly
RECT rc;
- ::GetWindowRect((HWND)hWnd, &rc);
+ ::GetWindowRect(GetHwndOf(child), &rc);
::MapWindowPoints(NULL, GetHwnd(), (POINT *)&rc, 1);
return m_hbrBackground;
}
- return wxNotebookBase::MSWGetBgBrushForChild(hDC, hWnd);
+ return wxNotebookBase::MSWGetBgBrushForChild(hDC, child);
}
bool wxNotebook::MSWPrintChild(WXHDC hDC, wxWindow *child)
// see http://groups.google.com/groups?selm=4252E932.3080801%40able.es
wxWindow *parent = GetParent();
wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
- HBRUSH hbr = (HBRUSH)parent->MSWGetBgBrush(impl->GetHDC(), GetHWND());
+ HBRUSH hbr = (HBRUSH)parent->MSWGetBgBrush(impl->GetHDC(), this);
// if there is no special brush for painting this control, just use the
// solid background colour
}
WXHBRUSH
-wxWindowMSW::MSWGetBgBrushForChild(WXHDC WXUNUSED(hDC), WXHWND hWnd)
+wxWindowMSW::MSWGetBgBrushForChild(WXHDC WXUNUSED(hDC), wxWindowMSW *child)
{
if ( m_hasBgCol )
{
// children because it would look wrong if a child of non
// transparent child would show our bg colour when the child itself
// does not
- wxWindow *win = wxFindWinFromHandle(hWnd);
- if ( win == this ||
+ if ( child == this ||
m_inheritBgCol ||
- (win && win->HasTransparentBackground() &&
- win->GetParent() == this) )
+ (child->HasTransparentBackground() &&
+ child->GetParent() == this) )
{
// draw children with the same colour as the parent
wxBrush *
return 0;
}
-WXHBRUSH wxWindowMSW::MSWGetBgBrush(WXHDC hDC, WXHWND hWndToPaint)
+WXHBRUSH wxWindowMSW::MSWGetBgBrush(WXHDC hDC, wxWindowMSW *child)
{
- if ( !hWndToPaint )
- hWndToPaint = GetHWND();
-
for ( wxWindowMSW *win = this; win; win = win->GetParent() )
{
- WXHBRUSH hBrush = win->MSWGetBgBrushForChild(hDC, hWndToPaint);
+ WXHBRUSH hBrush = win->MSWGetBgBrushForChild(hDC, child);
if ( hBrush )
return hBrush;