vbAccelerator - Contents of code file: cUxTheme.cls

VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "cUxTheme"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit

' To Report API errors:
Private Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100
Private Const FORMAT_MESSAGE_ARGUMENT_ARRAY = &H2000
Private Const FORMAT_MESSAGE_FROM_HMODULE = &H800
Private Const FORMAT_MESSAGE_FROM_STRING = &H400
Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Private Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200
Private Const FORMAT_MESSAGE_MAX_WIDTH_MASK = &HFF
Private Declare Function FormatMessage Lib "kernel32" _
    Alias "FormatMessageA" ( _
    ByVal dwFlags As Long, lpSource As Any, _
    ByVal dwMessageId As Long, ByVal dwLanguageId As Long, _
    ByVal lpBuffer As String, ByVal nSize As Long, _
    Arguments As Long) As Long

''
 //-----------------------------------------------------------------------------
----------
'' //   "Window" (i.e., non-client) Parts & States
'' //
''
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeWindowParts
    WP_CAPTION = 1
    WP_SMALLCAPTION = 2
    WP_MINCAPTION = 3
    WP_SMALLMINCAPTION = 4
    WP_MAXCAPTION = 5
    WP_SMALLMAXCAPTION = 6
    WP_FRAMELEFT = 7
    WP_FRAMERIGHT = 8
    WP_FRAMEBOTTOM = 9
    WP_SMALLFRAMELEFT = 10
    WP_SMALLFRAMERIGHT = 11
    WP_SMALLFRAMEBOTTOM = 12
    '' //---- window frame buttons ----
    WP_SYSBUTTON = 13
    WP_MDISYSBUTTON = 14
    WP_MINBUTTON = 15
    WP_MDIMINBUTTON = 16
    WP_MAXBUTTON = 17
    WP_CLOSEBUTTON = 18
    WP_SMALLCLOSEBUTTON = 19
    WP_MDICLOSEBUTTON = 20
    WP_RESTOREBUTTON = 21
    WP_MDIRESTOREBUTTON = 22
    WP_HELPBUTTON = 23
    WP_MDIHELPBUTTON = 24
    '' //---- scrollbars
    WP_HORZSCROLL = 25
    WP_HORZTHUMB = 26
    WP_VERTSCROLL = 27
    WP_VERTTHUMB = 28
    '' //---- dialog ----
    WP_DIALOG = 29
    '' //---- hit-test templates ---
    WP_CAPTIONSIZINGTEMPLATE = 30
    WP_SMALLCAPTIONSIZINGTEMPLATE = 31
    WP_FRAMELEFTSIZINGTEMPLATE = 32
    WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33
    WP_FRAMERIGHTSIZINGTEMPLATE = 34
    WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35
    WP_FRAMEBOTTOMSIZINGTEMPLATE = 36
    WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE = 37
End Enum

Public Enum UxThemeFrameStates
    FS_ACTIVE = 1
    FS_INACTIVE = 2
End Enum

Public Enum UxThemeCaptionStates
    CS_ACTIVE = 1
    CS_INACTIVE = 2
    CS_DISABLED = 3
End Enum
    
Public Enum UxThemeMaxCaptionStates
    MXCS_ACTIVE = 1
    MXCS_INACTIVE = 2
    MXCS_DISABLED = 3
End Enum

Public Enum UxThemeMinCaptionStates
    MNCS_ACTIVE = 1
    MNCS_INACTIVE = 2
    MNCS_DISABLED = 3
End Enum

Public Enum UxThemeHorzScrollStates
    HSS_NORMAL = 1
    HSS_HOT = 2
    HSS_PUSHED = 3
    HSS_DISABLED = 4
End Enum

Public Enum UxThemeHorzThumbStates
    HTS_NORMAL = 1
    HTS_HOT = 2
    HTS_PUSHED = 3
    HTS_DISABLED = 4
End Enum

Public Enum UxThemeVertScrollStates
    VSS_NORMAL = 1
    VSS_HOT = 2
    VSS_PUSHED = 3
    VSS_DISABLED = 4
End Enum

Public Enum UxThemeVertThumbStates
    VTS_NORMAL = 1
    VTS_HOT = 2
    VTS_PUSHED = 3
    VTS_DISABLED = 4
End Enum

Public Enum UxThemeSysButtonStates
    SBS_NORMAL = 1
    SBS_HOT = 2
    SBS_PUSHED = 3
    SBS_DISABLED = 4
End Enum

Public Enum UxThemeMinButtonStates
    MINBS_NORMAL = 1
    MINBS_HOT = 2
    MINBS_PUSHED = 3
    MINBS_DISABLED = 4
End Enum

Public Enum UxThemeMaxButtonStates
    MAXBS_NORMAL = 1
    MAXBS_HOT = 2
    MAXBS_PUSHED = 3
    MAXBS_DISABLED = 4
End Enum

Public Enum UxThemeRestoreButtonStates
    RBS_NORMAL = 1
    RBS_HOT = 2
    RBS_PUSHED = 3
    RBS_DISABLED = 4
End Enum

Public Enum UxThemeHelpButtonStates
    HBS_NORMAL = 1
    HBS_HOT = 2
    HBS_PUSHED = 3
    HBS_DISABLED = 4
End Enum

Public Enum UxThemeCloseButtonStates
    CBS_NORMAL = 1
    CBS_HOT = 2
    CBS_PUSHED = 3
    CBS_DISABLED = 4
End Enum


''
 //-----------------------------------------------------------------------------
