From: Julian Smart Date: Sun, 1 Jun 2003 15:18:36 +0000 (+0000) Subject: Applied patch [ 619386 ] uxtheme.dll support X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/0d1cb8cb298ae68754575cb65695ff9567a36899 Applied patch [ 619386 ] uxtheme.dll support with filename changes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20819 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/msw/uxtheme.h b/include/wx/msw/uxtheme.h new file mode 100644 index 0000000000..666202b678 --- /dev/null +++ b/include/wx/msw/uxtheme.h @@ -0,0 +1,320 @@ +/* + * wxuxthem.h : wxWindows support for Microsoft Windows XP Theme library + * (uxtheme.dll) + * Modified to work with almost all Win32 compilers + * Compiler must support Unicode, the __cdecl calling convention, and the + * __stdcall calling convention + */ + +#ifndef _WX_UXTHEME_H_ +#define _WX_UXTHEME_H_ + +// Use wxModule approach to initialization. +#define WXU_USE_WXMODULE 1 + +#if wxUSE_UNICODE +typedef struct _WXUOSVERSIONINFOEXW { + WXDWORD dwOSVersionInfoSize; + WXDWORD dwMajorVersion; + WXDWORD dwMinorVersion; + WXDWORD dwBuildNumber; + WXDWORD dwPlatformId; + wchar_t szCSDVersion[ 128 ]; // Maintenance string for PSS usage + unsigned short wServicePackMajor; + unsigned short wServicePackMinor; + unsigned short wSuiteMask; + unsigned char wProductType; + unsigned char wReserved; +} WXUOSVERSIONINFOEXW, *PWXUOSVERSIONINFOEXW, *LPWXUOSVERSIONINFOEXW; +#define WXUOSVERSIONINFOEX WXUOSVERSIONINFOEXW +#define PWXUOSVERSIONINFOEX PWXUOSVERSIONINFOEXW +#define LPWXUOSVERSIONINFOEX LPWXUOSVERSIONINFOEXW +#else +typedef struct _WXUOSVERSIONINFOEXA { + WXDWORD dwOSVersionInfoSize; + WXDWORD dwMajorVersion; + WXDWORD dwMinorVersion; + WXDWORD dwBuildNumber; + WXDWORD dwPlatformId; + char szCSDVersion [128]; // Maintenance string for PSS usage + unsigned short wServicePackMajor; + unsigned short wServicePackMinor; + unsigned short wSuiteMask; + unsigned char wProductType; + unsigned char wReserved; +} WXUOSVERSIONINFOEXA, *PWXUOSVERSIONINFOEXA, *LPWXUOSVERSIONINFOEXA; +#define WXUOSVERSIONINFOEX WXUOSVERSIONINFOEXA +#define PWXUOSVERSIONINFOEX PWXUOSVERSIONINFOEXA +#define LPWXUOSVERSIONINFOEX LPWXUOSVERSIONINFOEXA +#endif + +typedef int WXUBOOL ; + +typedef struct tagWXURECT +{ + long left; + long top; + long right; + long bottom; +} WXURECT ; + +typedef void* WXHTHEME; +typedef long WXUHRESULT; +typedef WXHTHEME (__stdcall *PFNWXUOPENTHEMEDATA)(WXHWND, const wchar_t *) ; +typedef WXUHRESULT (__stdcall *PFNWXUCLOSETHEMEDATA)(WXHTHEME) ; +typedef WXUHRESULT (__stdcall *PFNWXUDRAWTHEMEBACKGROUND)(WXHTHEME, WXHDC, + int, int, const WXURECT *, const WXURECT *) ; +#define WXU_DTT_GRAYED 0x1 +typedef WXUHRESULT (__stdcall *PFNWXUDRAWTHEMETEXT)(WXHTHEME, WXHDC, int, + int, const wchar_t *, int, DWORD, + DWORD, const WXURECT *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEBACKGROUNDCONTENTRECT)(WXHTHEME, WXHDC, + int, int, const WXURECT *, WXURECT *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEBACKGROUNDEXTENT)(WXHTHEME, WXHDC, int, int, + const WXURECT *, WXURECT *) ; + +typedef enum WXUTHEMESIZE +{ + WXU_TS_MIN, // minimum size + WXU_TS_TRUE, // size without stretching + WXU_TS_DRAW, // size that theme mgr will use to draw part +}; + +typedef struct tagWXUSIZE +{ + long cx; + long cy; +} WXUSIZE ; + +typedef struct tagWXUTEXTMETRIC +{ + long tmHeight; + long tmAscent; + long tmDescent; + long tmInternalLeading; + long tmExternalLeading; + long tmAveCharWidth; + long tmMaxCharWidth; + long tmWeight; + long tmOverhang; + long tmDigitizedAspectX; + long tmDigitizedAspectY; + wchar_t tmFirstChar; + wchar_t tmLastChar; + wchar_t tmDefaultChar; + wchar_t tmBreakChar; + unsigned char tmItalic; + unsigned char tmUnderlined; + unsigned char tmStruckOut; + unsigned char tmPitchAndFamily; + unsigned char tmCharSet; +} WXUTEXTMETRIC; + +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEPARTSIZE)(WXHTHEME, WXHDC, int, int, const WXURECT *, + enum WXUTHEMESIZE, WXUSIZE *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMETEXTEXTENT)(WXHTHEME, WXHDC, int, int, const wchar_t *, + int, WXDWORD, const WXURECT *, WXURECT *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMETEXTMETRICS)(WXHTHEME, WXHDC, + int, int, WXUTEXTMETRIC*); +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEBACKGROUNDREGION)(WXHTHEME, WXHDC, + int, int, const WXURECT *, WXHRGN *) ; + +#define WXU_HTTB_BACKGROUNDSEG 0x0000 +#define WXU_HTTB_FIXEDBORDER 0x0002 +#define WXU_HTTB_CAPTION 0x0004 +#define WXU_HTTB_RESIZINGBORDER_LEFT 0x0010 +#define WXU_HTTB_RESIZINGBORDER_TOP 0x0020 +#define WXU_HTTB_RESIZINGBORDER_RIGHT 0x0040 +#define WXU_HTTB_RESIZINGBORDER_BOTTOM 0x0080 +#define WXU_HTTB_RESIZINGBORDER 0x00F0 +#define WXU_HTTB_SIZINGTEMPLATE 0x0100 +#define WXU_HTTB_SYSTEMSIZINGMARGINS 0x0200 + +typedef struct tagWXUPOINT +{ + long x; + long y; +} WXUPOINT ; + +typedef WXUHRESULT (__stdcall *PFNWXUHITTESTTHEMEBACKGROUND)(WXHTHEME, WXHDC, int, + int, WXDWORD, const WXURECT *, WXHRGN, + WXUPOINT, unsigned short *) ; +typedef WXUHRESULT (__stdcall *PFNWXUDRAWTHEMEEDGE)(WXHTHEME, WXHDC, int, int, + const WXURECT *, unsigned int, unsigned int, WXURECT *); +typedef WXUHRESULT (__stdcall *PFNWXUDRAWTHEMEICON)(WXHTHEME, WXHDC, int, int, + const WXURECT *, WXHIMAGELIST, int) ; +typedef WXUBOOL (__stdcall *PFNWXUISTHEMEPARTDEFINED)(WXHTHEME, int, int) ; +typedef WXUBOOL (__stdcall *PFNWXUISTHEMEBACKGROUNDPARTIALLYTRANSPARENT)(WXHTHEME, int, int) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMECOLOR)(WXHTHEME, int, int, int, WXCOLORREF) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEMETRIC)(WXHTHEME, WXHDC, int, + int, int, int *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMESTRING)(WXHTHEME, int, + int, int, wchar_t *, int) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEBOOL)(WXHTHEME, int, int, int, WXUBOOL *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEINT)(WXHTHEME, int, int, int, int *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEENUMVALUE)(WXHTHEME, int, int, int, int *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEPOSITION)(WXHTHEME, int, int, int, WXUPOINT *) ; +typedef struct tagWXULOGFONT +{ + long lfHeight; + long lfWidth; + long lfEscapement; + long lfOrientation; + long lfWeight; + unsigned char lfItalic; + unsigned char lfUnderline; + unsigned char lfStrikeOut; + unsigned char lfCharSet; + unsigned char lfOutPrecision; + unsigned char lfClipPrecision; + unsigned char lfQuality; + unsigned char lfPitchAndFamily; + wchar_t lfFaceName[32]; +} WXULOGFONT ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEFONT)(WXHTHEME, WXHDC, int, int, int, WXULOGFONT *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMERECT)(WXHTHEME, int, int, int, WXURECT *) ; +typedef struct _WXUMARGINS +{ + int cxLeftWidth; // width of left border that retains its size + int cxRightWidth; // width of right border that retains its size + int cyTopHeight; // height of top border that retains its size + int cyBottomHeight; // height of bottom border that retains its size +} WXUMARGINS, *PWXUMARGINS; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEMARGINS)(WXHTHEME, WXHDC, int, + int, int, WXURECT *, WXUMARGINS *) ; + +#define WXU_MAX_INTLIST_COUNT 10 +typedef struct _WXUINTLIST +{ + int iValueCount; // number of values in iValues + int iValues[WXU_MAX_INTLIST_COUNT]; +} WXUINTLIST, *PWXUINTLIST; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEINTLIST)(WXHTHEME, int, + int, int, WXUINTLIST*) ; +typedef enum WXUPROPERTYORIGIN +{ + WXU_PO_STATE, // property was found in the state section + WXU_PO_PART, // property was found in the part section + WXU_PO_CLASS, // property was found in the class section + WXU_PO_GLOBAL, // property was found in [globals] section + WXU_PO_NOTFOUND // property was not found +}; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEPROPERTYORIGIN)(WXHTHEME, int, + int, int, enum WXUPROPERTYORIGIN *) ; +typedef WXUHRESULT (__stdcall *PFNWXUSETWINDOWTHEME)(WXHWND, const wchar_t*, const wchar_t *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEFILENAME)(WXHTHEME, int, int, int, wchar_t *, int) ; +typedef WXCOLORREF (__stdcall *PFNWXUGETTHEMESYSCOLOR)(WXHTHEME, int) ; +typedef WXHBRUSH (__stdcall *PFNWXUGETTHEMESYSCOLORBRUSH)(WXHTHEME, int) ; +typedef WXUBOOL (__stdcall *PFNWXUGETTHEMESYSBOOL)(WXHTHEME, int) ; +typedef int (__stdcall *PFNWXUGETTHEMESYSSIZE)(WXHTHEME, int) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMESYSFONT)(WXHTHEME, int, WXULOGFONT *) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMESYSSTRING)(WXHTHEME, int, wchar_t *, int) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMESYSINT)(WXHTHEME, int, int *) ; +typedef WXUBOOL (__stdcall *PFNWXUISTHEMEACTIVE)() ; +typedef WXUBOOL (__stdcall *PFNWXUISAPPTHEMED)() ; +typedef WXHTHEME (__stdcall *PFNWXUGETWINDOWTHEME)(WXHWND) ; + +#define WXU_ETDT_DISABLE 0x00000001 +#define WXU_ETDT_ENABLE 0x00000002 +#define WXU_ETDT_USETABTEXTURE 0x00000004 +#define WXU_ETDT_ENABLETAB 0x00000006 + +typedef WXUHRESULT (__stdcall *PFNWXUENABLETHEMEDIALOGTEXTURE)(WXHWND, WXDWORD) ; +typedef WXUBOOL (__stdcall *PFNWXUISTHEMEDIALOGTEXTUREENABLED)(WXHWND) ; + +#define WXU_STAP_ALLOW_NONCLIENT 1 +#define WXU_STAP_ALLOW_CONTROLS 2 +#define WXU_STAP_ALLOW_WEBCONTENT 4 + +typedef WXDWORD (__stdcall *PFNWXUGETTHEMEAPPPROPERTIES)() ; +typedef void (__stdcall *PFNWXUSETTHEMEAPPPROPERTIES)(WXDWORD) ; +typedef WXUHRESULT (__stdcall *PFNWXUGETCURRENTTHEMENAME)(wchar_t *, int, + wchar_t *, int, wchar_t *, int) ; + +#define WXU_SZ_THDOCPROP_DISPLAYNAME L"DisplayName" +#define WXU_SZ_THDOCPROP_CANONICALNAME L"ThemeName" +#define WXU_SZ_THDOCPROP_TOOLTIP L"ToolTip" +#define WXU_SZ_THDOCPROP_AUTHOR L"author" + +typedef WXUHRESULT (__stdcall *PFNWXUGETTHEMEDOCUMENTATIONPROPERTY)(const wchar_t *, + const wchar_t *, wchar_t *, int) ; +typedef WXUHRESULT (__stdcall *PFNWXUDRAWTHEMEPARENTBACKGROUND)(WXHWND, WXHDC, WXURECT *) ; +typedef WXUHRESULT (__stdcall *PFNWXUENABLETHEMING)(WXUBOOL) ; + +class wxUxThemeEngine +{ +private: + wxUxThemeEngine() ; + +public: + ~wxUxThemeEngine() ; + bool IsInitialized() const { return m_bIsInitialized ; } + +private: + bool m_bIsInitialized ; + HINSTANCE m_hInstUXThemeDLL ; + +public: + static wxUxThemeEngine* wxInitUxThemeEngine() ; +protected: + void ResetFunctionPointers() ; +public: + PFNWXUOPENTHEMEDATA m_pfnOpenThemeData ; + PFNWXUCLOSETHEMEDATA m_pfnCloseThemeData ; + PFNWXUDRAWTHEMEBACKGROUND m_pfnDrawThemeBackground ; + PFNWXUDRAWTHEMETEXT m_pfnDrawThemeText ; + PFNWXUGETTHEMEBACKGROUNDCONTENTRECT m_pfnGetThemeBackgroundContentRect ; + PFNWXUGETTHEMEBACKGROUNDEXTENT m_pfnGetThemeBackgroundExtent ; + PFNWXUGETTHEMEPARTSIZE m_pfnGetThemePartSize ; + PFNWXUGETTHEMETEXTEXTENT m_pfnGetThemeTextExtent ; + PFNWXUGETTHEMETEXTMETRICS m_pfnGetThemeTextMetrics ; + PFNWXUGETTHEMEBACKGROUNDREGION m_pfnGetThemeBackgroundRegion ; + PFNWXUHITTESTTHEMEBACKGROUND m_pfnHitTestThemeBackground ; + PFNWXUDRAWTHEMEEDGE m_pfnDrawThemeEdge ; + PFNWXUDRAWTHEMEICON m_pfnDrawThemeIcon ; + PFNWXUISTHEMEPARTDEFINED m_pfnIsThemePartDefined ; + PFNWXUISTHEMEBACKGROUNDPARTIALLYTRANSPARENT m_pfnIsThemeBackgroundPartiallyTransparent ; + PFNWXUGETTHEMECOLOR m_pfnGetThemeColor ; + PFNWXUGETTHEMEMETRIC m_pfnGetThemeMetric ; + PFNWXUGETTHEMESTRING m_pfnGetThemeString ; + PFNWXUGETTHEMEBOOL m_pfnGetThemeBool ; + PFNWXUGETTHEMEINT m_pfnGetThemeInt ; + PFNWXUGETTHEMEENUMVALUE m_pfnGetThemeEnumValue ; + PFNWXUGETTHEMEPOSITION m_pfnGetThemePosition ; + PFNWXUGETTHEMEFONT m_pfnGetThemeFont ; + PFNWXUGETTHEMERECT m_pfnGetThemeRect ; + PFNWXUGETTHEMEMARGINS m_pfnGetThemeMargins ; + PFNWXUGETTHEMEINTLIST m_pfnGetThemeIntList ; + PFNWXUGETTHEMEPROPERTYORIGIN m_pfnGetThemePropertyOrigin ; + PFNWXUSETWINDOWTHEME m_pfnSetWindowTheme ; + PFNWXUGETTHEMEFILENAME m_pfnGetThemeFilename ; + PFNWXUGETTHEMESYSCOLOR m_pfnGetThemeSysColor ; + PFNWXUGETTHEMESYSCOLORBRUSH m_pfnGetThemeSysColorBrush ; + PFNWXUGETTHEMESYSBOOL m_pfnGetThemeSysBool ; + PFNWXUGETTHEMESYSSIZE m_pfnGetThemeSysSize ; + PFNWXUGETTHEMESYSFONT m_pfnGetThemeSysFont ; + PFNWXUGETTHEMESYSSTRING m_pfnGetThemeSysString ; + PFNWXUGETTHEMESYSINT m_pfnGetThemeSysInt ; + PFNWXUISTHEMEACTIVE m_pfnIsThemeActive ; + PFNWXUISAPPTHEMED m_pfnIsAppThemed ; + PFNWXUGETWINDOWTHEME m_pfnGetWindowTheme ; + PFNWXUENABLETHEMEDIALOGTEXTURE m_pfnEnableThemeDialogTexture ; + PFNWXUISTHEMEDIALOGTEXTUREENABLED m_pfnIsThemeDialogTextureEnabled ; + PFNWXUGETTHEMEAPPPROPERTIES m_pfnGetThemeAppProperties ; + PFNWXUSETTHEMEAPPPROPERTIES m_pfnSetThemeAppProperties ; + PFNWXUGETCURRENTTHEMENAME m_pfnGetCurrentThemeName ; + PFNWXUGETTHEMEDOCUMENTATIONPROPERTY m_pfnGetThemeDocumentationProperty ; + PFNWXUDRAWTHEMEPARENTBACKGROUND m_pfnDrawThemeParentBackground ; + PFNWXUENABLETHEMING m_pfnEnableTheming ; +}; + +extern wxUxThemeEngine* g_pThemeEngine ; + +BOOL wxCanUseInitThemeEngine() ; + +#if !defined(WXU_USE_WXMODULE) +BOOL wxUxInitThemeEngine() ; +#endif + +#endif + diff --git a/src/msw/uxtheme.cpp b/src/msw/uxtheme.cpp new file mode 100644 index 0000000000..d241efe2a3 --- /dev/null +++ b/src/msw/uxtheme.cpp @@ -0,0 +1,247 @@ +/* + * wxuxthem.h : wxWindows support for Microsoft Windows XP Theme library + * (uxtheme.dll) + * Modified to work with almost all Win32 compilers + * Compiler must support Unicode, the __cdecl calling convention, and the + * __stdcall calling convention + */ + +#include + +#include "wx/msw/winundef.h" +#include "wx/wx.h" +#include "wx/msw/uxtheme.h" +#include "wx/msw/private.h" +#include "wx/app.h" // for GetComCtl32Version + +wxUxThemeEngine* g_pThemeEngine = ((wxUxThemeEngine*)NULL) ; + +BOOL wxCanUseInitThemeEngine() +{ + WXUOSVERSIONINFOEX wxuosex ; + memset((void*)&wxuosex, 0, sizeof(WXUOSVERSIONINFOEX)) ; + wxuosex.dwOSVersionInfoSize = sizeof(WXUOSVERSIONINFOEX) ; + if(!GetVersionEx((LPOSVERSIONINFO)&wxuosex)) + { + wxuosex.dwOSVersionInfoSize = sizeof(OSVERSIONINFO) ; + if(!GetVersionEx((LPOSVERSIONINFO)&wxuosex)) + { + return FALSE ; + } + } + if ((wxuosex.dwMajorVersion == 5) && (wxuosex.dwMinorVersion > 0)) + { + return (wxTheApp->GetComCtl32Version() >= 600) ; + } + else + { + return FALSE ; + } +} + +wxUxThemeEngine* wxUxThemeEngine::wxInitUxThemeEngine() +{ + wxUxThemeEngine* pThemeEngine = new wxUxThemeEngine ; + return pThemeEngine ; +} + +#ifdef WXU_USE_WXMODULE +class wxUxThemeModule : public wxModule +{ + DECLARE_DYNAMIC_CLASS(wxUxThemeModule) +public: + virtual void OnExit() + { + if((wxCanUseInitThemeEngine()) && (g_pThemeEngine)) + { + delete g_pThemeEngine ; + g_pThemeEngine = ((wxUxThemeEngine*)NULL) ; + } + } + + virtual bool OnInit() + { + if(!wxCanUseInitThemeEngine()) + { + g_pThemeEngine = ((wxUxThemeEngine*)NULL) ; + return TRUE ; + } + g_pThemeEngine = wxUxThemeEngine::wxInitUxThemeEngine() ; + if(!g_pThemeEngine) + { + return FALSE ; + } + else if(!g_pThemeEngine->IsInitialized()) + { + OnExit() ; + return FALSE ; + } + + return TRUE ; + } +}; + +IMPLEMENT_DYNAMIC_CLASS(wxUxThemeModule, wxModule) +#else +static void __cdecl wxUxThemeEngineOnExit() +{ + if(g_pThemeEngine) + { + delete g_pThemeEngine ; + g_pThemeEngine = ((wxUxThemeEngine*)NULL) ; + } +} + +BOOL wxUxInitThemeEngine() +{ + if(!wxCanUseInitThemeEngine()) + { + return TRUE ; + } + g_pThemeEngine = wxUxThemeEngine::wxInitUxThemeEngine() ; + if(!g_pThemeEngine) + { + return FALSE ; + } + else if(!g_pThemeEngine->IsInitialized()) + { + wxUxThemeEngineOnExit() ; + return FALSE ; + } + + if(atexit(wxUxThemeEngineOnExit) != 0) + { + wxUxThemeEngineOnExit() ; + return FALSE ; + } + + return TRUE ; +} +#endif + +#define WXU_GET_FN_PTR(hmod, type, pfunc, funcname) if(hmod != ((HINSTANCE)NULL)) { \ + pfunc = (type)::GetProcAddress(hmod, funcname) ; \ + if(pfunc == ((type)NULL)) \ + { \ + ::FreeLibrary(hmod) ; \ + hmod = ((HINSTANCE)NULL) ; \ + } \ +} + +wxUxThemeEngine::wxUxThemeEngine() +{ + m_hInstUXThemeDLL = ::LoadLibraryA("uxtheme.dll") ; + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUOPENTHEMEDATA, m_pfnOpenThemeData, "OpenThemeData") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUCLOSETHEMEDATA, m_pfnCloseThemeData, "CloseThemeData") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUDRAWTHEMEBACKGROUND, m_pfnDrawThemeBackground, "DrawThemeBackground") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUDRAWTHEMETEXT, m_pfnDrawThemeText, "DrawThemeText") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEBACKGROUNDCONTENTRECT, m_pfnGetThemeBackgroundContentRect, "GetThemeBackgroundContentRect") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEBACKGROUNDEXTENT, m_pfnGetThemeBackgroundExtent, "GetThemeBackgroundExtent") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEPARTSIZE, m_pfnGetThemePartSize, "GetThemePartSize") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMETEXTEXTENT, m_pfnGetThemeTextExtent, "GetThemeTextExtent") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMETEXTMETRICS, m_pfnGetThemeTextMetrics, "GetThemeTextMetrics") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEBACKGROUNDREGION, m_pfnGetThemeBackgroundRegion, "GetThemeBackgroundRegion") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUHITTESTTHEMEBACKGROUND, m_pfnHitTestThemeBackground, "HitTestThemeBackground") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUDRAWTHEMEEDGE, m_pfnDrawThemeEdge, "DrawThemeEdge") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUDRAWTHEMEICON, m_pfnDrawThemeIcon, "DrawThemeIcon") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUISTHEMEPARTDEFINED, m_pfnIsThemePartDefined, "IsThemePartDefined") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUISTHEMEBACKGROUNDPARTIALLYTRANSPARENT, m_pfnIsThemeBackgroundPartiallyTransparent, "IsThemeBackgroundPartiallyTransparent") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMECOLOR, m_pfnGetThemeColor, "GetThemeColor") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEMETRIC, m_pfnGetThemeMetric, "GetThemeMetric") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMESTRING, m_pfnGetThemeString, "GetThemeString") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEBOOL, m_pfnGetThemeBool, "GetThemeBool") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEINT, m_pfnGetThemeInt, "GetThemeInt") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEENUMVALUE, m_pfnGetThemeEnumValue, "GetThemeEnumValue") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEPOSITION, m_pfnGetThemePosition, "GetThemePosition") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEFONT, m_pfnGetThemeFont, "GetThemeFont") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMERECT, m_pfnGetThemeRect, "GetThemeRect") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEMARGINS, m_pfnGetThemeMargins, "GetThemeMargins") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEINTLIST, m_pfnGetThemeIntList, "GetThemeIntList") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEPROPERTYORIGIN, m_pfnGetThemePropertyOrigin, "GetThemePropertyOrigin") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUSETWINDOWTHEME, m_pfnSetWindowTheme, "SetWindowTheme") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEFILENAME, m_pfnGetThemeFilename, "GetThemeFilename") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMESYSCOLOR, m_pfnGetThemeSysColor, "GetThemeSysColor") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMESYSCOLORBRUSH, m_pfnGetThemeSysColorBrush, "GetThemeSysColorBrush") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMESYSBOOL, m_pfnGetThemeSysBool, "GetThemeSysBool") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMESYSSIZE, m_pfnGetThemeSysSize, "GetThemeSysSize") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMESYSFONT, m_pfnGetThemeSysFont, "GetThemeSysFont") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMESYSSTRING, m_pfnGetThemeSysString, "GetThemeSysString") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMESYSINT, m_pfnGetThemeSysInt, "GetThemeSysInt") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUISTHEMEACTIVE, m_pfnIsThemeActive, "IsThemeActive") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUISAPPTHEMED, m_pfnIsAppThemed, "IsAppThemed") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETWINDOWTHEME, m_pfnGetWindowTheme, "GetWindowTheme") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUENABLETHEMEDIALOGTEXTURE, m_pfnEnableThemeDialogTexture, "EnableThemeDialogTexture") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUISTHEMEDIALOGTEXTUREENABLED, m_pfnIsThemeDialogTextureEnabled, "IsThemeDialogTextureEnabled") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEAPPPROPERTIES, m_pfnGetThemeAppProperties, "GetThemeAppProperties") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUSETTHEMEAPPPROPERTIES, m_pfnSetThemeAppProperties, "SetThemeAppProperties") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETCURRENTTHEMENAME, m_pfnGetCurrentThemeName, "GetCurrentThemeName") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUGETTHEMEDOCUMENTATIONPROPERTY, m_pfnGetThemeDocumentationProperty, "GetThemeDocumentationProperty") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUDRAWTHEMEPARENTBACKGROUND, m_pfnDrawThemeParentBackground, "DrawThemeParentBackground") + WXU_GET_FN_PTR (m_hInstUXThemeDLL, PFNWXUENABLETHEMING, m_pfnEnableTheming, "EnableTheming") + m_bIsInitialized = (m_hInstUXThemeDLL != ((HINSTANCE)NULL)) ; + if(!m_bIsInitialized) + { + ResetFunctionPointers() ; + } +} + +void wxUxThemeEngine::ResetFunctionPointers() +{ + m_pfnOpenThemeData = ((PFNWXUOPENTHEMEDATA)NULL) ; + m_pfnCloseThemeData = ((PFNWXUCLOSETHEMEDATA)NULL) ; + m_pfnDrawThemeBackground = ((PFNWXUDRAWTHEMEBACKGROUND)NULL) ; + m_pfnDrawThemeText = ((PFNWXUDRAWTHEMETEXT)NULL) ; + m_pfnGetThemeBackgroundContentRect = ((PFNWXUGETTHEMEBACKGROUNDCONTENTRECT)NULL) ; + m_pfnGetThemeBackgroundExtent = ((PFNWXUGETTHEMEBACKGROUNDEXTENT)NULL) ; + m_pfnGetThemePartSize = ((PFNWXUGETTHEMEPARTSIZE)NULL) ; + m_pfnGetThemeTextExtent = ((PFNWXUGETTHEMETEXTEXTENT)NULL) ; + m_pfnGetThemeTextMetrics = ((PFNWXUGETTHEMETEXTMETRICS)NULL) ; + m_pfnGetThemeBackgroundRegion = ((PFNWXUGETTHEMEBACKGROUNDREGION)NULL) ; + m_pfnHitTestThemeBackground = ((PFNWXUHITTESTTHEMEBACKGROUND)NULL) ; + m_pfnDrawThemeEdge = ((PFNWXUDRAWTHEMEEDGE)NULL) ; + m_pfnDrawThemeIcon = ((PFNWXUDRAWTHEMEICON)NULL) ; + m_pfnIsThemePartDefined = ((PFNWXUISTHEMEPARTDEFINED)NULL) ; + m_pfnIsThemeBackgroundPartiallyTransparent = ((PFNWXUISTHEMEBACKGROUNDPARTIALLYTRANSPARENT)NULL) ; + m_pfnGetThemeColor = ((PFNWXUGETTHEMECOLOR)NULL) ; + m_pfnGetThemeMetric = ((PFNWXUGETTHEMEMETRIC)NULL) ; + m_pfnGetThemeString = ((PFNWXUGETTHEMESTRING)NULL) ; + m_pfnGetThemeBool = ((PFNWXUGETTHEMEBOOL)NULL) ; + m_pfnGetThemeInt = ((PFNWXUGETTHEMEINT)NULL) ; + m_pfnGetThemeEnumValue = ((PFNWXUGETTHEMEENUMVALUE)NULL) ; + m_pfnGetThemePosition = ((PFNWXUGETTHEMEPOSITION)NULL) ; + m_pfnGetThemeFont = ((PFNWXUGETTHEMEFONT)NULL) ; + m_pfnGetThemeRect = ((PFNWXUGETTHEMERECT)NULL) ; + m_pfnGetThemeMargins = ((PFNWXUGETTHEMEMARGINS)NULL) ; + m_pfnGetThemeIntList = ((PFNWXUGETTHEMEINTLIST)NULL) ; + m_pfnGetThemePropertyOrigin = ((PFNWXUGETTHEMEPROPERTYORIGIN)NULL) ; + m_pfnSetWindowTheme = ((PFNWXUSETWINDOWTHEME)NULL) ; + m_pfnGetThemeFilename = ((PFNWXUGETTHEMEFILENAME)NULL) ; + m_pfnGetThemeSysColor = ((PFNWXUGETTHEMESYSCOLOR)NULL) ; + m_pfnGetThemeSysColorBrush = ((PFNWXUGETTHEMESYSCOLORBRUSH)NULL) ; + m_pfnGetThemeSysBool = ((PFNWXUGETTHEMESYSBOOL)NULL) ; + m_pfnGetThemeSysSize = ((PFNWXUGETTHEMESYSSIZE)NULL) ; + m_pfnGetThemeSysFont = ((PFNWXUGETTHEMESYSFONT)NULL) ; + m_pfnGetThemeSysString = ((PFNWXUGETTHEMESYSSTRING)NULL) ; + m_pfnGetThemeSysInt = ((PFNWXUGETTHEMESYSINT)NULL) ; + m_pfnIsThemeActive = ((PFNWXUISTHEMEACTIVE)NULL) ; + m_pfnIsAppThemed = ((PFNWXUISAPPTHEMED)NULL) ; + m_pfnGetWindowTheme = ((PFNWXUGETWINDOWTHEME)NULL) ; + m_pfnEnableThemeDialogTexture = ((PFNWXUENABLETHEMEDIALOGTEXTURE)NULL) ; + m_pfnIsThemeDialogTextureEnabled = ((PFNWXUISTHEMEDIALOGTEXTUREENABLED)NULL) ; + m_pfnGetThemeAppProperties = ((PFNWXUGETTHEMEAPPPROPERTIES)NULL) ; + m_pfnSetThemeAppProperties = ((PFNWXUSETTHEMEAPPPROPERTIES)NULL) ; + m_pfnGetCurrentThemeName = ((PFNWXUGETCURRENTTHEMENAME)NULL) ; + m_pfnGetThemeDocumentationProperty = ((PFNWXUGETTHEMEDOCUMENTATIONPROPERTY)NULL) ; + m_pfnDrawThemeParentBackground = ((PFNWXUDRAWTHEMEPARENTBACKGROUND)NULL) ; + m_pfnEnableTheming = ((PFNWXUENABLETHEMING)NULL) ; +} + +wxUxThemeEngine::~wxUxThemeEngine() +{ + if(m_hInstUXThemeDLL != ((HINSTANCE)NULL)) + { + ::FreeLibrary(m_hInstUXThemeDLL) ; + } + ResetFunctionPointers() ; +} +