VisualStylesXP.cpp
上传用户:wlkj888
上传日期:2022-08-01
资源大小:806k
文件大小:15k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Copyright (C) 2001-2002 by David Yuheng Zhao
  3. //
  4. // Distribute and change freely, except: don't remove my name from the source 
  5. //
  6. // No warrantee of any kind, express or implied, is included with this
  7. // software; use at your own risk, responsibility for damages (if any) to
  8. // anyone resulting from the use of this software rests entirely with the
  9. // user.
  10. //
  11. // Partly based on the _ThemeHelper struct in MFC7.0 source code (winctrl3.cpp), 
  12. // and the difference is that this implementation wraps the full set of 
  13. // visual style APIs from the platform SDK August 2001
  14. //
  15. // If you have any questions, I can be reached as follows:
  16. // yuheng_zhao@yahoo.com
  17. //
  18. //
  19. // How to use:
  20. // Instead of calling the API directly, 
  21. //    OpenThemeData(...);
  22. // use the global variable
  23. //    g_xpStyle.OpenThemeData(...);
  24. //
  25. /////////////////////////////////////////////////////////////////////////////
  26. #include "stdafx.h"
  27. #include "visualstylesxp.h"
  28. //CVisualStylesXP g_xpStyle;
  29. CVisualStylesXP::CVisualStylesXP(void)
  30. {
  31. m_hThemeDll = LoadLibrary(_T("UxTheme.dll"));
  32. }
  33. CVisualStylesXP::~CVisualStylesXP(void)
  34. {
  35. if (m_hThemeDll!=NULL)
  36. FreeLibrary(m_hThemeDll);
  37. m_hThemeDll = NULL;
  38. }
  39. void* CVisualStylesXP::GetProc(LPCSTR szProc, void* pfnFail)
  40. {
  41. void* pRet = pfnFail;
  42. if (m_hThemeDll != NULL)
  43. pRet = GetProcAddress(m_hThemeDll, szProc);
  44. return pRet;
  45. }
  46. HTHEME CVisualStylesXP::OpenThemeData(HWND hwnd, LPCWSTR pszClassList)
  47. {
  48. PFNOPENTHEMEDATA pfnOpenThemeData = (PFNOPENTHEMEDATA)GetProc("OpenThemeData", (void*)OpenThemeDataFail);
  49. return (*pfnOpenThemeData)(hwnd, pszClassList);
  50. }
  51. HRESULT CVisualStylesXP::CloseThemeData(HTHEME hTheme)
  52. {
  53. PFNCLOSETHEMEDATA pfnCloseThemeData = (PFNCLOSETHEMEDATA)GetProc("CloseThemeData", (void*)CloseThemeDataFail);
  54. return (*pfnCloseThemeData)(hTheme);
  55. }
  56. HRESULT CVisualStylesXP::DrawThemeBackground(HTHEME hTheme, HDC hdc, 
  57.  int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
  58. {
  59. PFNDRAWTHEMEBACKGROUND pfnDrawThemeBackground = 
  60. (PFNDRAWTHEMEBACKGROUND)GetProc("DrawThemeBackground", (void*)DrawThemeBackgroundFail);
  61. return (*pfnDrawThemeBackground)(hTheme, hdc, iPartId, iStateId, pRect, pClipRect);
  62. }
  63. HRESULT CVisualStylesXP::DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, 
  64.    int iStateId, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, 
  65.    DWORD dwTextFlags2, const RECT *pRect)
  66. {
  67. PFNDRAWTHEMETEXT pfn = (PFNDRAWTHEMETEXT)GetProc("DrawThemeText", (void*)DrawThemeTextFail);
  68. return (*pfn)(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect);
  69. }
  70. HRESULT CVisualStylesXP::GetThemeBackgroundContentRect(HTHEME hTheme,  HDC hdc, 
  71.    int iPartId, int iStateId,  const RECT *pBoundingRect, 
  72.    RECT *pContentRect)
  73. {
  74. PFNGETTHEMEBACKGROUNDCONTENTRECT pfn = (PFNGETTHEMEBACKGROUNDCONTENTRECT)GetProc("GetThemeBackgroundContentRect", (void*)GetThemeBackgroundContentRectFail);
  75. return (*pfn)(hTheme,  hdc, iPartId, iStateId,  pBoundingRect, pContentRect);
  76. }
  77. HRESULT CVisualStylesXP::GetThemeBackgroundExtent(HTHEME hTheme,  HDC hdc,
  78.   int iPartId, int iStateId, const RECT *pContentRect, 
  79.   RECT *pExtentRect)
  80. {
  81. PFNGETTHEMEBACKGROUNDEXTENT pfn = (PFNGETTHEMEBACKGROUNDEXTENT)GetProc("GetThemeBackgroundExtent", (void*)GetThemeBackgroundExtentFail);
  82. return (*pfn)(hTheme, hdc, iPartId, iStateId, pContentRect, pExtentRect);
  83. }
  84. HRESULT CVisualStylesXP::GetThemePartSize(HTHEME hTheme, HDC hdc, 
  85.   int iPartId, int iStateId, RECT * pRect, enum THEMESIZE eSize, SIZE *psz)
  86. {
  87. PFNGETTHEMEPARTSIZE pfnGetThemePartSize = 
  88. (PFNGETTHEMEPARTSIZE)GetProc("GetThemePartSize", (void*)GetThemePartSizeFail);
  89. return (*pfnGetThemePartSize)(hTheme, hdc, iPartId, iStateId, pRect, eSize, psz);
  90. }
  91. HRESULT CVisualStylesXP::GetThemeTextExtent(HTHEME hTheme, HDC hdc, 
  92. int iPartId, int iStateId, LPCWSTR pszText, int iCharCount, 
  93. DWORD dwTextFlags,  const RECT *pBoundingRect, 
  94. RECT *pExtentRect)
  95. {
  96. PFNGETTHEMETEXTEXTENT pfn = (PFNGETTHEMETEXTEXTENT)GetProc("GetThemeTextExtent", (void*)GetThemeTextExtentFail);
  97. return (*pfn)(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags,  pBoundingRect, pExtentRect);
  98. }
  99. HRESULT CVisualStylesXP::GetThemeTextMetrics(HTHEME hTheme,  HDC hdc, 
  100.  int iPartId, int iStateId,  TEXTMETRIC* ptm)
  101. {
  102. PFNGETTHEMETEXTMETRICS pfn = (PFNGETTHEMETEXTMETRICS)GetProc("GetThemeTextMetrics", (void*)GetThemeTextMetricsFail);
  103. return (*pfn)(hTheme, hdc, iPartId, iStateId,  ptm);
  104. }
  105. HRESULT CVisualStylesXP::GetThemeBackgroundRegion(HTHEME hTheme,  HDC hdc,  
  106.   int iPartId, int iStateId, const RECT *pRect,  HRGN *pRegion)
  107. {
  108. PFNGETTHEMEBACKGROUNDREGION pfn = (PFNGETTHEMEBACKGROUNDREGION)GetProc("GetThemeBackgroundRegion", (void*)GetThemeBackgroundRegionFail);
  109. return (*pfn)(hTheme, hdc, iPartId, iStateId, pRect, pRegion);
  110. }
  111. HRESULT CVisualStylesXP::HitTestThemeBackground(HTHEME hTheme,  HDC hdc, int iPartId, 
  112. int iStateId, DWORD dwOptions, const RECT *pRect,  HRGN hrgn, 
  113. POINT ptTest,  WORD *pwHitTestCode)
  114. {
  115. PFNHITTESTTHEMEBACKGROUND pfn = (PFNHITTESTTHEMEBACKGROUND)GetProc("HitTestThemeBackground", (void*)HitTestThemeBackgroundFail);
  116. return (*pfn)(hTheme, hdc, iPartId, iStateId, dwOptions, pRect, hrgn, ptTest, pwHitTestCode);
  117. }
  118. HRESULT CVisualStylesXP::DrawThemeEdge(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, 
  119.    const RECT *pDestRect, UINT uEdge, UINT uFlags,   RECT *pContentRect)
  120. {
  121. PFNDRAWTHEMEEDGE pfn = (PFNDRAWTHEMEEDGE)GetProc("DrawThemeEdge", (void*)DrawThemeEdgeFail);
  122. return (*pfn)(hTheme, hdc, iPartId, iStateId, pDestRect, uEdge, uFlags, pContentRect);
  123. }
  124. HRESULT CVisualStylesXP::DrawThemeIcon(HTHEME hTheme, HDC hdc, int iPartId, 
  125.    int iStateId, const RECT *pRect, HIMAGELIST himl, int iImageIndex)
  126. {
  127. PFNDRAWTHEMEICON pfn = (PFNDRAWTHEMEICON)GetProc("DrawThemeIcon", (void*)DrawThemeIconFail);
  128. return (*pfn)(hTheme, hdc, iPartId, iStateId, pRect, himl, iImageIndex);
  129. }
  130. BOOL CVisualStylesXP::IsThemePartDefined(HTHEME hTheme, int iPartId, 
  131.  int iStateId)
  132. {
  133. PFNISTHEMEPARTDEFINED pfn = (PFNISTHEMEPARTDEFINED)GetProc("IsThemePartDefined", (void*)IsThemePartDefinedFail);
  134. return (*pfn)(hTheme, iPartId, iStateId);
  135. }
  136. BOOL CVisualStylesXP::IsThemeBackgroundPartiallyTransparent(HTHEME hTheme, 
  137. int iPartId, int iStateId)
  138. {
  139. PFNISTHEMEBACKGROUNDPARTIALLYTRANSPARENT pfn = (PFNISTHEMEBACKGROUNDPARTIALLYTRANSPARENT)GetProc("IsThemeBackgroundPartiallyTransparent", (void*)IsThemeBackgroundPartiallyTransparentFail);
  140. return (*pfn)(hTheme, iPartId, iStateId);
  141. }
  142. HRESULT CVisualStylesXP::GetThemeColor(HTHEME hTheme, int iPartId, 
  143.    int iStateId, int iPropId,  COLORREF *pColor)
  144. {
  145. PFNGETTHEMECOLOR pfn = (PFNGETTHEMECOLOR)GetProc("GetThemeColor", (void*)GetThemeColorFail);
  146. return (*pfn)(hTheme, iPartId, iStateId, iPropId, pColor);
  147. }
  148. HRESULT CVisualStylesXP::GetThemeMetric(HTHEME hTheme,  HDC hdc, int iPartId, 
  149. int iStateId, int iPropId,  int *piVal)
  150. {
  151. PFNGETTHEMEMETRIC pfn = (PFNGETTHEMEMETRIC)GetProc("GetThemeMetric", (void*)GetThemeMetricFail);
  152. return (*pfn)(hTheme, hdc, iPartId, iStateId, iPropId, piVal);
  153. }
  154. HRESULT CVisualStylesXP::GetThemeString(HTHEME hTheme, int iPartId, 
  155. int iStateId, int iPropId,  LPWSTR pszBuff, int cchMaxBuffChars)
  156. {
  157. PFNGETTHEMESTRING pfn = (PFNGETTHEMESTRING)GetProc("GetThemeString", (void*)GetThemeStringFail);
  158. return (*pfn)(hTheme, iPartId, iStateId, iPropId, pszBuff, cchMaxBuffChars);
  159. }
  160. HRESULT CVisualStylesXP::GetThemeBool(HTHEME hTheme, int iPartId, 
  161.   int iStateId, int iPropId,  BOOL *pfVal)
  162. {
  163. PFNGETTHEMEBOOL pfn = (PFNGETTHEMEBOOL)GetProc("GetThemeBool", (void*)GetThemeBoolFail);
  164. return (*pfn)(hTheme, iPartId, iStateId, iPropId, pfVal);
  165. }
  166. HRESULT CVisualStylesXP::GetThemeInt(HTHEME hTheme, int iPartId, 
  167.  int iStateId, int iPropId,  int *piVal)
  168. {
  169. PFNGETTHEMEINT pfn = (PFNGETTHEMEINT)GetProc("GetThemeInt", (void*)GetThemeIntFail);
  170. return (*pfn)(hTheme, iPartId, iStateId, iPropId, piVal);
  171. }
  172. HRESULT CVisualStylesXP::GetThemeEnumValue(HTHEME hTheme, int iPartId, 
  173.    int iStateId, int iPropId,  int *piVal)
  174. {
  175. PFNGETTHEMEENUMVALUE pfn = (PFNGETTHEMEENUMVALUE)GetProc("GetThemeEnumValue", (void*)GetThemeEnumValueFail);
  176. return (*pfn)(hTheme, iPartId, iStateId, iPropId, piVal);
  177. }
  178. HRESULT CVisualStylesXP::GetThemePosition(HTHEME hTheme, int iPartId, 
  179.   int iStateId, int iPropId,  POINT *pPoint)
  180. {
  181. PFNGETTHEMEPOSITION pfn = (PFNGETTHEMEPOSITION)GetProc("GetThemePosition", (void*)GetThemePositionFail);
  182. return (*pfn)(hTheme, iPartId, iStateId, iPropId, pPoint);
  183. }
  184. HRESULT CVisualStylesXP::GetThemeFont(HTHEME hTheme,  HDC hdc, int iPartId, 
  185.   int iStateId, int iPropId,  LOGFONT *pFont)
  186. {
  187. PFNGETTHEMEFONT pfn = (PFNGETTHEMEFONT)GetProc("GetThemeFont", (void*)GetThemeFontFail);
  188. return (*pfn)(hTheme, hdc, iPartId, iStateId, iPropId, pFont);
  189. }
  190. HRESULT CVisualStylesXP::GetThemeRect(HTHEME hTheme, int iPartId, 
  191.   int iStateId, int iPropId,  RECT *pRect)
  192. {
  193. PFNGETTHEMERECT pfn = (PFNGETTHEMERECT)GetProc("GetThemeRect", (void*)GetThemeRectFail);
  194. return (*pfn)(hTheme, iPartId, iStateId, iPropId, pRect);
  195. }
  196. HRESULT CVisualStylesXP::GetThemeMargins(HTHEME hTheme,  HDC hdc, int iPartId, 
  197.  int iStateId, int iPropId,  RECT *prc,  MARGINS *pMargins)
  198. {
  199. PFNGETTHEMEMARGINS pfn = (PFNGETTHEMEMARGINS)GetProc("GetThemeMargins", (void*)GetThemeMarginsFail);
  200. return (*pfn)(hTheme, hdc, iPartId, iStateId, iPropId, prc, pMargins);
  201. }
  202. HRESULT CVisualStylesXP::GetThemeIntList(HTHEME hTheme, int iPartId, 
  203.  int iStateId, int iPropId,  INTLIST *pIntList)
  204. {
  205. PFNGETTHEMEINTLIST pfn = (PFNGETTHEMEINTLIST)GetProc("GetThemeIntList", (void*)GetThemeIntListFail);
  206. return (*pfn)(hTheme, iPartId, iStateId, iPropId, pIntList);
  207. }
  208. HRESULT CVisualStylesXP::GetThemePropertyOrigin(HTHEME hTheme, int iPartId, 
  209. int iStateId, int iPropId,  enum PROPERTYORIGIN *pOrigin)
  210. {
  211. PFNGETTHEMEPROPERTYORIGIN pfn = (PFNGETTHEMEPROPERTYORIGIN)GetProc("GetThemePropertyOrigin", (void*)GetThemePropertyOriginFail);
  212. return (*pfn)(hTheme, iPartId, iStateId, iPropId, pOrigin);
  213. }
  214. HRESULT CVisualStylesXP::SetWindowTheme(HWND hwnd, LPCWSTR pszSubAppName, 
  215. LPCWSTR pszSubIdList)
  216. {
  217. PFNSETWINDOWTHEME pfn = (PFNSETWINDOWTHEME)GetProc("SetWindowTheme", (void*)SetWindowThemeFail);
  218. return (*pfn)(hwnd, pszSubAppName, pszSubIdList);
  219. }
  220. HRESULT CVisualStylesXP::GetThemeFilename(HTHEME hTheme, int iPartId, 
  221.   int iStateId, int iPropId,  LPWSTR pszThemeFileName, int cchMaxBuffChars)
  222. {
  223. PFNGETTHEMEFILENAME pfn = (PFNGETTHEMEFILENAME)GetProc("GetThemeFilename", (void*)GetThemeFilenameFail);
  224. return (*pfn)(hTheme, iPartId, iStateId, iPropId,  pszThemeFileName, cchMaxBuffChars);
  225. }
  226. COLORREF CVisualStylesXP::GetThemeSysColor(HTHEME hTheme, int iColorId)
  227. {
  228. PFNGETTHEMESYSCOLOR pfn = (PFNGETTHEMESYSCOLOR)GetProc("GetThemeSysColor", (void*)GetThemeSysColorFail);
  229. return (*pfn)(hTheme, iColorId);
  230. }
  231. HBRUSH CVisualStylesXP::GetThemeSysColorBrush(HTHEME hTheme, int iColorId)
  232. {
  233. PFNGETTHEMESYSCOLORBRUSH pfn = (PFNGETTHEMESYSCOLORBRUSH)GetProc("GetThemeSysColorBrush", (void*)GetThemeSysColorBrushFail);
  234. return (*pfn)(hTheme, iColorId);
  235. }
  236. BOOL CVisualStylesXP::GetThemeSysBool(HTHEME hTheme, int iBoolId)
  237. {
  238. PFNGETTHEMESYSBOOL pfn = (PFNGETTHEMESYSBOOL)GetProc("GetThemeSysBool", (void*)GetThemeSysBoolFail);
  239. return (*pfn)(hTheme, iBoolId);
  240. }
  241. int CVisualStylesXP::GetThemeSysSize(HTHEME hTheme, int iSizeId)
  242. {
  243. PFNGETTHEMESYSSIZE pfn = (PFNGETTHEMESYSSIZE)GetProc("GetThemeSysSize", (void*)GetThemeSysSizeFail);
  244. return (*pfn)(hTheme, iSizeId);
  245. }
  246. HRESULT CVisualStylesXP::GetThemeSysFont(HTHEME hTheme, int iFontId,  LOGFONT *plf)
  247. {
  248. PFNGETTHEMESYSFONT pfn = (PFNGETTHEMESYSFONT)GetProc("GetThemeSysFont", (void*)GetThemeSysFontFail);
  249. return (*pfn)(hTheme, iFontId, plf);
  250. }
  251. HRESULT CVisualStylesXP::GetThemeSysString(HTHEME hTheme, int iStringId, 
  252.    LPWSTR pszStringBuff, int cchMaxStringChars)
  253. {
  254. PFNGETTHEMESYSSTRING pfn = (PFNGETTHEMESYSSTRING)GetProc("GetThemeSysString", (void*)GetThemeSysStringFail);
  255. return (*pfn)(hTheme, iStringId, pszStringBuff, cchMaxStringChars);
  256. }
  257. HRESULT CVisualStylesXP::GetThemeSysInt(HTHEME hTheme, int iIntId, int *piValue)
  258. {
  259. PFNGETTHEMESYSINT pfn = (PFNGETTHEMESYSINT)GetProc("GetThemeSysInt", (void*)GetThemeSysIntFail);
  260. return (*pfn)(hTheme, iIntId, piValue);
  261. }
  262. BOOL CVisualStylesXP::IsThemeActive()
  263. {
  264. PFNISTHEMEACTIVE pfn = (PFNISTHEMEACTIVE)GetProc("IsThemeActive", (void*)IsThemeActiveFail);
  265. return (*pfn)();
  266. }
  267. BOOL CVisualStylesXP::IsAppThemed()
  268. {
  269. PFNISAPPTHEMED pfnIsAppThemed = (PFNISAPPTHEMED)GetProc("IsAppThemed", (void*)IsAppThemedFail);
  270. return (*pfnIsAppThemed)();
  271. }
  272. HTHEME CVisualStylesXP::GetWindowTheme(HWND hwnd)
  273. {
  274. PFNGETWINDOWTHEME pfn = (PFNGETWINDOWTHEME)GetProc("GetWindowTheme", (void*)GetWindowThemeFail);
  275. return (*pfn)(hwnd);
  276. }
  277. HRESULT CVisualStylesXP::EnableThemeDialogTexture(HWND hwnd, DWORD dwFlags)
  278. {
  279. PFNENABLETHEMEDIALOGTEXTURE pfn = (PFNENABLETHEMEDIALOGTEXTURE)GetProc("EnableThemeDialogTexture", (void*)EnableThemeDialogTextureFail);
  280. return (*pfn)(hwnd, dwFlags);
  281. }
  282. BOOL CVisualStylesXP::IsThemeDialogTextureEnabled(HWND hwnd)
  283. {
  284. PFNISTHEMEDIALOGTEXTUREENABLED pfn = (PFNISTHEMEDIALOGTEXTUREENABLED)GetProc("IsThemeDialogTextureEnabled", (void*)IsThemeDialogTextureEnabledFail);
  285. return (*pfn)(hwnd);
  286. }
  287. DWORD CVisualStylesXP::GetThemeAppProperties()
  288. {
  289. PFNGETTHEMEAPPPROPERTIES pfn = (PFNGETTHEMEAPPPROPERTIES)GetProc("GetThemeAppProperties", (void*)GetThemeAppPropertiesFail);
  290. return (*pfn)();
  291. }
  292. void CVisualStylesXP::SetThemeAppProperties(DWORD dwFlags)
  293. {
  294. PFNSETTHEMEAPPPROPERTIES pfn = (PFNSETTHEMEAPPPROPERTIES)GetProc("SetThemeAppProperties", (void*)SetThemeAppPropertiesFail);
  295. (*pfn)(dwFlags);
  296. }
  297. HRESULT CVisualStylesXP::GetCurrentThemeName(
  298. LPWSTR pszThemeFileName, int cchMaxNameChars, 
  299. LPWSTR pszColorBuff, int cchMaxColorChars,
  300. LPWSTR pszSizeBuff, int cchMaxSizeChars)
  301. {
  302. PFNGETCURRENTTHEMENAME pfn = (PFNGETCURRENTTHEMENAME)GetProc("GetCurrentThemeName", (void*)GetCurrentThemeNameFail);
  303. return (*pfn)(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars);
  304. }
  305. HRESULT CVisualStylesXP::GetThemeDocumentationProperty(LPCWSTR pszThemeName,
  306.    LPCWSTR pszPropertyName,  LPWSTR pszValueBuff, int cchMaxValChars)
  307. {
  308. PFNGETTHEMEDOCUMENTATIONPROPERTY pfn = (PFNGETTHEMEDOCUMENTATIONPROPERTY)GetProc("GetThemeDocumentationProperty", (void*)GetThemeDocumentationPropertyFail);
  309. return (*pfn)(pszThemeName, pszPropertyName, pszValueBuff, cchMaxValChars);
  310. }
  311. HRESULT CVisualStylesXP::DrawThemeParentBackground(HWND hwnd, HDC hdc,  RECT* prc)
  312. {
  313. PFNDRAWTHEMEPARENTBACKGROUND pfn = (PFNDRAWTHEMEPARENTBACKGROUND)GetProc("DrawThemeParentBackground", (void*)DrawThemeParentBackgroundFail);
  314. return (*pfn)(hwnd, hdc, prc);
  315. }
  316. HRESULT CVisualStylesXP::EnableTheming(BOOL fEnable)
  317. {
  318. PFNENABLETHEMING pfn = (PFNENABLETHEMING)GetProc("EnableTheming", (void*)EnableThemingFail);
  319. return (*pfn)(fEnable);
  320. }