----------
'' //   "Button" Parts & States
''
 //-----------------------------------------------------------------------------
---------
Public Enum UxThemeButtonParts
    BP_PUSHBUTTON = 1
    BP_RADIOBUTTON = 2
    BP_CHECKBOX = 3
    BP_GROUPBOX = 4
    BP_USERBUTTON = 5
End Enum

Public Enum UxThemePushButtonStates
    PBS_NORMAL = 1
    PBS_HOT = 2
    PBS_PRESSED = 3
    PBS_DISABLED = 4
    PBS_DEFAULTED = 5
End Enum

Public Enum UxThemeRadioButtonStates
    RBS_UNCHECKEDNORMAL = 1
    RBS_UNCHECKEDHOT = 2
    RBS_UNCHECKEDPRESSED = 3
    RBS_UNCHECKEDDISABLED = 4
    RBS_CHECKEDNORMAL = 5
    RBS_CHECKEDHOT = 6
    RBS_CHECKEDPRESSED = 7
    RBS_CHECKEDDISABLED = 8
End Enum

Public Enum UxThemeCheckBoxStates
    CBS_UNCHECKEDNORMAL = 1
    CBS_UNCHECKEDHOT = 2
    CBS_UNCHECKEDPRESSED = 3
    CBS_UNCHECKEDDISABLED = 4
    CBS_CHECKEDNORMAL = 5
    CBS_CHECKEDHOT = 6
    CBS_CHECKEDPRESSED = 7
    CBS_CHECKEDDISABLED = 8
    CBS_MIXEDNORMAL = 9
    CBS_MIXEDHOT = 10
    CBS_MIXEDPRESSED = 11
    CBS_MIXEDDISABLED = 12
End Enum

Public Enum UxThemeGroupBoxStates
    GBS_NORMAL = 1
    GBS_DISABLED = 2
End Enum


''
 //-----------------------------------------------------------------------------
----------
'' //   "Rebar" Parts & States
''
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeRebarParts
    RP_GRIPPER = 1
    RP_GRIPPERVERT = 2
    RP_BAND = 3
    RP_CHEVRON = 4
    RP_CHEVRONVERT = 5
End Enum

Public Enum UxThemeChevronStates
    CHEVS_NORMAL = 1
    CHEVS_HOT = 2
    CHEVS_PRESSED = 3
End Enum


''
 //-----------------------------------------------------------------------------
----------
'' //   "Toolbar" Parts & States
''
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeToolBarParts
    TP_BUTTON = 1
    TP_DROPDOWNBUTTON = 2
    TP_SPLITBUTTON = 3
    TP_SPLITBUTTONDROPDOWN = 4
    TP_SEPARATOR = 5
    TP_SEPARATORVERT = 6
End Enum

Public Enum UxThemeToolBarStates
    TS_NORMAL = 1
    TS_HOT = 2
    TS_PRESSED = 3
    TS_DISABLED = 4
    TS_CHECKED = 5
    TS_HOTCHECKED = 6
End Enum

''
 //-----------------------------------------------------------------------------
----------
'' //   "Status" Parts & States
''
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeStatusParts
    SP_PANE = 1
    SP_GRIPPERPANE = 2
    SP_GRIPPER = 3
End Enum

''
 //-----------------------------------------------------------------------------
----------
'' //   "Menu" Parts & States
''
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeMenuParts
    MP_MENUITEM = 1
    MP_MENUDROPDOWN = 2
    MP_MENUBARITEM = 3
    MP_MENUBARDROPDOWN = 4
    MP_CHEVRON = 5
    MP_SEPARATOR = 6
End Enum

Public Enum UxThemeMenuStates
    MS_NORMAL = 1
    MS_SELECTED = 2
    MS_DEMOTED = 3
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "ListView" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeLISTVIEWParts
   LVP_LISTITEM = 1
   LVP_LISTGROUP = 2
   LVP_LISTDETAIL = 3
   LVP_LISTSORTEDDETAIL = 4
   LVP_EMPTYTEXT = 5
End Enum

Public Enum UxThemeLISTITEMStates
   LIS_NORMAL = 1
   LIS_HOT = 2
   LIS_SELECTED = 3
   LIS_DISABLED = 4
   LIS_SELECTEDNOTFOCUS = 5
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "Header" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeHEADERParts
   HP_HEADERITEM = 1
   HP_HEADERITEMLEFT = 2
   HP_HEADERITEMRIGHT = 3
   HP_HEADERSORTARROW = 4
End Enum

Public Enum UxThemeHEADERITEMStates
   HIS_NORMAL = 1
   HIS_HOT = 2
   HIS_PRESSED = 3
End Enum

Public Enum UxThemeHEADERITEMLEFTStates
   HILS_NORMAL = 1
   HILS_HOT = 2
   HILS_PRESSED = 3
End Enum

Public Enum UxThemeHEADERITEMRIGHTStates
   HIRS_NORMAL = 1
   HIRS_HOT = 2
   HIRS_PRESSED = 3
End Enum

Public Enum UxThemeHEADERSORTARROWStates
   HSAS_SORTEDUP = 1
   HSAS_SORTEDDOWN = 2
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "Progress" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemePROGRESSParts
   PP_BAR = 1
   PP_BARVERT = 2
   PP_CHUNK = 3
   PP_CHUNKVERT = 4
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "Tab" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UsxThemeTABParts
   TABP_TABITEM = 1
   TABP_TABITEMLEFTEDGE = 2
   TABP_TABITEMRIGHTEDGE = 3
   TABP_TABITEMBOTHEDGE = 4
   TABP_TOPTABITEM = 5
   TABP_TOPTABITEMLEFTEDGE = 6
   TABP_TOPTABITEMRIGHTEDGE = 7
   TABP_TOPTABITEMBOTHEDGE = 8
   TABP_PANE = 9
   TABP_BODY = 10
