+ // In Unicode build we always use LOGFONT anyhow so this class is
+ // completely trivial.
+ Ptr *GetPtr() { return reinterpret_cast<Ptr *>(&m_lfW); }
+ const LOGFONTW& GetLOGFONT() { return m_lfW; }
+#else // !wxUSE_UNICODE
+ // Return either LOGFONTA or LOGFONTW pointer as required by the current
+ // Windows version.
+ Ptr *GetPtr()
+ {
+ return UseLOGFONTW() ? reinterpret_cast<Ptr *>(&m_lfW)
+ : reinterpret_cast<Ptr *>(&m_lfA);
+ }
+
+ // This method returns LOGFONT (i.e. LOGFONTA in ANSI build and LOGFONTW in
+ // Unicode one) which can be used with other, normal, Windows or wx
+ // functions. Internally it may need to transform LOGFONTW to LOGFONTA.
+ const LOGFONTA& GetLOGFONT()
+ {
+ if ( UseLOGFONTW() )
+ {
+ // Most of the fields are the same in LOGFONTA and LOGFONTW so just
+ // copy everything by default.
+ memcpy(&m_lfA, &m_lfW, sizeof(m_lfA));
+
+ // But the face name must be converted from Unicode.
+ WideCharToMultiByte(CP_ACP, 0, m_lfW.lfFaceName, -1,
+ m_lfA.lfFaceName, sizeof(m_lfA.lfFaceName),
+ NULL, NULL);
+ }
+
+ return m_lfA;
+ }
+
+private:
+ static bool UseLOGFONTW()
+ {
+ return wxGetWinVersion() >= wxWinVersion_Vista;
+ }
+
+ LOGFONTA m_lfA;
+#endif // wxUSE_UNICODE/!wxUSE_UNICODE
+
+private:
+ LOGFONTW m_lfW;
+
+ wxDECLARE_NO_COPY_CLASS(wxUxThemeFont);
+};
+
+typedef HTHEME (__stdcall *PFNWXUOPENTHEMEDATA)(HWND, const wchar_t *);
+typedef HRESULT (__stdcall *PFNWXUCLOSETHEMEDATA)(HTHEME);
+typedef HRESULT (__stdcall *PFNWXUDRAWTHEMEBACKGROUND)(HTHEME, HDC, int, int, const RECT *, const RECT *);
+typedef HRESULT (__stdcall *PFNWXUDRAWTHEMETEXT)(HTHEME, HDC, int, int, const wchar_t *, int, DWORD, DWORD, const RECT *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEBACKGROUNDCONTENTRECT)(HTHEME, HDC, int, int, const RECT *, RECT *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEBACKGROUNDEXTENT)(HTHEME, HDC, int, int, const RECT *, RECT *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEPARTSIZE)(HTHEME, HDC, int, int, const RECT *, /* enum */ THEMESIZE, SIZE *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMETEXTEXTENT)(HTHEME, HDC, int, int, const wchar_t *, int, DWORD, const RECT *, RECT *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMETEXTMETRICS)(HTHEME, HDC, int, int, TEXTMETRIC*);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEBACKGROUNDREGION)(HTHEME, HDC, int, int, const RECT *, HRGN *);
+typedef HRESULT (__stdcall *PFNWXUHITTESTTHEMEBACKGROUND)(HTHEME, HDC, int, int, DWORD, const RECT *, HRGN, POINT, unsigned short *);
+typedef HRESULT (__stdcall *PFNWXUDRAWTHEMEEDGE)(HTHEME, HDC, int, int, const RECT *, unsigned int, unsigned int, RECT *);
+typedef HRESULT (__stdcall *PFNWXUDRAWTHEMEICON)(HTHEME, HDC, int, int, const RECT *, HIMAGELIST, int);
+typedef BOOL (__stdcall *PFNWXUISTHEMEPARTDEFINED)(HTHEME, int, int);
+typedef BOOL (__stdcall *PFNWXUISTHEMEBACKGROUNDPARTIALLYTRANSPARENT)(HTHEME, int, int);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMECOLOR)(HTHEME, int, int, int, COLORREF*);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEMETRIC)(HTHEME, HDC, int, int, int, int *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMESTRING)(HTHEME, int, int, int, wchar_t *, int);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEBOOL)(HTHEME, int, int, int, BOOL *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEINT)(HTHEME, int, int, int, int *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEENUMVALUE)(HTHEME, int, int, int, int *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEPOSITION)(HTHEME, int, int, int, POINT *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEFONT)(HTHEME, HDC, int, int, int, wxUxThemeFont::Ptr *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMERECT)(HTHEME, int, int, int, RECT *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEMARGINS)(HTHEME, HDC, int, int, int, RECT *, MARGINS *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEINTLIST)(HTHEME, int, int, int, INTLIST*);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEPROPERTYORIGIN)(HTHEME, int, int, int, /* enum */ PROPERTYORIGIN *);
+typedef HRESULT (__stdcall *PFNWXUSETWINDOWTHEME)(HWND, const wchar_t*, const wchar_t *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEFILENAME)(HTHEME, int, int, int, wchar_t *, int);
+typedef COLORREF(__stdcall *PFNWXUGETTHEMESYSCOLOR)(HTHEME, int);
+typedef HBRUSH (__stdcall *PFNWXUGETTHEMESYSCOLORBRUSH)(HTHEME, int);
+typedef BOOL (__stdcall *PFNWXUGETTHEMESYSBOOL)(HTHEME, int);
+typedef int (__stdcall *PFNWXUGETTHEMESYSSIZE)(HTHEME, int);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMESYSFONT)(HTHEME, int, wxUxThemeFont::Ptr *);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMESYSSTRING)(HTHEME, int, wchar_t *, int);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMESYSINT)(HTHEME, int, int *);
+typedef BOOL (__stdcall *PFNWXUISTHEMEACTIVE)();
+typedef BOOL (__stdcall *PFNWXUISAPPTHEMED)();
+typedef HTHEME (__stdcall *PFNWXUGETWINDOWTHEME)(HWND);
+typedef HRESULT (__stdcall *PFNWXUENABLETHEMEDIALOGTEXTURE)(HWND, DWORD);
+typedef BOOL (__stdcall *PFNWXUISTHEMEDIALOGTEXTUREENABLED)(HWND);
+typedef DWORD (__stdcall *PFNWXUGETTHEMEAPPPROPERTIES)();
+typedef void (__stdcall *PFNWXUSETTHEMEAPPPROPERTIES)(DWORD);
+typedef HRESULT (__stdcall *PFNWXUGETCURRENTTHEMENAME)(wchar_t *, int, wchar_t *, int, wchar_t *, int);
+typedef HRESULT (__stdcall *PFNWXUGETTHEMEDOCUMENTATIONPROPERTY)(const wchar_t *, const wchar_t *, wchar_t *, int);
+typedef HRESULT (__stdcall *PFNWXUDRAWTHEMEPARENTBACKGROUND)(HWND, HDC, RECT *);
+typedef HRESULT (__stdcall *PFNWXUENABLETHEMING)(BOOL);
+
+// ----------------------------------------------------------------------------
+// wxUxThemeEngine: provides all theme functions from uxtheme.dll
+// ----------------------------------------------------------------------------
+
+// we always define this class, even if wxUSE_UXTHEME == 0, but we just make it
+// empty in this case -- this allows to use it elsewhere without any #ifdefs
+#if wxUSE_UXTHEME
+ #include "wx/dynlib.h"
+
+ #define wxUX_THEME_DECLARE(type, func) type func;