-// Windows only: attempts to get colour for UX theme page background
-wxColour wxNotebook::GetThemeBackgroundColour()
-{
-#if wxUSE_UXTHEME
- if (wxUxThemeEngine::Get())
- {
- wxUxThemeHandle hTheme(this, L"TAB");
- if (hTheme)
- {
- // This is total guesswork.
- // See PlatformSDK\Include\Tmschema.h for values
- COLORREF themeColor;
- wxUxThemeEngine::Get()->GetThemeColor(
- hTheme,
- 10 /* TABP_BODY */,
- 1 /* NORMAL */,
- 3802 /* color of bg fill */,
- &themeColor);
-
- wxColour colour(GetRValue(themeColor), GetGValue(themeColor), GetBValue(themeColor));
- return colour;
- }
- }
-#endif // wxUSE_UXTHEME
-
- return GetBackgroundColour();
-}
-
-// Windows only: attempts to apply the UX theme page background to this page
-#if wxUSE_UXTHEME
-void wxNotebook::ApplyThemeBackground(wxWindow* window, const wxColour& colour)
-#else
-void wxNotebook::ApplyThemeBackground(wxWindow*, const wxColour&)
-#endif
-{
-#if wxUSE_UXTHEME
- // Don't set the background for buttons since this will
- // switch it into ownerdraw mode
- if (window->IsKindOf(CLASSINFO(wxButton)) && !window->IsKindOf(CLASSINFO(wxBitmapButton)))
- // This is essential, otherwise you'll see dark grey
- // corners in the buttons.
- ((wxButton*)window)->wxControl::SetBackgroundColour(colour);
- else if (window->IsKindOf(CLASSINFO(wxStaticText)) ||
- window->IsKindOf(CLASSINFO(wxStaticBox)) ||
- window->IsKindOf(CLASSINFO(wxStaticLine)) ||
- window->IsKindOf(CLASSINFO(wxRadioButton)) ||
- window->IsKindOf(CLASSINFO(wxRadioBox)) ||
- window->IsKindOf(CLASSINFO(wxCheckBox)) ||
- window->IsKindOf(CLASSINFO(wxBitmapButton)) ||
- window->IsKindOf(CLASSINFO(wxSlider)) ||
- window->IsKindOf(CLASSINFO(wxPanel)) ||
- (window->IsKindOf(CLASSINFO(wxNotebook)) && (window != this)) ||
- window->IsKindOf(CLASSINFO(wxScrolledWindow))
- )
- {
- window->SetBackgroundColour(colour);
- }
-
- for ( wxWindowList::compatibility_iterator node = window->GetChildren().GetFirst(); node; node = node->GetNext() )
- {
- wxWindow *child = node->GetData();
- ApplyThemeBackground(child, colour);
- }
-#endif
-}
-
-#if wxUSE_UXTHEME
-long wxNotebook::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
-{
- static bool g_TestedForTheme = false;
- static bool g_supportsThemes = false;
- switch ( nMsg )
- {
- case WM_ERASEBKGND:
- {
- if (!g_TestedForTheme)
- {
- int commCtrlVersion = wxTheApp->GetComCtl32Version() ;
-
- g_supportsThemes = (commCtrlVersion >= 600);
- g_TestedForTheme = true;
- }
-
- // If currently an XP theme is active, it seems we can get away
- // with not drawing a background, which reduces flicker.
- if (g_supportsThemes)
- {
- wxUxThemeEngine *p = wxUxThemeEngine::Get();
- if (p && p->IsThemeActive() )
- {
- return true;
- }
- }
- }
- }
-
- return wxControl::MSWWindowProc(nMsg, wParam, lParam);
-}
-#endif // #if wxUSE_UXTHEME
-