End Enum

Public Enum UxThemeTABITEMStates
   TIS_NORMAL = 1
   TIS_HOT = 2
   TIS_SELECTED = 3
   TIS_DISABLED = 4
   TIS_FOCUSED = 5
End Enum

Public Enum UxThemeTABITEMLEFTEDGEStates
   TILES_NORMAL = 1
   TILES_HOT = 2
   TILES_SELECTED = 3
   TILES_DISABLED = 4
   TILES_FOCUSED = 5
End Enum

Public Enum UxThemeTABITEMRIGHTEDGEStates
   TIRES_NORMAL = 1
   TIRES_HOT = 2
   TIRES_SELECTED = 3
   TIRES_DISABLED = 4
   TIRES_FOCUSED = 5
End Enum

Public Enum UxThemeTABITEMBOTHEDGESStates
   TIBES_NORMAL = 1
   TIBES_HOT = 2
   TIBES_SELECTED = 3
   TIBES_DISABLED = 4
   TIBES_FOCUSED = 5
End Enum

Public Enum UxThemeTOPTABITEMStates
   TTIS_NORMAL = 1
   TTIS_HOT = 2
   TTIS_SELECTED = 3
   TTIS_DISABLED = 4
   TTIS_FOCUSED = 5
End Enum

Public Enum UxThemeTOPTABITEMLEFTEDGEStates
   TTILES_NORMAL = 1
   TTILES_HOT = 2
   TTILES_SELECTED = 3
   TTILES_DISABLED = 4
   TTILES_FOCUSED = 5
End Enum

Public Enum UxThemeTOPTABITEMRIGHTEDGEStates
   TTIRES_NORMAL = 1
   TTIRES_HOT = 2
   TTIRES_SELECTED = 3
   TTIRES_DISABLED = 4
   TTIRES_FOCUSED = 5
End Enum

Public Enum UxThemeTOPTABITEMBOTHEDGESStates
   TTIBES_NORMAL = 1
   TTIBES_HOT = 2
   TTIBES_SELECTED = 3
   TTIBES_DISABLED = 4
   TTIBES_FOCUSED = 5
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "Trackbar" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeTRACKBARParts
   TKP_TRACK = 1
   TKP_TRACKVERT = 2
   TKP_THUMB = 3
   TKP_THUMBBOTTOM = 4
   TKP_THUMBTOP = 5
   TKP_THUMBVERT = 6
   TKP_THUMBLEFT = 7
   TKP_THUMBRIGHT = 8
   TKP_TICS = 9
   TKP_TICSVERT = 10
End Enum

Public Enum UxThemeTRACKBARStates
   TKS_NORMAL = 1
End Enum

Public Enum UxThemeTRACKStates
   TRS_NORMAL = 1
End Enum

Public Enum UxThemeTRACKVERTStates
   TRVS_NORMAL = 1
End Enum

Public Enum UxThemeTHUMBStates
   TUS_NORMAL = 1
   TUS_HOT = 2
   TUS_PRESSED = 3
   TUS_FOCUSED = 4
   TUS_DISABLED = 5
End Enum

Public Enum UxThemeTHUMBBOTTOMStates
   TUBS_NORMAL = 1
   TUBS_HOT = 2
   TUBS_PRESSED = 3
   TUBS_FOCUSED = 4
   TUBS_DISABLED = 5
End Enum

Public Enum UxThemeTHUMBTOPStates
   TUTS_NORMAL = 1
   TUTS_HOT = 2
   TUTS_PRESSED = 3
   TUTS_FOCUSED = 4
   TUTS_DISABLED = 5
End Enum

Public Enum UxThemeTHUMBVERTStates
   TUVS_NORMAL = 1
   TUVS_HOT = 2
   TUVS_PRESSED = 3
   TUVS_FOCUSED = 4
   TUVS_DISABLED = 5
End Enum

Public Enum UxThemeTHUMBLEFTStates
   TUVLS_NORMAL = 1
   TUVLS_HOT = 2
   TUVLS_PRESSED = 3
   TUVLS_FOCUSED = 4
   TUVLS_DISABLED = 5
End Enum

Public Enum UxThemeTHUMBRIGHTStates
   TUVRS_NORMAL = 1
   TUVRS_HOT = 2
   TUVRS_PRESSED = 3
   TUVRS_FOCUSED = 4
   TUVRS_DISABLED = 5
End Enum

Public Enum UxThemeTICSStates
   TSS_NORMAL = 1
End Enum

Public Enum UxThemeTICSVERTStates
   TSVS_NORMAL = 1
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "Tooltips" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeTOOLTIPParts
   TTP_STANDARD = 1
   TTP_STANDARDTITLE = 2
   TTP_BALLOON = 3
   TTP_BALLOONTITLE = 4
   TTP_CLOSE = 5
End Enum

Public Enum UxThemeCLOSEStates
   TTCS_NORMAL = 1
   TTCS_HOT = 2
   TTCS_PRESSED = 3
End Enum

Public Enum UxThemeSTANDARDStates
   TTSS_NORMAL = 1
   TTSS_LINK = 2
End Enum

