Remove various definitions and symbol declarations from numerous files using msw/uxtheme.h to a single file. When possible vssym32.h is included from the Windows SDK. For older SDKs tmschema.h is included and missing symbols are defined in msw/uxtheme.h.
		
			
				
	
	
		
			255 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			255 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/msw/uxtheme.h
 | |
| // Purpose:     wxUxThemeEngine class: support for XP themes
 | |
| // Author:      John Platts, Vadim Zeitlin
 | |
| // Modified by:
 | |
| // Created:     2003
 | |
| // Copyright:   (c) 2003 John Platts, Vadim Zeitlin
 | |
| // Licence:     wxWindows licence
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _WX_UXTHEME_H_
 | |
| #define _WX_UXTHEME_H_
 | |
| 
 | |
| #include "wx/defs.h"
 | |
| 
 | |
| #include "wx/msw/private.h"     // we use GetHwndOf()
 | |
| #include <uxtheme.h>
 | |
| 
 | |
| #if defined(DTPB_WINDOWDC)
 | |
| // DTPB_WINDOWDC has been added for Vista so it's save to assume that an SDK
 | |
| // including it has vssym32.h available
 | |
| #define HAVE_VSSYM32
 | |
| #endif
 | |
| 
 | |
| #if defined(HAVE_VSSYM32)
 | |
| #include <vssym32.h>
 | |
| #else
 | |
| #include <tmschema.h>
 | |
| #endif
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // Definitions for legacy Windows SDKs
 | |
| // ----------------------------------------------------------------------------
 | |
| // Some defintions introduced with Windows Vista might be missing in older SDKs
 | |
| // Missing defintions are added here for compatiblity
 | |
| 
 | |
| #ifndef VSCLASS_LISTVIEW
 | |
| #define LISS_NORMAL 1
 | |
| #define LISS_HOT 2
 | |
| #define LISS_SELECTED 3
 | |
| #define LISS_DISABLED 4
 | |
| #define LISS_SELECTEDNOTFOCUS 5
 | |
| #define LISS_HOTSELECTED 6
 | |
| #endif
 | |
| 
 | |
| #ifndef DTT_TEXTCOLOR
 | |
| #define DTT_TEXTCOLOR       (1UL << 0)      // crText has been specified
 | |
| #define DTT_STATEID         (1UL << 8)      // IStateId has been specified
 | |
| #endif
 | |
| 
 | |
| #ifndef DSS_HIDEPREFIX
 | |
| #define DSS_HIDEPREFIX  0x0200
 | |
| #define DSS_PREFIXONLY  0x0400
 | |
| #endif
 | |
| 
 | |
| #ifndef TMT_FONT
 | |
| #define TMT_FONT	210
 | |
| #endif
 | |
| 
 | |
| #ifndef HAVE_VSSYM32
 | |
| enum EXPANDOBUTTONSTATES {
 | |
|     TDLGEBS_NORMAL = 1,
 | |
|     TDLGEBS_HOVER = 2,
 | |
|     TDLGEBS_PRESSED = 3,
 | |
|     TDLGEBS_EXPANDEDNORMAL = 4,
 | |
|     TDLGEBS_EXPANDEDHOVER = 5,
 | |
|     TDLGEBS_EXPANDEDPRESSED = 6,
 | |
|     TDLGEBS_NORMALDISABLED = 7,
 | |
|     TDLGEBS_EXPANDEDDISABLED = 8,
 | |
| };
 | |
| 
 | |
| enum TASKDIALOGPARTS {
 | |
|     TDLG_PRIMARYPANEL = 1,
 | |
|     TDLG_MAININSTRUCTIONPANE = 2,
 | |
|     TDLG_MAINICON = 3,
 | |
|     TDLG_CONTENTPANE = 4,
 | |
|     TDLG_CONTENTICON = 5,
 | |
|     TDLG_EXPANDEDCONTENT = 6,
 | |
|     TDLG_COMMANDLINKPANE = 7,
 | |
|     TDLG_SECONDARYPANEL = 8,
 | |
|     TDLG_CONTROLPANE = 9,
 | |
|     TDLG_BUTTONSECTION = 10,
 | |
|     TDLG_BUTTONWRAPPER = 11,
 | |
|     TDLG_EXPANDOTEXT = 12,
 | |
|     TDLG_EXPANDOBUTTON = 13,
 | |
|     TDLG_VERIFICATIONTEXT = 14,
 | |
|     TDLG_FOOTNOTEPANE = 15,
 | |
|     TDLG_FOOTNOTEAREA = 16,
 | |
|     TDLG_FOOTNOTESEPARATOR = 17,
 | |
|     TDLG_EXPANDEDFOOTERAREA = 18,
 | |
|     TDLG_PROGRESSBAR = 19,
 | |
|     TDLG_IMAGEALIGNMENT = 20,
 | |
|     TDLG_RADIOBUTTONPANE = 21,
 | |
| };
 | |
| 
 | |
| #define CP_BACKGROUND 2
 | |
| #define CP_TRANSPARENTBACKGROUND 3
 | |
| #define CP_BORDER 4
 | |
| #define CP_READONLY 5
 | |
