]> git.saurik.com Git - wxWidgets.git/commitdiff
extended wxWindow::MSWGetBgBrush() and wxControl::MSWControlColor() to work for arbit...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 10 Apr 2005 21:55:12 +0000 (21:55 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 10 Apr 2005 21:55:12 +0000 (21:55 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33488 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/choice.h
include/wx/msw/control.h
include/wx/msw/notebook.h
include/wx/msw/textctrl.h
include/wx/msw/window.h
src/msw/choice.cpp
src/msw/control.cpp
src/msw/notebook.cpp
src/msw/textctrl.cpp
src/msw/window.cpp

index 5348fd5e26e067c1a42f65e749c7cf1be292bd6a..5667010c9a2730f8db1717e5a219e8e99faa93f7 100644 (file)
@@ -84,7 +84,7 @@ public:
     // MSW only
     virtual bool MSWCommand(WXUINT param, WXWORD id);
     WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
-    virtual WXHBRUSH MSWControlColor(WXHDC hDC);
+    virtual WXHBRUSH MSWControlColor(WXHDC hDC, WXHWND hWnd);
 
 protected:
     virtual void DoMoveWindow(int x, int y, int width, int height);
index a917a0e4496ed276b479d4403856d8a948b7cbaa..f220821fbbe3e301cb89d429dcec2d3e1ac6ab48 100644 (file)
@@ -72,7 +72,7 @@ public:
 
     // default handling of WM_CTLCOLORxxx: this is public so that wxWindow
     // could call it
-    virtual WXHBRUSH MSWControlColor(WXHDC pDC);
+    virtual WXHBRUSH MSWControlColor(WXHDC pDC, WXHWND hWnd);
 
 protected:
     // choose the default border for this window
@@ -127,7 +127,7 @@ protected:
     // common part of the 3 functions above: pass wxNullColour to use the
     // appropriate background colour (meaning ours or our parents) or a fixed
     // one
-    virtual WXHBRUSH DoMSWControlColor(WXHDC pDC, wxColour colBg);
+    virtual WXHBRUSH DoMSWControlColor(WXHDC pDC, wxColour colBg, WXHWND hWnd);
 
     // this is a helper for the derived class GetClassDefaultAttributes()
     // implementation: it returns the right colours for the classes which
index 27e9160960421ef166907c563b414adad51f7572..1ddd735d415fa8520e0594630593cc7d9afa6d04 100644 (file)
@@ -211,7 +211,7 @@ protected:
   void UpdateBgBrush();
 
   // return the themed brush for painting our children
-  virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, wxWindow *win);
+  virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, WXHWND hWnd);
 
   // draw child background
   virtual bool MSWPrintChild(WXHDC hDC, wxWindow *win);
index 3f09055cdfaae2bb9a50ac13540f096a3fb0f453..5d7815f099d1200fcc65e1919642aeb14a780d0b 100644 (file)
@@ -148,7 +148,7 @@ public:
 
     virtual void Command(wxCommandEvent& event);
     virtual bool MSWCommand(WXUINT param, WXWORD id);
-    virtual WXHBRUSH MSWControlColor(WXHDC hDC);
+    virtual WXHBRUSH MSWControlColor(WXHDC hDC, WXHWND hWnd);
 
 #if wxUSE_RICHEDIT
     virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
index dc7bbad25652563f19cab827f57e23fa4d27df29..688cf27772ad805c909e1120effa27f9e03b61ab 100644 (file)
@@ -365,15 +365,15 @@ public:
     //
     // the base class version returns a solid brush if we have a non default
     // background colour or 0 otherwise
-    virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, wxWindow *child);
+    virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, WXHWND hWnd);
 
     // return the background brush to use for painting the given window by
     // quering the parent windows via their MSWGetBgBrushForChild() recursively
     //
-    // winToPaint is normally NULL meaning this window itself, but it can also
+    // 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, wxWindow *winToPaint = NULL);
+    WXHBRUSH MSWGetBgBrush(WXHDC hDC, WXHWND hWndToPaint = NULL);
 
     // gives the parent the possibility to draw its children background, e.g.
     // this is used by wxNotebook to do it using DrawThemeBackground()