Public Enum UxThemeBALLOONStates
   TTBS_NORMAL = 1
   TTBS_LINK = 2
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "TreeView" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeTREEVIEWParts
   TVP_TREEITEM = 1
   TVP_GLYPH = 2
   TVP_BRANCH = 3
End Enum

Public Enum UxThemeTREEITEMStates
   TREIS_NORMAL = 1
   TREIS_HOT = 2
   TREIS_SELECTED = 3
   TREIS_DISABLED = 4
   TREIS_SELECTEDNOTFOCUS = 5
End Enum

Public Enum UxThemeGLYPHStates
   GLPS_CLOSED = 1
   GLPS_OPENED = 2
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "Spin" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeSPINStates
   SPNP_UP = 1
   SPNP_DOWN = 2
   SPNP_UPHORZ = 3
   SPNP_DOWNHORZ = 4
End Enum

Public Enum UxThemeUPStates
   UPS_NORMAL = 1
   UPS_HOT = 2
   UPS_PRESSED = 3
   UPS_DISABLED = 4
End Enum

Public Enum UxThemeDOWNStates
   DNS_NORMAL = 1
   DNS_HOT = 2
   DNS_PRESSED = 3
   DNS_DISABLED = 4
End Enum

Public Enum UxThemeUPHORZStates
   UPHZS_NORMAL = 1
   UPHZS_HOT = 2
   UPHZS_PRESSED = 3
   UPHZS_DISABLED = 4
End Enum

Public Enum UxThemeDOWNHORZStates
   DNHZS_NORMAL = 1
   DNHZS_HOT = 2
   DNHZS_PRESSED = 3
   DNHZS_DISABLED = 4
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "Page" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemePageParts
   PGRP_UP = 1
   PGRP_DOWN = 2
   PGRP_UPHORZ = 3
   PGRP_DOWNHORZ = 4
End Enum

' //--- Pager uses same states as Spin ---

'
 //-----------------------------------------------------------------------------
----------
' //   "Scrollbar" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeSCROLLBARParts
   SBP_ARROWBTN = 1
   SBP_THUMBBTNHORZ = 2
   SBP_THUMBBTNVERT = 3
   SBP_LOWERTRACKHORZ = 4
   SBP_UPPERTRACKHORZ = 5
   SBP_LOWERTRACKVERT = 6
   SBP_UPPERTRACKVERT = 7
   SBP_GRIPPERHORZ = 8
   SBP_GRIPPERVERT = 9
   SBP_SIZEBOX = 10
End Enum



Public Enum UxThemeARROWBTNStates
   ABS_UPNORMAL = 1
   ABS_UPHOT = 2
   ABS_UPPRESSED = 3
   ABS_UPDISABLED = 4
   ABS_DOWNNORMAL = 5
   ABS_DOWNHOT = 6
   ABS_DOWNPRESSED = 7
   ABS_DOWNDISABLED = 8
   ABS_LEFTNORMAL = 9
   ABS_LEFTHOT = 10
   ABS_LEFTPRESSED = 11
   ABS_LEFTDISABLED = 12
   ABS_RIGHTNORMAL = 13
   ABS_RIGHTHOT = 14
   ABS_RIGHTPRESSED = 15
   ABS_RIGHTDISABLED = 16
End Enum

Public Enum UxThemeSCROLLBARStates
   SCRBS_NORMAL = 1
   SCRBS_HOT = 2
   SCRBS_PRESSED = 3
   SCRBS_DISABLED = 4
End Enum

Public Enum UxThemeSIZEBOXStates
   SZB_RIGHTALIGN = 1
   SZB_LEFTALIGN = 2
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "Edit" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeEDITParts
   EP_EDITTEXT = 1
   EP_CARET = 2
End Enum

Public Enum UxThemeEDITTEXTStates
   ETS_NORMAL = 1
   ETS_HOT = 2
   ETS_SELECTED = 3
   ETS_DISABLED = 4
   ETS_FOCUSED = 5
   ETS_READONLY = 6
   ETS_ASSIST = 7
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "ComboBox" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeComboBoxParts
   CP_DROPDOWNBUTTON = 1
End Enum

Public Enum UxThemeComboBoxStates
   CBXS_NORMAL = 1
   CBXS_HOT = 2
   CBXS_PRESSED = 3
   CBXS_DISABLED = 4
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "Taskbar Clock" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeCLOCKParts
   CLP_TIME = 1
End Enum

Public Enum UxThemeCLOCKStates
   CLS_NORMAL = 1
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "Tray Notify" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeTRAYNOTIFYParts
   TNP_BACKGROUND = 1
   TNP_ANIMBACKGROUND = 2
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "TaskBar" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeTASKBARParts
   TBP_BACKGROUNDBOTTOM = 1
   TBP_BACKGROUNDRIGHT = 2
   TBP_BACKGROUNDTOP = 3
   TBP_BACKGROUNDLEFT = 4
   TBP_SIZINGBARBOTTOM = 5
   TBP_SIZINGBARRIGHT = 6
   TBP_SIZINGBARTOP = 7
   TBP_SIZINGBARLEFT = 8
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "TaskBand" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeTASKBANDParts
   TDP_GROUPCOUNT = 1
   TDP_FLASHBUTTON = 2
   TDP_FLASHBUTTONGROUPMENU = 3
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "StartPanel" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeSTARTPANELParts
   SPP_USERPANE = 1
   SPP_MOREPROGRAMS = 2
   SPP_MOREPROGRAMSARROW = 3
   SPP_PROGLIST = 4
   SPP_PROGLISTSEPARATOR = 5
   SPP_PLACESLIST = 6
   SPP_PLACESLISTSEPARATOR = 7
   SPP_LOGOFF = 8
   SPP_LOGOFFBUTTONS = 9
   SPP_USERPICTURE = 10
   SPP_PREVIEW = 11