| #define CP_DROPDOWNBUTTONRIGHT 6
 | |
| #define CP_DROPDOWNBUTTONLEFT 7
 | |
| #define CP_CUEBANNER 8
 | |
| 
 | |
| #define RP_BACKGROUND 6
 | |
| #define RP_SPLITTER 7
 | |
| #define RP_SPLITTERVERT 8
 | |
| 
 | |
| enum BORDERSTATES {
 | |
|     CBB_NORMAL = 1,
 | |
|     CBB_HOT = 2,
 | |
|     CBB_FOCUSED = 3,
 | |
|     CBB_DISABLED = 4,
 | |
| };
 | |
| 
 | |
| enum MENUPARTS
 | |
| {
 | |
|     MENU_MENUITEM_TMSCHEMA = 1,
 | |
|     MENU_SEPARATOR_TMSCHEMA = 6,
 | |
|     MENU_POPUPBACKGROUND = 9,
 | |
|     MENU_POPUPBORDERS = 10,
 | |
|     MENU_POPUPCHECK = 11,
 | |
|     MENU_POPUPCHECKBACKGROUND = 12,
 | |
|     MENU_POPUPGUTTER = 13,
 | |
|     MENU_POPUPITEM = 14,
 | |
|     MENU_POPUPSEPARATOR = 15,
 | |
|     MENU_POPUPSUBMENU = 16,
 | |
| };
 | |
| 
 | |
| enum POPUPITEMSTATES
 | |
| {
 | |
|     MPI_NORMAL = 1,
 | |
|     MPI_HOT = 2,
 | |
|     MPI_DISABLED = 3,
 | |
|     MPI_DISABLEDHOT = 4,
 | |
| };
 | |
| 
 | |
| enum POPUPCHECKBACKGROUNDSTATES
 | |
| {
 | |
|     MCB_DISABLED = 1,
 | |
|     MCB_NORMAL = 2,
 | |
|     MCB_BITMAP = 3,
 | |
| };
 | |
| 
 | |
| enum POPUPCHECKSTATES
 | |
| {
 | |
|     MC_CHECKMARKNORMAL = 1,
 | |
|     MC_CHECKMARKDISABLED = 2,
 | |
|     MC_BULLETNORMAL = 3,
 | |
|     MC_BULLETDISABLED = 4,
 | |
| };
 | |
| 
 | |
| #endif
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // End definitions for legacy Windows SDKs
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| // Amazingly, GetThemeFont() and GetThemeSysFont() functions use LOGFONTA under
 | |
| // XP but LOGFONTW (even in non-Unicode build) under later versions of Windows.
 | |
| // If we declare them as taking LOGFONT below, the code would be able to
 | |
| // silently pass LOGFONTA to them in ANSI build and would crash at run-time
 | |
| // under Windows Vista/7 because of a buffer overrun (LOGFONTA being smaller
 | |
| // than LOGFONTW expected by these functions). If we we declare them as taking
 | |
| // LOGFONTW, the code wouldn't work correctly under XP. So we use a special
 | |
| // wxUxThemeFont class to encapsulate this and intentionally change the LOGFONT
 | |
| // output parameters of the theme functions to take it instead.
 | |
| 
 | |
| class wxUxThemeFont
 | |
| {
 | |
| public:
 | |
|     // Trivial default ctor.
 | |
|     wxUxThemeFont() { }
 | |
| 
 | |
| #if wxUSE_UNICODE
 | |
|     // In Unicode build we always use LOGFONT anyhow so this class is
 | |
|     // completely trivial.
 | |
|     LPLOGFONTW GetPtr() { return &m_lfW; }
 | |
|     const LOGFONTW& GetLOGFONT() { return m_lfW; }
 | |
| #else // !wxUSE_UNICODE
 | |
|     // Return either LOGFONTA or LOGFONTW pointer as required by the current
 | |
|     // Windows version.
 | |
|     LPLOGFONTW GetPtr()
 | |
|     {
 | |
|         return UseLOGFONTW() ? &m_lfW
 | |
|                              : reinterpret_cast<LPLOGFONTW>(&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);
 | |
| };
 | |
| 
 | |
| WXDLLIMPEXP_CORE bool wxUxThemeIsActive();
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxUxThemeHandle: encapsulates ::Open/CloseThemeData()
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class wxUxThemeHandle
 | |
| {
 | |
| public:
 | |
|     wxUxThemeHandle(const wxWindow *win, const wchar_t *classes)
 | |
|     {
 | |
|         m_hTheme = (HTHEME)::OpenThemeData(GetHwndOf(win), classes);
 | |
|     }
 | |
| 
 | |
|     operator HTHEME() const { return m_hTheme; }
 | |
| 
 | |
|     ~wxUxThemeHandle()
 | |
|     {
 | |
|         if ( m_hTheme )
 | |
|         {
 | |
|             ::CloseThemeData(m_hTheme);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     HTHEME m_hTheme;
 | |
| 
 | |
|     wxDECLARE_NO_COPY_CLASS(wxUxThemeHandle);
 | |
| };
 | |
| 
 | |
| #endif // _WX_UXTHEME_H_
 | |
| 
 |