index bf0739540fe63664847dad5114b3517dcf548d7c..c8681252f84f74f24bdc8a9dc3075d13067cc0be 100644 (file)
@@ -599,7 +599,7 @@ WXLRESULT wxChoice::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
                 WXHWND hwnd;
                 UnpackCtlColor(wParam, lParam, &hdc, &hwnd);
 
-                WXHBRUSH hbr = MSWControlColor((WXHDC)hdc);
+                WXHBRUSH hbr = MSWControlColor((WXHDC)hdc, hwnd);
                 if ( hbr )
                     return (WXLRESULT)hbr;
                 //else: fall through to default window proc
@@ -634,12 +634,12 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
     return true;
 }
 
-WXHBRUSH wxChoice::MSWControlColor(WXHDC hDC)
+WXHBRUSH wxChoice::MSWControlColor(WXHDC hDC, WXHWND hWnd)
 {
     if ( !IsEnabled() )
         return MSWControlColorDisabled(hDC);
 
-    return wxChoiceBase::MSWControlColor(hDC);
+    return wxChoiceBase::MSWControlColor(hDC, hWnd);
 }
 
 #endif // wxUSE_CHOICE && !(__SMARTPHONE__ && __WXWINCE__)
index d17556945e44784110602d6c71238052fb4d81f7..d0395958a37a0742d86c8f67261b0d3c50487011 100644 (file)
@@ -332,7 +332,7 @@ bool wxControl::MSWOnNotify(int idCtrl,
 }
 #endif // Win95
 
-WXHBRUSH wxControl::DoMSWControlColor(WXHDC pDC, wxColour colBg)
+WXHBRUSH wxControl::DoMSWControlColor(WXHDC pDC, wxColour colBg, WXHWND hWnd)
 {
     HDC hdc = (HDC)pDC;
     if ( m_hasFgCol )
@@ -343,7 +343,7 @@ WXHBRUSH wxControl::DoMSWControlColor(WXHDC pDC, wxColour colBg)
     WXHBRUSH hbr = 0;
     if ( !colBg.Ok() )
     {
-        hbr = MSWGetBgBrush(pDC);
+        hbr = MSWGetBgBrush(pDC, hWnd);
 
         // 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
@@ -366,7 +366,7 @@ WXHBRUSH wxControl::DoMSWControlColor(WXHDC pDC, wxColour colBg)
     return hbr;
 }
 
-WXHBRUSH wxControl::MSWControlColor(WXHDC pDC)
+WXHBRUSH wxControl::MSWControlColor(WXHDC pDC, WXHWND hWnd)
 {
     wxColour colBg;
 
@@ -375,13 +375,14 @@ WXHBRUSH wxControl::MSWControlColor(WXHDC pDC)
     else // if the control is opaque it shouldn't use the parents background
         colBg = GetBackgroundColour();
 
-    return DoMSWControlColor(pDC, colBg);
+    return DoMSWControlColor(pDC, colBg, hWnd);
 }
 
 WXHBRUSH wxControl::MSWControlColorDisabled(WXHDC pDC)
 {
     return DoMSWControlColor(pDC,
-                             wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
+                             wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE),
+                             GetHWND());
 }
 
 // ---------------------------------------------------------------------------
index a9d59425a9cd51e4de0ecb0ba891d14c4a41a044..cb09470b78e15213b8bef66631b46a597ea10a90 100644 (file)
@@ -1036,14 +1036,14 @@ void wxNotebook::UpdateBgBrush()
     }
 }
 
-WXHBRUSH wxNotebook::MSWGetBgBrushForChild(WXHDC hDC, wxWindow *win)
+WXHBRUSH wxNotebook::MSWGetBgBrushForChild(WXHDC hDC, WXHWND hWnd)
 {
     if ( m_hbrBackground )
     {
         // before drawing with the background brush, we need to position it
         // correctly
         RECT rc;
-        ::GetWindowRect(GetHwndOf(win), &rc);
+        ::GetWindowRect((HWND)hWnd, &rc);
 
         ::MapWindowPoints(NULL, GetHwnd(), (POINT *)&rc, 1);
 
@@ -1055,7 +1055,7 @@ WXHBRUSH wxNotebook::MSWGetBgBrushForChild(WXHDC hDC, wxWindow *win)
         return m_hbrBackground;
     }
 
-    return wxNotebookBase::MSWGetBgBrushForChild(hDC, win);
+    return wxNotebookBase::MSWGetBgBrushForChild(hDC, hWnd);
 }
 
 bool wxNotebook::MSWPrintChild(WXHDC hDC, wxWindow *child)