End Enum

Public Enum UxThemeMOREPROGRAMSARROWStates
   SPS_NORMAL = 1
   SPS_HOT = 2
   SPS_PRESSED = 3
End Enum

Public Enum UxThemeLOGOFFBUTTONSStates
   SPLS_NORMAL = 1
   SPLS_HOT = 2
   SPLS_PRESSED = 3
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "ExplorerBar" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeEXPLORERBARParts
   EBP_HEADERBACKGROUND = 1
   EBP_HEADERCLOSE = 2
   EBP_HEADERPIN = 3
   EBP_IEBARMENU = 4
   EBP_NORMALGROUPBACKGROUND = 5
   EBP_NORMALGROUPCOLLAPSE = 6
   EBP_NORMALGROUPEXPAND = 7
   EBP_NORMALGROUPHEAD = 8
   EBP_SPECIALGROUPBACKGROUND = 9
   EBP_SPECIALGROUPCOLLAPSE = 10
   EBP_SPECIALGROUPEXPAND = 11
   EBP_SPECIALGROUPHEAD = 12
End Enum

Public Enum UxThemeHEADERCLOSEStates
   EBHC_NORMAL = 1
   EBHC_HOT = 2
   EBHC_PRESSED = 3
End Enum

Public Enum UxThemeHEADERPINStates
   EBHP_NORMAL = 1
   EBHP_HOT = 2
   EBHP_PRESSED = 3
   EBHP_SELECTEDNORMAL = 4
   EBHP_SELECTEDHOT = 5
   EBHP_SELECTEDPRESSED = 6
End Enum

Public Enum UxThemeIEBARMENUStates
   EBM_NORMAL = 1
   EBM_HOT = 2
   EBM_PRESSED = 3
End Enum

Public Enum UxThemeNORMALGROUPCOLLAPSEStates
   EBNGC_NORMAL = 1
   EBNGC_HOT = 2
   EBNGC_PRESSED = 3
End Enum

Public Enum UxThemeNORMALGROUPEXPANDStates
   EBNGE_NORMAL = 1
   EBNGE_HOT = 2
   EBNGE_PRESSED = 3
End Enum

Public Enum UxThemeSPECIALGROUPCOLLAPSEStates
   EBSGC_NORMAL = 1
   EBSGC_HOT = 2
   EBSGC_PRESSED = 3
End Enum

Public Enum UxThemeSPECIALGROUPEXPANDStates
   EBSGE_NORMAL = 1
   EBSGE_HOT = 2
   EBSGE_PRESSED = 3
End Enum

'
 //-----------------------------------------------------------------------------
----------
' //   "TaskBand" Parts & States
'
 //-----------------------------------------------------------------------------
----------
Public Enum UxThemeMENUBANDParts
   MDP_NEWAPPBUTTON = 1
   MDP_SEPERATOR = 2
End Enum

Public Enum UxThemeMENUBANDStates
   MDS_NORMAL = 1
   MDS_HOT = 2
   MDS_PRESSED = 3
   MDS_DISABLED = 4
   MDS_CHECKED = 5
   MDS_HOTCHECKED = 6
End Enum

Private Type SIZE
   cX As Long
   cY As Long
End Type

Private Type RECT
   left As Long
   tOp As Long
   Right As Long
   Bottom As Long
End Type

Private Declare Function GetVersion Lib "kernel32" () As Long
Private Declare Function OpenThemeData Lib "uxtheme.dll" _
   (ByVal hWnd As Long, ByVal pszClassList As Long) As Long
Private Declare Function CloseThemeData Lib "uxtheme.dll" _
   (ByVal hTheme As Long) As Long
Private Declare Function DrawThemeBackground Lib "uxtheme.dll" _
   (ByVal hTheme As Long, ByVal lHDC As Long, _
    ByVal iPartId As Long, ByVal iStateId As Long, _
    pRect As RECT, pClipRect As RECT) As Long
Private Declare Function DrawThemeParentBackground Lib "uxtheme.dll" _
   (ByVal hWnd As Long, ByVal hdc As Long, prc As RECT) As Long
Private Declare Function GetThemeBackgroundContentRect Lib "uxtheme.dll" _
   (ByVal hTheme As Long, ByVal hdc As Long, _
    ByVal iPartId As Long, ByVal iStateId As Long, _
    pBoundingRect As RECT, pContentRect As RECT) As Long
Private Declare Function DrawThemeText Lib "uxtheme.dll" _
   (ByVal hTheme As Long, ByVal hdc As Long, ByVal iPartId As Long, _
    ByVal iStateId As Long, ByVal pszText As Long, _
    ByVal iCharCount As Long, ByVal dwTextFlag As Long, _
    ByVal dwTextFlags2 As Long, pRect As RECT) As Long
Private Declare Function DrawThemeIcon Lib "uxtheme.dll" _
   (ByVal hTheme As Long, ByVal hdc As Long, ByVal iPartId As Long, _
    ByVal iStateId As Long, pRect As RECT, _
    ByVal hIml As Long, ByVal iImageIndex As Long) As Long
Public Enum THEMESIZE
    TS_MIN             '// minimum size
    TS_TRUE            '// size without stretching
    TS_DRAW            '// size that theme mgr will use to draw part
