Fix wxUxThemeEngine on WinXP after DrawItemText() addition

The recent addition of DrawThemeTextEx in
b7a89f8746 (Add wxRendererNative::DrawItemText()
for list-like controls) broke initialization of uxtheme on WinXP as
DrawThemeEx is only available on Vista+.

Closes https://github.com/wxWidgets/wxWidgets/pull/101/
This commit is contained in:
Tobias Taschner
2015-09-23 20:21:38 +02:00
committed by Vadim Zeitlin
parent 2eccc1a57d
commit 42338fb5fd
2 changed files with 9 additions and 3 deletions

View File

@@ -983,7 +983,8 @@ void wxRendererXP::DrawItemText(wxWindow* win,
itemState |= LISS_DISABLED;
wxUxThemeEngine* te = wxUxThemeEngine::Get();
if ( te->IsThemePartDefined(hTheme, LVP_LISTITEM, itemState) )
if ( te->DrawThemeTextEx && // Might be not available if we're under XP
te->IsThemePartDefined(hTheme, LVP_LISTITEM, itemState) )
{
RECT rc;
wxCopyRectToRECT(rect, rc);

View File

@@ -115,8 +115,11 @@ bool wxUxThemeEngine::Initialize()
if ( !m_dllUxTheme.Load(wxT("uxtheme.dll")) )
return false;
#define RESOLVE_OPTIONAL_UXTHEME_FUNCTION(type, funcname) \
funcname = (type)m_dllUxTheme.GetSymbol(wxT(#funcname))
#define RESOLVE_UXTHEME_FUNCTION(type, funcname) \
funcname = (type)m_dllUxTheme.GetSymbol(wxT(#funcname)); \
RESOLVE_OPTIONAL_UXTHEME_FUNCTION(type, funcname); \
if ( !funcname ) \
return false
@@ -124,7 +127,9 @@ bool wxUxThemeEngine::Initialize()
RESOLVE_UXTHEME_FUNCTION(PFNWXUCLOSETHEMEDATA, CloseThemeData);
RESOLVE_UXTHEME_FUNCTION(PFNWXUDRAWTHEMEBACKGROUND, DrawThemeBackground);
RESOLVE_UXTHEME_FUNCTION(PFNWXUDRAWTHEMETEXT, DrawThemeText);
RESOLVE_UXTHEME_FUNCTION(PFNWXUDRAWTHEMETEXTEX, DrawThemeTextEx);
// This function is not available under XP, so don't fail if it can't be
// resolved, we'll check before using it.
RESOLVE_OPTIONAL_UXTHEME_FUNCTION(PFNWXUDRAWTHEMETEXTEX, DrawThemeTextEx);
RESOLVE_UXTHEME_FUNCTION(PFNWXUGETTHEMEBACKGROUNDCONTENTRECT, GetThemeBackgroundContentRect);
RESOLVE_UXTHEME_FUNCTION(PFNWXUGETTHEMEBACKGROUNDEXTENT, GetThemeBackgroundExtent);
RESOLVE_UXTHEME_FUNCTION(PFNWXUGETTHEMEPARTSIZE, GetThemePartSize);