]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/combo.cpp
svn not cvs
[wxWidgets.git] / src / msw / combo.cpp
index c02a3ee3453dd70ef7fee9edff26464b455a546c..3ddde4f0af242728cbd0063657ef269c93ee166d 100644 (file)
@@ -216,22 +216,36 @@ wxComboCtrl::~wxComboCtrl()
 
 void wxComboCtrl::OnThemeChange()
 {
 
 void wxComboCtrl::OnThemeChange()
 {
-    wxUxThemeEngine* theme = wxUxThemeEngine::GetIfActive();
+    // there doesn't seem to be any way to get the text colour using themes
+    // API: TMT_TEXTCOLOR doesn't work neither for EDIT nor COMBOBOX
+    SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT));
+
+    wxUxThemeEngine * const theme = wxUxThemeEngine::GetIfActive();
     if ( theme )
     {
     if ( theme )
     {
-        wxUxThemeHandle hTheme(this, L"COMBOBOX");
-
+        // NB: use EDIT, not COMBOBOX (the latter works in XP but not Vista)
+        wxUxThemeHandle hTheme(this, L"EDIT");
         COLORREF col;
         COLORREF col;
-        theme->GetThemeColor(hTheme,EP_EDITTEXT,ETS_NORMAL,TMT_FILLCOLOR,&col);
-        SetBackgroundColour(wxRGBToColour(col));
-        theme->GetThemeColor(hTheme,EP_EDITTEXT,ETS_NORMAL,TMT_TEXTCOLOR,&col);
-        SetForegroundColour(wxRGBToColour(col));
-    }
-    else
-    {
-        SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
-        SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT));
+        HRESULT hr = theme->GetThemeColor
+                            (
+                                hTheme,
+                                EP_EDITTEXT,
+                                ETS_NORMAL,
+                                TMT_FILLCOLOR,
+                                &col
+                            );
+        if ( SUCCEEDED(hr) )
+        {
+            SetBackgroundColour(wxRGBToColour(col));
+
+            // skip the call below
+            return;
+        }
+
+        wxLogApiError(_T("GetThemeColor(EDIT, ETS_NORMAL, TMT_FILLCOLOR)"), hr);
     }
     }
+
+    SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
 }
 
 void wxComboCtrl::OnResize()
 }
 
 void wxComboCtrl::OnResize()