End Enum
Private Declare Function GetThemePartSize Lib "uxtheme.dll" _
   (ByVal hTheme As Long, ByVal hdc As Long, ByVal iPartId As Long, _
   ByVal iStateId As Long, prc As RECT, ByVal eSize As THEMESIZE, _
   psz As SIZE) As Long
Private Declare Function GetThemeTextExtent Lib "uxtheme.dll" _
   (ByVal hTheme As Long, ByVal hdc As Long, _
    ByVal iPartId As Long, ByVal iStateId As Long, _
    ByVal pszText As Long, ByVal iCharCount As Long, _
    ByVal dwTextFlags As DrawTextFlags, pBoundingRect As RECT, _
    pExtentRect As RECT) As Long
Private Declare Function DrawThemeEdge Lib "uxtheme.dll" _
   (ByVal hTheme As Long, ByVal hdc As Long, _
   ByVal iPartId As Long, ByVal iStateId As Long, _
   pDestRect As RECT, _
   ByVal uEdge As DrawEdgeEdgeTypes, ByVal uFlags As DrawEdgeBorderFlags, _
   pContentRect As RECT) As Long
Private Const S_OK = 0
Private Const HWND_DESKTOP = 0

Public Enum DrawTextFlags
    DT_TOP = &H0
    DT_LEFT = &H0
    DT_CENTER = &H1
    DT_RIGHT = &H2
    DT_VCENTER = &H4
    DT_BOTTOM = &H8
    DT_WORDBREAK = &H10
    DT_SINGLELINE = &H20
    DT_EXPANDTABS = &H40
    DT_TABSTOP = &H80
    DT_NOCLIP = &H100
    DT_EXTERNALLEADING = &H200
    DT_CALCRECT = &H400
    DT_NOPREFIX = &H800
    DT_INTERNAL = &H1000
    DT_EDITCONTROL = &H2000
    DT_PATH_ELLIPSIS = &H4000
    DT_END_ELLIPSIS = &H8000
    DT_MODIFYSTRING = &H10000
    DT_RTLREADING = &H20000
    DT_WORD_ELLIPSIS = &H40000
    DT_NOFULLWIDTHCHARBREAK = &H80000
    DT_HIDEPREFIX = &H100000
    DT_PREFIXONLY = &H200000
End Enum

Public Enum DrawEdgeEdgeTypes
    BDR_RAISEDOUTER = &H1
    BDR_SUNKENOUTER = &H2
    BDR_RAISEDINNER = &H4
    BDR_SUNKENINNER = &H8

    BDR_OUTER = (BDR_RAISEDOUTER Or BDR_SUNKENOUTER)
    BDR_INNER = (BDR_RAISEDINNER Or BDR_SUNKENINNER)
    BDR_RAISED = (BDR_RAISEDOUTER Or BDR_RAISEDINNER)
    BDR_SUNKEN = (BDR_SUNKENOUTER Or BDR_SUNKENINNER)


    EDGE_RAISED = (BDR_RAISEDOUTER Or BDR_RAISEDINNER)
    EDGE_SUNKEN = (BDR_SUNKENOUTER Or BDR_SUNKENINNER)
    EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER)
    EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER)
End Enum

Public Enum DrawEdgeBorderFlags
    BF_LEFT = &H1
    BF_TOP = &H2
    BF_RIGHT = &H4
    BF_BOTTOM = &H8

    BF_TOPLEFT = (BF_TOP Or BF_LEFT)
    BF_TOPRIGHT = (BF_TOP Or BF_RIGHT)
    BF_BOTTOMLEFT = (BF_BOTTOM Or BF_LEFT)
    BF_BOTTOMRIGHT = (BF_BOTTOM Or BF_RIGHT)
    BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)

    BF_DIAGONAL = &H10
    
    BF_DIAGONAL_ENDTOPRIGHT = (BF_DIAGONAL Or BF_TOP Or BF_RIGHT)
    BF_DIAGONAL_ENDTOPLEFT = (BF_DIAGONAL Or BF_TOP Or BF_LEFT)
    BF_DIAGONAL_ENDBOTTOMLEFT = (BF_DIAGONAL Or BF_BOTTOM Or BF_LEFT)
    BF_DIAGONAL_ENDBOTTOMRIGHT = (BF_DIAGONAL Or BF_BOTTOM Or BF_RIGHT)

    BF_MIDDLE = &H800         '/* Fill in the middle */
    BF_SOFT = &H1000          '/* For softer buttons */
    BF_ADJUST = &H2000        '/* Calculate the space left over */
    BF_FLAT = &H4000          '/* For flat rather than 3D borders */
    BF_MONO = &H8000          '/* For monochrome borders */
End Enum

Public Enum DrawTextAdditionalFlags
   DTT_GRAYED = &H1           '// draw a grayed-out string
End Enum

Private Declare Function ImageList_GetImageRect Lib "comctl32.dll" ( _
        ByVal hIml As Long, _
        ByVal i As Long, _
        prcImage As RECT _
    ) As Long


Private m_sClass As String
Private m_lPartId As Long
Private m_lStateId As Long
Private m_hDC As Long
Private m_hWnd As Long
Private m_lLeft As Long
Private m_lTop As Long
Private m_lWidth As Long
Private m_lHeight As Long
Private m_sText As String
Private m_eTextAlign As DrawTextFlags
Private m_lIconIndex As Long
Private m_hIml As Long
Private m_bRaiseError As Boolean
Private m_bUseThemeSize As Boolean

Public Property Get RaiseErrors() As Boolean
   RaiseErrors = m_bRaiseError