index 0d2db8f3ca155d70c778a02dc72cc9ff24b9e4d5..7151acb27dec4dc928ba40675328e169c6a17e63 100644 (file)
@@ -1886,12 +1886,12 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
     return true;
 }
 
-WXHBRUSH wxTextCtrl::MSWControlColor(WXHDC hDC)
+WXHBRUSH wxTextCtrl::MSWControlColor(WXHDC hDC, WXHWND hWnd)
 {
     if ( !IsEnabled() && !HasFlag(wxTE_MULTILINE) )
         return MSWControlColorDisabled(hDC);
 
-    return wxTextCtrlBase::MSWControlColor(hDC);
+    return wxTextCtrlBase::MSWControlColor(hDC, hWnd);
 }
 
 bool wxTextCtrl::AdjustSpaceLimit()
index 43d21ba44d0f071501891a7c2456b4d803ccedec..d4d1edf578f0cab6293a43ca886678268b52e5c8 100644 (file)
@@ -3707,13 +3707,13 @@ bool wxWindowMSW::HandleDisplayChange()
 
 #ifndef __WXMICROWIN__
 
-bool wxWindowMSW::HandleCtlColor(WXHBRUSH *brush, WXHDC pDC, WXHWND pWnd)
+bool wxWindowMSW::HandleCtlColor(WXHBRUSH *brush, WXHDC pDC, WXHWND hWnd)
 {
 #if wxUSE_CONTROLS
-    wxControl *item = wxDynamicCast(FindItemByHWND(pWnd, true), wxControl);
+    wxControl *item = wxDynamicCast(FindItemByHWND(hWnd, true), wxControl);
 
     if ( item )
-        *brush = item->MSWControlColor(pDC);
+        *brush = item->MSWControlColor(pDC, hWnd);
     else
 #endif // wxUSE_CONTROLS
         *brush = NULL;
@@ -4003,7 +4003,7 @@ bool wxWindowMSW::DoEraseBackground(WXHDC hDC)
 }
 
 WXHBRUSH
-wxWindowMSW::MSWGetBgBrushForChild(WXHDC WXUNUSED(hDC), wxWindow *child)
+wxWindowMSW::MSWGetBgBrushForChild(WXHDC WXUNUSED(hDC), WXHWND hWnd)
 {
     if ( m_hasBgCol )
     {
@@ -4015,10 +4015,11 @@ wxWindowMSW::MSWGetBgBrushForChild(WXHDC WXUNUSED(hDC), wxWindow *child)
         //     children because it would look wrong if a child of non
         //     transparent child would show our bg colour when the child itself
         //     does not
-        if ( child == this ||
+        wxWindow *win = wxFindWinFromHandle(hWnd);
+        if ( win == this ||
                 m_inheritBgCol ||
-                    (child->HasTransparentBackground() &&
-                        child->GetParent() == this) )
+                    (win && win->HasTransparentBackground() &&
+                        win->GetParent() == this) )
         {
             // draw children with the same colour as the parent
             wxBrush *
@@ -4031,14 +4032,14 @@ wxWindowMSW::MSWGetBgBrushForChild(WXHDC WXUNUSED(hDC), wxWindow *child)
     return 0;
 }
 
-WXHBRUSH wxWindowMSW::MSWGetBgBrush(WXHDC hDC, wxWindow *winToPaint)
+WXHBRUSH wxWindowMSW::MSWGetBgBrush(WXHDC hDC, WXHWND hWndToPaint)
 {
-    if ( !winToPaint )
-        winToPaint = this;
+    if ( !hWndToPaint )
+        hWndToPaint = GetHWND();
 
     for ( wxWindowMSW *win = this; win; win = win->GetParent() )
     {
-        WXHBRUSH hBrush = win->MSWGetBgBrushForChild(hDC, winToPaint);
+        WXHBRUSH hBrush = win->MSWGetBgBrushForChild(hDC, hWndToPaint);
         if ( hBrush )
             return hBrush;