End Property
Public Property Let RaiseErrors(ByVal value As Boolean)
   m_bRaiseError = value
End Property
Public Property Get UseThemeSize() As Boolean
   UseThemeSize = m_bUseThemeSize
End Property
Public Property Let UseThemeSize(ByVal value As Boolean)
   m_bUseThemeSize = value
End Property
Public Property Get Class() As String
   Class = m_sClass
End Property
Public Property Let Class(ByVal value As String)
   m_sClass = value
End Property
Public Property Get Part() As Long
   Part = m_lPartId
End Property
Public Property Let Part(ByVal value As Long)
   m_lPartId = value
End Property
Public Property Get State() As Long
   State = m_lStateId
End Property
Public Property Let State(ByVal value As Long)
   m_lStateId = value
End Property
Public Property Get hIml() As Long
   hIml = m_hIml
End Property
Public Property Let hIml(ByVal value As Long)
   m_hIml = value
End Property
Public Property Get hdc() As Long
   hdc = m_hDC
End Property
Public Property Let hdc(ByVal value As Long)
   m_hDC = value
End Property
Public Property Get hWnd() As Long
   hWnd = m_hWnd
End Property
Public Property Let hWnd(ByVal value As Long)
   m_hWnd = value
End Property

Public Property Get Text() As String
   Text = m_sText
End Property
Public Property Let Text(ByVal value As String)
   m_sText = value
End Property
Public Property Get TextAlign() As DrawTextFlags
   TextAlign = m_eTextAlign
End Property
Public Property Let TextAlign(ByVal value As DrawTextFlags)
   m_eTextAlign = value
End Property
Public Property Get IconIndex() As Long
   IconIndex = m_lIconIndex
End Property
Public Property Let IconIndex(ByVal value As Long)
   m_lIconIndex = value
End Property
Public Property Get left() As Long
   left = m_lLeft
End Property
Public Property Let left(ByVal value As Long)
   m_lLeft = value
End Property
Public Property Get tOp() As Long
   tOp = m_lTop
End Property
Public Property Let tOp(ByVal value As Long)
   m_lTop = value
End Property
Public Property Get Width() As Long
   Width = m_lWidth
End Property
Public Property Let Width(ByVal value As Long)
   m_lWidth = value
End Property
Public Property Get Height() As Long
   Height = m_lHeight
End Property
Public Property Let Height(ByVal value As Long)
   m_lHeight = value
End Property
Public Property Get PartWidth(Optional ByVal eWidthOptions As THEMESIZE =
 TS_TRUE) As Long
   Dim tSize As SIZE
   Dim tR As RECT
   Dim hTheme As Long
   Dim lR As Long
   hTheme = OpenThemeData(m_hWnd, StrPtr(m_sClass))
   If (hTheme) Then
      lR = GetThemePartSize(hTheme, m_hDC, m_lPartId, m_lStateId, tR,
       eWidthOptions, tSize)
      If (lR = S_OK) Then
         PartWidth = tSize.cX
      Else
         pFailed "Failed to read part size for class '" & m_sClass & "',
          partId=" & m_lPartId & ", stateId=" & m_lStateId, lR
      End If
      CloseThemeData hTheme
   Else
      pFailed "No theme data for class '" & m_sClass & "'", Err.LastDllError
   End If
End Property
Public Property Get PartHeight(Optional ByVal eWidthOptions As THEMESIZE =
 TS_TRUE) As Long
   Dim tSize As SIZE
   Dim tR As RECT
   Dim hTheme As Long
   Dim lR As Long
   hTheme = OpenThemeData(m_hWnd, StrPtr(m_sClass))
   If (hTheme) Then
      lR = GetThemePartSize(hTheme, m_hDC, m_lPartId, m_lStateId, tR,
       eWidthOptions, tSize)
      If (lR = S_OK) Then
         PartHeight = tSize.cY
      Else
         pFailed "Failed to read part size for class '" & m_sClass & "',
          partId=" & m_lPartId & ", stateId=" & m_lStateId, lR
      End If
      CloseThemeData hTheme
   Else
      pFailed "No theme data for class '" & m_sClass & "'", Err.LastDllError
   End If
End Property

Public Function Draw() As Boolean
Dim hTheme As Long
Dim bSuccess As Boolean
Dim lR As Long
Dim tTextR As RECT
Dim tContentR As RECT
Dim tImlR As RECT
   
   bSuccess = True
   hTheme = OpenThemeData(m_hWnd, StrPtr(m_sClass))
   If (hTheme) Then
      
      Dim tR As RECT
      Dim lWidthTaken As Long
      tR.left = m_lLeft
      tR.tOp = m_lTop
      If (m_lIconIndex > -1) And (m_hIml) Then
         ImageList_GetImageRect m_hIml, m_lIconIndex, tImlR
         lWidthTaken = tImlR.Right - tImlR.left + 4
      End If
      
      If (m_bUseThemeSize) Then
         Dim tSize As SIZE
         lR = GetThemePartSize(hTheme, m_hDC, m_lPartId, m_lStateId, tR,
          TS_TRUE, tSize)
         tR.Right = tR.left + tSize.cX
         tR.Bottom = tR.tOp + tSize.cY
         lR = GetThemeBackgroundContentRect(hTheme, m_hDC, m_lPartId,
          m_lStateId, tR, tContentR)
         If (m_lIconIndex > -1) And (m_hIml) Then
            If ((tContentR.Bottom - tContentR.tOp) < (tImlR.Bottom - tImlR.tOp
             + 4)) Then
               tR.Bottom = tR.Bottom + ((tImlR.Bottom - tImlR.tOp + 4) -
                (tContentR.Bottom - tContentR.tOp))
            End If
            If ((tContentR.Right - tContentR.left) < (tImlR.Right - tImlR.left
             + 4)) Then
               tR.Right = tR.Right + ((tImlR.Right - tImlR.left + 4) -
                (tContentR.Right - tContentR.left))
            End If
         End If
         If Len(m_sText) > 0 Then
            lR = GetThemeBackgroundContentRect(hTheme, m_hDC, m_lPartId,
             m_lStateId, tR, tContentR)
            lR = GetThemeTextExtent(hTheme, m_hDC, m_lPartId, m_lStateId,
             StrPtr(m_sText), -1, m_eTextAlign, tR, tTextR)
            If ((tContentR.Bottom - tContentR.tOp) < (tTextR.Bottom -
             tTextR.tOp)) Then
               tR.Bottom = tR.Bottom + ((tTextR.Bottom - tTextR.tOp) -
                (tContentR.Bottom - tContentR.tOp))
            End If
            If ((tContentR.Right - tContentR.left - lWidthTaken) <
             (tTextR.Right - tTextR.left + 8)) Then
               tR.Right = tR.Right + ((tTextR.Right - tTextR.left + 8) -
                (tContentR.Right - tContentR.left - lWidthTaken))
            End If
         End If
      Else
         tR.Right = m_lLeft + m_lWidth
         tR.Bottom = m_lTop + m_lHeight
      End If
      
      lR = DrawThemeParentBackground( _
         m_hWnd, _
         m_hDC, _
         tR)
      If (lR <> S_OK) Then
         bSuccess = False
         pFailed "Failed to parent draw background for class '" & m_sClass &
          "', partId=" & m_lPartId & ", stateId=" & m_lStateId, lR
      End If
      lR = DrawThemeBackground( _
         hTheme, _
         m_hDC, _
         m_lPartId, _
         m_lStateId, _
         tR, tR)
      If (lR <> S_OK) Then
         bSuccess = False
         pFailed "Failed to draw background for class '" & m_sClass & "',
          partId=" & m_lPartId & ", stateId=" & m_lStateId, lR
      End If
      If Len(m_sText) > 0 Then
         lR = GetThemeBackgroundContentRect( _
            hTheme, _
            m_hDC, _
            m_lPartId, _
            m_lStateId, _
            tR, _
            tTextR)
         If (lR <> S_OK) Then
            bSuccess = False
            pFailed "Failed to retrieve background content rectangle for class
             '" & m_sClass & "', partId=" & m_lPartId & ", stateId=" &
             m_lStateId, lR
         End If
         tTextR.left = tTextR.left + lWidthTaken
         lR = DrawThemeText( _
            hTheme, _
            m_hDC, _
            m_lPartId, _
            m_lStateId, _
            StrPtr(m_sText), _
            -1, _
            m_eTextAlign, _
            0, _
            tTextR)
         If (lR <> S_OK) Then
            bSuccess = False
            pFailed "Failed to draw theme text for class '" & m_sClass & "',
             partId=" & m_lPartId & ", stateId=" & m_lStateId, lR
         End If
      End If
      If (m_lIconIndex > -1) Then
         Dim tIconR As RECT
         lR = GetThemeBackgroundContentRect( _
            hTheme, _
            m_hDC, _
            m_lPartId, _
            m_lStateId, _
            tR, _
            tIconR)
         ImageList_GetImageRect m_hIml, m_lIconIndex, tImlR
         tIconR.left = tIconR.left + 2
         tIconR.tOp = tIconR.tOp + 2
         tIconR.Right = tIconR.left + tImlR.Right - tImlR.left
         tIconR.Bottom = tIconR.tOp + tImlR.Bottom - tImlR.tOp
         lR = DrawThemeIcon( _
            hTheme, _
            m_hDC, _
            m_lPartId, _
            m_lStateId, _
            tIconR, _
            m_hIml, _
            m_lIconIndex)
         If (lR <> S_OK) Then
            bSuccess = False
            pFailed "Failed to draw theme icon for class '" & m_sClass & "',
             partId=" & m_lPartId & ", stateId=" & m_lStateId, lR
         End If
      End If
      CloseThemeData hTheme
   Else
      pFailed "No theme data for class '" & m_sClass & "'", Err.LastDllError
      bSuccess = False
   End If
   Draw = bSuccess
End Function

Private Sub pFailed(ByVal sMsg As String, ByVal lR As Long)
Dim sError As String
   sError = WinAPIError(lR)
   If (m_bRaiseError) Then
      Err.Raise vbObjectError + 1048 + 10, App.EXEName & ".cUxTheme", sMsg &
       vbCrLf & sError
   Else
      'Debug.Print sMsg & vbCrLf & sError
   End If
End Sub

Private Function WinAPIError(ByVal lLastDLLError As Long) As String
Dim sBuff As String
Dim lCount As Long
    
    ' Return the error message associated with LastDLLError:
    sBuff = String$(256, 0)
    lCount = FormatMessage( _
      FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS, _
       0, lLastDLLError, 0&, sBuff, Len(sBuff), ByVal 0)
    If lCount Then
       WinAPIError = left$(sBuff, lCount)
    End If

End Function

Private Sub Class_Initialize()
   m_sClass = "Button"
   m_lPartId = 1
   m_lStateId = 1
   m_lIconIndex = -1
End Sub