XTPWinThemeWrapper.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:52k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPWinThemeWrapper.h: interface for the CXTPWinThemeWrapper class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPWINTHEMEWRAPPER_H__)
  22. #define __XTPWINTHEMEWRAPPER_H__
  23. #if _MSC_VER > 1000
  24. #pragma once
  25. #endif // _MSC_VER > 1000
  26. #include "uxtheme.h"
  27. #include "schemadef.h"
  28. #include "tmschema.h"
  29. typedef HANDLE HPAINTBUFFER;
  30. // BP_BUFFERFORMAT
  31. enum XTP_UX_BUFFERFORMAT
  32. {
  33. XTP_BPBF_COMPATIBLEBITMAP,    // Compatible bitmap
  34. XTP_BPBF_DIB,                 // Device-independent bitmap
  35. XTP_BPBF_TOPDOWNDIB,          // Top-down device-independent bitmap
  36. XTP_BPBF_TOPDOWNMONODIB       // Top-down monochrome device-independent bitmap
  37. };
  38. // BP_PAINTPARAMS
  39. struct XTP_UX_PAINTPARAMS
  40. {
  41. DWORD                       cbSize;
  42. DWORD                       dwFlags; // BPPF_ flags
  43. const RECT *                prcExclude;
  44. const BLENDFUNCTION *       pBlendFunction;
  45. };
  46. struct XTP_UX_DTTOPTS
  47. {
  48. DWORD             dwSize;              // size of the struct
  49. DWORD             dwFlags;             // which options have been specified
  50. COLORREF          crText;              // color to use for text fill
  51. COLORREF          crBorder;            // color to use for text outline
  52. COLORREF          crShadow;            // color to use for text shadow
  53. int               iTextShadowType;     // TST_SINGLE or TST_CONTINUOUS
  54. POINT             ptShadowOffset;      // where shadow is drawn (relative to text)
  55. int               iBorderSize;         // Border radius around text
  56. int               iFontPropId;         // Font property to use for the text instead of TMT_FONT
  57. int               iColorPropId;        // Color property to use for the text instead of TMT_TEXTCOLOR
  58. int               iStateId;            // Alternate state id
  59. BOOL              fApplyOverlay;       // Overlay text on top of any text effect?
  60. int               iGlowSize;           // Glow radius around text
  61. VOID*             pfnDrawTextCallback; // Callback for DrawText
  62. LPARAM            lParam;              // Parameter for callback
  63. };
  64. struct _DTBGOPTS;
  65. typedef _DTBGOPTS* PDTBGOPTS;
  66. #define TYPEDEF_WRAPPER_POINTER(val, type, proc)
  67. const int xtpWrapper##proc = val;
  68. const LPCSTR xtpWrapperProc##proc = #proc;
  69. typedef type (__stdcall* PFN##proc)
  70. TYPEDEF_WRAPPER_POINTER(0, HRESULT, DrawThemeBackground)(HTHEME, HDC, int, int, const RECT*, const RECT*);
  71. TYPEDEF_WRAPPER_POINTER(1, HRESULT, CloseThemeData)(HTHEME);
  72. TYPEDEF_WRAPPER_POINTER(2, HRESULT, SetWindowTheme)(HWND, LPCWSTR, LPCWSTR);
  73. TYPEDEF_WRAPPER_POINTER(3, void, SetThemeAppProperties)(DWORD);
  74. TYPEDEF_WRAPPER_POINTER(4, HTHEME, OpenThemeData)(HWND, LPCWSTR);
  75. TYPEDEF_WRAPPER_POINTER(5, BOOL, IsThemePartDefined)(HTHEME, int, int);
  76. TYPEDEF_WRAPPER_POINTER(6, BOOL, IsThemeDialogTextureEnabled)();
  77. TYPEDEF_WRAPPER_POINTER(7, BOOL, IsThemeBackgroundPartiallyTransparent)(HTHEME, int, int);
  78. TYPEDEF_WRAPPER_POINTER(8, BOOL, IsThemeActive)();
  79. TYPEDEF_WRAPPER_POINTER(9, BOOL, IsAppThemed)();
  80. TYPEDEF_WRAPPER_POINTER(10, HRESULT, HitTestThemeBackground)(HTHEME, HDC, int, int, DWORD, const RECT*, HRGN, POINT, WORD*);
  81. TYPEDEF_WRAPPER_POINTER(11, HTHEME, GetWindowTheme)(HWND);
  82. TYPEDEF_WRAPPER_POINTER(12, HRESULT, GetThemeSysString)(HTHEME, int, LPWSTR, int);
  83. TYPEDEF_WRAPPER_POINTER(13, HRESULT, GetThemeTextMetrics)(HTHEME, HDC, int, int, TEXTMETRIC*);
  84. TYPEDEF_WRAPPER_POINTER(14, HRESULT, GetThemeTextExtent)(HTHEME, HDC, int, int, LPCWSTR, int, DWORD, const RECT*, RECT*);
  85. TYPEDEF_WRAPPER_POINTER(15, int, GetThemeSysSize)(HTHEME, int);
  86. TYPEDEF_WRAPPER_POINTER(16, HRESULT, GetThemeSysInt)(HTHEME, int, int*);
  87. TYPEDEF_WRAPPER_POINTER(17, HRESULT, GetThemeSysFont)(HTHEME, int, LOGFONT*);
  88. TYPEDEF_WRAPPER_POINTER(18, HBRUSH, GetThemeSysColorBrush)(HTHEME, int);
  89. TYPEDEF_WRAPPER_POINTER(19, COLORREF, GetThemeSysColor)(HTHEME, int);
  90. TYPEDEF_WRAPPER_POINTER(20, BOOL, GetThemeSysBool)(HTHEME, int);
  91. TYPEDEF_WRAPPER_POINTER(21, HRESULT, GetThemeString)(HTHEME, int, int, int, LPWSTR, int);
  92. TYPEDEF_WRAPPER_POINTER(22, HRESULT, GetThemeRect)(HTHEME, int, int, int, RECT*);
  93. TYPEDEF_WRAPPER_POINTER(23, HRESULT, GetThemePropertyOrigin)(HTHEME, int, int, int, PROPERTYORIGIN*);
  94. TYPEDEF_WRAPPER_POINTER(24, HRESULT, GetThemePosition)(HTHEME, int, int, int, POINT*);
  95. TYPEDEF_WRAPPER_POINTER(25, HRESULT, GetThemePartSize)(HTHEME, HDC, int, int, RECT*, THEMESIZE, SIZE*);
  96. TYPEDEF_WRAPPER_POINTER(26, HRESULT, GetThemeMetric)(HTHEME, HDC, int, int, int, int*);
  97. TYPEDEF_WRAPPER_POINTER(27, HRESULT, GetThemeMargins)(HTHEME, HDC, int, int, int, RECT*, MARGINS*);
  98. TYPEDEF_WRAPPER_POINTER(28, HRESULT, GetThemeIntList)(HTHEME, int, int, int, INTLIST*);
  99. TYPEDEF_WRAPPER_POINTER(29, HRESULT, GetThemeInt)(HTHEME, int, int, int, int*);
  100. TYPEDEF_WRAPPER_POINTER(30, HRESULT, GetThemeFont)(HTHEME, HDC, int, int, int, LOGFONT*);
  101. TYPEDEF_WRAPPER_POINTER(31, HRESULT, GetThemeFilename)(HTHEME, int, int, int, LPWSTR, int);
  102. TYPEDEF_WRAPPER_POINTER(32, HRESULT, GetThemeEnumValue)(HTHEME, int, int, int, int*);
  103. TYPEDEF_WRAPPER_POINTER(33, HRESULT, GetThemeDocumentationProperty)(LPCWSTR, LPCWSTR, LPWSTR, int);
  104. TYPEDEF_WRAPPER_POINTER(34, HRESULT, GetThemeColor)(HTHEME, int, int, int, COLORREF*);
  105. TYPEDEF_WRAPPER_POINTER(35, HRESULT, GetThemeBool)(HTHEME, int, int, int, BOOL*);
  106. TYPEDEF_WRAPPER_POINTER(36, HRESULT, GetThemeBackgroundRegion)(HTHEME, HDC, int, int, const RECT*, HRGN*);
  107. TYPEDEF_WRAPPER_POINTER(37, HRESULT, GetThemeBackgroundExtent)(HTHEME, HDC, int, int, const RECT*, RECT*);
  108. TYPEDEF_WRAPPER_POINTER(38, HRESULT, GetThemeBackgroundContentRect)(HTHEME, HDC, int, int, const RECT*, RECT*);
  109. TYPEDEF_WRAPPER_POINTER(39, DWORD, ThemeAppProperties)();
  110. TYPEDEF_WRAPPER_POINTER(40, HRESULT, GetCurrentThemeName)(LPWSTR, int, LPWSTR, int, LPWSTR, int);
  111. TYPEDEF_WRAPPER_POINTER(41, HRESULT, EnableTheming)(BOOL);
  112. TYPEDEF_WRAPPER_POINTER(42, HRESULT, EnableThemeDialogTexture)(HWND, DWORD);
  113. TYPEDEF_WRAPPER_POINTER(43, HRESULT, DrawThemeText)(HTHEME, HDC, int, int, LPCWSTR, int, DWORD, DWORD, const RECT*);
  114. TYPEDEF_WRAPPER_POINTER(44, HRESULT, DrawThemeParentBackground)(HWND, HDC, RECT*);
  115. TYPEDEF_WRAPPER_POINTER(45, HRESULT, DrawThemeIcon)(HTHEME, HDC, int, int, const RECT*, HIMAGELIST, int);
  116. TYPEDEF_WRAPPER_POINTER(46, HRESULT, DrawThemeEdge)(HTHEME, HDC, int, int, const RECT*, UINT, UINT, RECT*);
  117. TYPEDEF_WRAPPER_POINTER(47, HRESULT, DrawThemeBackgroundEx)(HTHEME, HDC, int, int, const RECT*, const PDTBGOPTS);
  118. TYPEDEF_WRAPPER_POINTER(48, DWORD, GetThemeAppProperties)();
  119. TYPEDEF_WRAPPER_POINTER(49, HPAINTBUFFER, BeginBufferedPaint)(HDC, const RECT*, XTP_UX_BUFFERFORMAT, XTP_UX_PAINTPARAMS*, HDC*);
  120. TYPEDEF_WRAPPER_POINTER(50, HRESULT, EndBufferedPaint)(HPAINTBUFFER, BOOL);
  121. TYPEDEF_WRAPPER_POINTER(51, HRESULT, DrawThemeTextEx)(HTHEME, HDC, int, int, LPCWSTR, int, DWORD, LPRECT, const XTP_UX_DTTOPTS*);
  122. #define XTP_UXTHEME_HANDLE (HMODULE)0x21FFFF1
  123. //}}AFX_CODEJOCK_PRIVATE
  124. //===========================================================================
  125. // Summary:
  126. //     The CXTPWinThemeWrapper class wraps the UxTheme.dll visual theme
  127. //     API.  You can use this class for rendering Windows XP themes for
  128. //     owner drawn controls.
  129. //===========================================================================
  130. class _XTP_EXT_CLASS CXTPWinThemeWrapper
  131. {
  132. private:
  133. //-----------------------------------------------------------------------
  134. // Summary:
  135. //     Shared data of wrappers
  136. //-----------------------------------------------------------------------
  137. class CSharedData
  138. {
  139. public:
  140. //-------------------------------------------------------------------------
  141. // Summary:
  142. //     Constructs a CSharedData object.
  143. //-------------------------------------------------------------------------
  144. CSharedData();
  145. public:
  146. LPVOID m_ptrWrappers[52];   // Wrapper pointer
  147. HMODULE m_hThemeDll;        // Handle to the theme dll.
  148. DWORD m_dwComCtlVersion;    // ComCtl version.
  149. };
  150. public:
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     Constructs a CXTPWinThemeWrapper object.
  154. // Parameters:
  155. //     bUseSkinFramework - TRUE to use skinframework.
  156. //-----------------------------------------------------------------------
  157. CXTPWinThemeWrapper(BOOL bUseSkinFramework = TRUE);
  158. //-----------------------------------------------------------------------
  159. // Summary:
  160. //     Destroys a CXTPWinThemeWrapper object, handles cleanup and
  161. //     deallocation.
  162. //-----------------------------------------------------------------------
  163. virtual ~CXTPWinThemeWrapper();
  164. //-----------------------------------------------------------------------
  165. // Summary:
  166. //     Open the theme data for the specified HWND and semi-colon
  167. //     separated list of class names.  OpenThemeData() will try
  168. //     each class name, one at a time, and use the first matching
  169. //     theme info found.
  170. // Parameters:
  171. //     hWnd         - Window handle of the control/window to be
  172. //                    themed.
  173. //     pszClassList - Class name (or list of names) to match to
  174. //                    theme data section.  if the list contains
  175. //                    more than one name, the names are tested one
  176. //                    at a time for a match.  If a match is found,
  177. //                    OpenThemeData() returns a theme handle
  178. //                    associated with the matching class.  This
  179. //                    param is a list (instead of just a single
  180. //                    class name) to provide the class an
  181. //                    opportunity to get the "best" match between
  182. //                    the class and the current theme.  For example,
  183. //                    a button might pass L"OkButton, Button" if its
  184. //                    ID=ID_OK.  If the current theme has an entry
  185. //                    for OkButton, that will be used.  Otherwise,
  186. //                    we fall back on the normal Button entry.
  187. //-----------------------------------------------------------------------
  188. void OpenThemeData(HWND hWnd, LPCWSTR pszClassList);
  189. //-----------------------------------------------------------------------
  190. // Summary:
  191. //     Closes the theme data handle.  CXTPWinThemeWrapper will do
  192. //     this automatically when destroyed or when OpenThemeData is
  193. //     called.  Your window should handle the WM_THEMECHANGED
  194. //     message when called followed by a call to OpenThemeData.
  195. //-----------------------------------------------------------------------
  196. void CloseThemeData();
  197. //-----------------------------------------------------------------------
  198. // Summary:
  199. //     Draws the theme-specified border and fill for the "iPartId"
  200. //     and "iStateId".  This could be based on a bitmap file, a
  201. //     border and fill, or other image description.
  202. // Parameters:
  203. //     hDC       - HDC to draw into
  204. //     iPartID   - Part number to draw
  205. //     iStateID  - State number (of the part) to draw
  206. //     pRect     - Defines the size/location of the part
  207. //     pClipRect - Optional clipping rect (don't draw outside it)
  208. // Returns:
  209. //     Returns S_OK if successful, or an error value otherwise.
  210. //-----------------------------------------------------------------------
  211. HRESULT DrawThemeBackground(HDC hDC, int iPartID, int iStateID, const RECT *pRect, const RECT* pClipRect);
  212. //-----------------------------------------------------------------------
  213. // Summary:
  214. //     Draws the text using the theme-specified color and font for
  215. //     the "iPartID" and "iStateID".
  216. // Parameters:
  217. //     hDC          - HDC to draw into
  218. //     iPartID      - Part number to draw
  219. //     iStateID     - State number (of the part) to draw
  220. //     pszText      - Actual text to draw
  221. //     iCharCount   - Number of chars to draw (-1 for all)
  222. //     dwTextFlags  - Same as DrawText() "uFormat" param
  223. //     dwTextFlags2 - Additional drawing options
  224. //     pRect        - Defines the size/location of the part
  225. // Returns:
  226. //     Returns S_OK if successful, or an error value otherwise.
  227. //-----------------------------------------------------------------------
  228. HRESULT DrawThemeText(HDC hDC, int iPartID, int iStateID, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, DWORD dwTextFlags2, const RECT* pRect);
  229. //-----------------------------------------------------------------------
  230. // Summary:
  231. //     Gets the size of the content for the theme-defined
  232. //     background.  This is usually the area inside the borders or
  233. //     Margins.
  234. // Parameters:
  235. //     hDC           - (optional) device content to be used for
  236. //                     drawing
  237. //     iPartID       - Part number to draw
  238. //     iStateID      - State number (of the part) to draw
  239. //     pBoundingRect - The outer RECT of the part being drawn
  240. //     pContentRect  - RECT to receive the content area
  241. // Returns:
  242. //     Returns S_OK if successful, or an error value otherwise.
  243. //-----------------------------------------------------------------------
  244. HRESULT GetThemeBackgroundContentRect(HDC hDC, int iPartID, int iStateID, const RECT *pBoundingRect, RECT* pContentRect);
  245. //-----------------------------------------------------------------------
  246. // Summary:
  247. //     Calculates the size/location of the theme-specified
  248. //     background based on the "pContentRect".
  249. // Parameters:
  250. //     hDC           - (optional) device content to be used for
  251. //                     drawing
  252. //     iPartID       - Part number to draw
  253. //     iStateID      - State number (of the part) to draw
  254. //     pContentRect  - RECT that defines the content area
  255. //     pExtentRect   - RECT to receive the overall size/location of
  256. //                     part
  257. // Returns:
  258. //     Returns S_OK if successful, or an error value otherwise.
  259. //-----------------------------------------------------------------------
  260. HRESULT GetThemeBackgroundExtent(HDC hDC, int iPartID, int iStateID, const RECT *pContentRect, RECT* pExtentRect);
  261. //-----------------------------------------------------------------------
  262. // Summary:
  263. //     Draws the theme-specified border and fill for the "iPartId"
  264. //     and "iStateId".  This could be based on a bitmap file, a
  265. //     border and fill, or other image description.
  266. // Parameters:
  267. //     hDC      - HDC to draw into
  268. //     iPartID  - Part number to draw
  269. //     iStateID - State number (of the part) to draw
  270. //     pRect    - Defines the size/location of the part
  271. //     pOptions - Pointer to optional parameters.
  272. // Returns:
  273. //     Returns S_OK if successful, or an error value otherwise.
  274. //-----------------------------------------------------------------------
  275. HRESULT DrawThemeBackgroundEx(HDC hDC, int iPartID, int iStateID, const RECT *pRect, const PDTBGOPTS pOptions);
  276. //-----------------------------------------------------------------------
  277. // Summary:
  278. //     Similar to the DrawEdge() API, but uses part colors and is
  279. //     high-DPI aware
  280. // Parameters:
  281. //     hDC          - HDC to draw into
  282. //     iPartID      - Part number to draw.
  283. //     iStateID     - State number of part
  284. //     pDestRect    - The RECT used to draw the line(s)
  285. //     uEdge        - Same as DrawEdge() API
  286. //     uFlags       - Same as DrawEdge() API
  287. //     pContentRect - Receives the interior rect if (uFlags &
  288. //                    BF_ADJUST)
  289. // Returns:
  290. //     Returns S_OK if successful, or an error value otherwise.
  291. //-----------------------------------------------------------------------
  292. HRESULT DrawThemeEdge(HDC hDC, int iPartID, int iStateID, const RECT *pDestRect, UINT uEdge, UINT uFlags, RECT* pContentRect);
  293. //-----------------------------------------------------------------------
  294. // Summary:
  295. //     Draws an image within an imagelist based on a (possible)
  296. //     theme-defined effect.
  297. // Parameters:
  298. //     hDC          - HDC to draw into
  299. //     iPartID      - Part number to draw.
  300. //     iStateID     - State number of part
  301. //     pRect        - The RECT to draw the image within
  302. //     himl         - Handle to IMAGELIST
  303. //     iImageIndex  - Index into IMAGELIST (which icon to draw)
  304. // Returns:
  305. //     Returns S_OK if successful, or an error value otherwise.
  306. //-----------------------------------------------------------------------
  307. HRESULT DrawThemeIcon(HDC hDC, int iPartID, int iStateID, const RECT* pRect, HIMAGELIST himl, int iImageIndex);
  308. //-----------------------------------------------------------------------
  309. // Summary:
  310. //     Used by partially-transparent or alpha-blended child controls
  311. //     to draw the part of their parent that they appear in front of.
  312. // Parameters:
  313. //     hWnd  - Handle of the child control
  314. //     hDC   - HDC of the child control
  315. //     pRect - (optional) rect that defines the area to be
  316. //             Drawn (CHILD coordinates)
  317. // Returns:
  318. //     Returns S_OK if successful, or an error value otherwise.
  319. //-----------------------------------------------------------------------
  320. HRESULT DrawThemeParentBackground(HWND hWnd, HDC hDC, RECT* pRect);
  321. //-----------------------------------------------------------------------
  322. // Summary:
  323. //     Enables/disables dialog background theme.  This method can be
  324. //     used to tailor dialog compatibility with child windows and
  325. //     controls that may or may not coordinate the rendering of
  326. //     their client area backgrounds with that of their parent
  327. //     dialog in a manner that supports seamless background
  328. //     texturing.
  329. // Parameters:
  330. //     hWnd    - The window handle of the target dialog
  331. //     dwFlags - ETDT_ENABLE to enable the theme-defined dialog
  332. //               background texturing,
  333. //               ETDT_DISABLE to disable background texturing,
  334. //               ETDT_ENABLETAB to enable the theme-defined
  335. //               background texturing using the Tab texture
  336. // Returns:
  337. //     Returns S_OK if successful, or an error value otherwise.
  338. //-----------------------------------------------------------------------
  339. HRESULT EnableThemeDialogTexture(HWND hWnd, DWORD dwFlags);
  340. //-----------------------------------------------------------------------
  341. // Summary:
  342. //     Enables or disables theming for the current user in the
  343. //     current and future sessions.
  344. // Parameters:
  345. //     bEnable - If FALSE, disable theming & turn themes off.
  346. //               if TRUE, enable theming and, if user
  347. //               previously had a theme active, make it active
  348. //               now.
  349. // Returns:
  350. //     Returns S_OK if successful, or an error value otherwise.
  351. //-----------------------------------------------------------------------
  352. HRESULT EnableTheming(BOOL bEnable);
  353. //-----------------------------------------------------------------------
  354. // Summary:
  355. //     Get the name of the current theme in-use.  Optionally, return
  356. //     the ColorScheme name and the Size name of the theme.
  357. // Parameters:
  358. //     pszThemeFileName - Receives the theme path & filename
  359. //     dwMaxNameChars   - Max chars allowed in pszNameBuff
  360. //     pszColorBuff     - (optional) receives the canonical color
  361. //                        scheme name
  362. //                        (not the display name)
  363. //     cchMaxColorChars - Max chars allowed in pszColorBuff
  364. //     pszSizeBuff      - (optional) receives the canonical size
  365. //                        name (not the display name)
  366. //     cchMaxSizeChars  - Max chars allowed in pszSizeBuff
  367. // Returns:
  368. //     Returns S_OK if successful, or an error value otherwise.
  369. //-----------------------------------------------------------------------
  370. HRESULT GetCurrentThemeName(LPWSTR pszThemeFileName, int dwMaxNameChars, LPWSTR pszColorBuff, int cchMaxColorChars, LPWSTR pszSizeBuff, int cchMaxSizeChars);
  371. //-----------------------------------------------------------------------
  372. // Summary:
  373. //     Retrieves the property flags that control how visual styles
  374. //     are applied in the current application.
  375. // Returns:
  376. //     The following return values are bit flags combined with a
  377. //     logical OR operator.
  378. //     STAP_ALLOW_NONCLIENT  - Specifies that the non-client areas of
  379. //                             application windows have visual
  380. //                             styles applied.
  381. //     STAP_ALLOW_CONTROLS   - Specifies that controls in
  382. //                             application windows have visual
  383. //                             styles applied.
  384. //     STAP_ALLOW_WEBCONTENT - Specifies that all web content
  385. //                             displayed in an application is
  386. //                             rendered using visual styles.
  387. //-----------------------------------------------------------------------
  388. DWORD ThemeAppProperties();
  389. //-----------------------------------------------------------------------
  390. // Summary:
  391. //     Computes the region for a regular or partially transparent
  392. //     theme-specified background that is bound by the specified
  393. //     "pRect".  If the rectangle is empty, sets the hRgn to NULL
  394. //     and return S_FALSE.
  395. // Parameters:
  396. //     hDC      - Optional hDC to draw into (DPI scaling)
  397. //     iPartID  - Part number to draw.
  398. //     iStateID - State number (of the part)
  399. //     pRect    - The RECT used to draw the part
  400. //     pRegion  - Receives handle to calculated region
  401. // Returns:
  402. //     Returns S_OK if successful, or an error value otherwise.
  403. //-----------------------------------------------------------------------
  404. HRESULT GetThemeBackgroundRegion(HDC hDC, int iPartID, int iStateID, const RECT *pRect, HRGN* pRegion);
  405. //-----------------------------------------------------------------------
  406. // Summary:
  407. //     Get the value for the specified BOOL property
  408. // Parameters:
  409. //     iPartID  - Part number
  410. //     iStateID - State number of part
  411. //     iPropID  - The property number to get the value for
  412. //     pfVal    - Receives the value of the property
  413. // Returns:
  414. //     Returns S_OK if successful, or an error value otherwise.
  415. //-----------------------------------------------------------------------
  416. HRESULT GetThemeBool(int iPartID, int iStateID, int iPropID, BOOL* pfVal);
  417. //-----------------------------------------------------------------------
  418. // Summary:
  419. //     Get the value for the specified COLOR property
  420. // Parameters:
  421. //     iPartID  - Part number
  422. //     iStateID - State number of part
  423. //     iPropID  - The property number to get the value for
  424. //     pColor   - Receives the value of the property
  425. // Returns:
  426. //     Returns S_OK if successful, or an error value otherwise.
  427. //-----------------------------------------------------------------------
  428. HRESULT GetThemeColor(int iPartID, int iStateID, int iPropID, COLORREF* pColor);
  429. //-----------------------------------------------------------------------
  430. // Summary:
  431. //     Get the value for the specified property name from the
  432. //     [documentation] section of the themes.ini file for the
  433. //     specified theme.  If the property has been localized in the
  434. //     theme files string table, the localized version of the
  435. //     property value is returned.
  436. // Parameters:
  437. //     pszThemeName     - Filename of the theme file to query
  438. //     pszPropertyName  - Name of the string property to retrieve a
  439. //                        value for
  440. //     pszValueBuff     - Receives the property string value
  441. //     cchMaxValChars   - Max chars allowed in pszValueBuff
  442. // Returns:
  443. //     Returns S_OK if successful, or an error value otherwise.
  444. //-----------------------------------------------------------------------
  445. HRESULT GetThemeDocumentationProperty(LPCWSTR pszThemeName, LPCWSTR pszPropertyName, LPWSTR pszValueBuff, int cchMaxValChars);
  446. //-----------------------------------------------------------------------
  447. // Summary:
  448. //     Get the value for the specified ENUM property
  449. // Parameters:
  450. //     iPartID  - Part number
  451. //     iStateID - State number of part
  452. //     iPropID  - The property number to get the value for
  453. //     piVal    - Receives the value of the enum (cast to int*)
  454. // Returns:
  455. //     Returns S_OK if successful, or an error value otherwise.
  456. //-----------------------------------------------------------------------
  457. HRESULT GetThemeEnumValue(int iPartID, int iStateID, int iPropID, int* piVal);
  458. //-----------------------------------------------------------------------
  459. // Summary:
  460. //     Get the value for the specified FILENAME property.
  461. // Parameters:
  462. //     iPartID          - Part number
  463. //     iStateID         - State number of part
  464. //     iPropID          - The property number to search for
  465. //     pszThemeFilename - Output buffer to receive the filename
  466. //     cchMaxBuffChars  - The size of the return buffer, in chars
  467. // Returns:
  468. //     Returns S_OK if successful, or an error value otherwise.
  469. //-----------------------------------------------------------------------
  470. HRESULT GetThemeFilename(int iPartID, int iStateID, int iPropID, LPWSTR pszThemeFilename, int cchMaxBuffChars);
  471. //-----------------------------------------------------------------------
  472. // Summary:
  473. //     Get the value for the specified font property
  474. // Parameters:
  475. //     hDC      - (optional) hDC to be drawn to (DPI scaling)
  476. //     iPartID  - Part number
  477. //     iStateID - State number of part
  478. //     iPropID  - The property number to get the value for
  479. //     pFont    - Receives the value of the LOGFONT property
  480. //                (scaled for the current logical screen dpi)
  481. // Returns:
  482. //     Returns S_OK if successful, or an error value otherwise.
  483. //-----------------------------------------------------------------------
  484. HRESULT GetThemeFont(HDC hDC, int iPartID, int iStateID, int iPropID, LOGFONT* pFont);
  485. //-----------------------------------------------------------------------
  486. // Summary:
  487. //     Get the value for the specified int property
  488. // Parameters:
  489. //     iPartID  - Part number
  490. //     iStateID - State number of part
  491. //     iPropID  - The property number to get the value for
  492. //     piVal    - Receives the value of the property
  493. // Returns:
  494. //     Returns S_OK if successful, or an error value otherwise.
  495. //-----------------------------------------------------------------------
  496. HRESULT GetThemeInt(int iPartID, int iStateID, int iPropID, int* piVal);
  497. //-----------------------------------------------------------------------
  498. // Summary:
  499. //     Get the value for the specified INTLIST struct
  500. // Parameters:
  501. //     iPartID  - Part number
  502. //     iStateID - State number of part
  503. //     iPropID  - The property number to get the value for
  504. //     pIntList - Receives the value of the INTLIST property
  505. // Returns:
  506. //     Returns S_OK if successful, or an error value otherwise.
  507. //-----------------------------------------------------------------------
  508. HRESULT GetThemeIntList(int iPartID, int iStateID, int iPropID, INTLIST* pIntList);
  509. //-----------------------------------------------------------------------
  510. // Summary:
  511. //     Get the value for the specified MARGINS property
  512. // Parameters:
  513. //     hDC      - (optional) hDC to be used for drawing
  514. //     iPartID  - Part number
  515. //     iStateID - State number of part
  516. //     iPropID  - The property number to get the value for
  517. //     pRect    - RECT for area to be drawn into
  518. //     pMargins - Receives the value of the MARGINS property
  519. // Returns:
  520. //     Returns S_OK if successful, or an error value otherwise.
  521. //-----------------------------------------------------------------------
  522. HRESULT GetThemeMargins(HDC hDC, int iPartID, int iStateID, int iPropID, RECT *pRect, MARGINS* pMargins);
  523. //-----------------------------------------------------------------------
  524. // Summary:
  525. //     Get the value for the specified metric/size property
  526. // Parameters:
  527. //     hDC      - (optional) hDC to be drawn into (DPI scaling)
  528. //     iPartID  - Part number
  529. //     iStateID - State number of part
  530. //     iPropID  - The property number to get the value for
  531. //     piVal    - Receives the value of the property
  532. // Returns:
  533. //     Returns S_OK if successful, or an error value otherwise.
  534. //-----------------------------------------------------------------------
  535. HRESULT GetThemeMetric(HDC hDC, int iPartID, int iStateID, int iPropID, int* piVal);
  536. //-----------------------------------------------------------------------
  537. // Summary:
  538. //     Returns the specified size of the theme part
  539. // Parameters:
  540. //     hDC      - HDC to select font into & measure against
  541. //     iPartID  - Part number to retrieve size for
  542. //     iStateID - State number (of the part)
  543. //     pRect    - (optional) rect for part drawing destination
  544. //     eSize    - The type of size to be retrieved
  545. //     pSize    - Receives the specified size of the part
  546. // Returns:
  547. //     Returns S_OK if successful, or an error value otherwise.
  548. //-----------------------------------------------------------------------
  549. HRESULT GetThemePartSize(HDC hDC, int iPartID, int iStateID, RECT *pRect, THEMESIZE eSize, SIZE* pSize);
  550. //-----------------------------------------------------------------------
  551. // Summary:
  552. //     Get the value for the specified position property
  553. // Parameters:
  554. //     iPartID  - Part number
  555. //     iStateID - State number of part
  556. //     iPropID  - The property number to get the value for
  557. //     pPoint   - Receives the value of the position property
  558. // Returns:
  559. //     Returns S_OK if successful, or an error value otherwise.
  560. //-----------------------------------------------------------------------
  561. HRESULT GetThemePosition(int iPartID, int iStateID, int iPropID, POINT* pPoint);
  562. //-----------------------------------------------------------------------
  563. // Summary:
  564. //     Searches for the specified theme property and sets "pOrigin"
  565. //     to indicate where it was found (or not found)
  566. // Parameters:
  567. //     iPartID  - Part number
  568. //     iStateID - State number of part
  569. //     iPropID  - The property number to search for
  570. //     pOrigin  - Receives the value of the property origin
  571. // Returns:
  572. //     Returns S_OK if successful, or an error value otherwise.
  573. //-----------------------------------------------------------------------
  574. HRESULT GetThemePropertyOrigin(int iPartID, int iStateID, int iPropID, PROPERTYORIGIN* pOrigin);
  575. //-----------------------------------------------------------------------
  576. // Summary:
  577. //     Get the value for the specified RECT property
  578. // Parameters:
  579. //     iPartID  - Part number
  580. //     iStateID - State number of part
  581. //     iPropID  - The property number to get the value for
  582. //     pRect    - Receives the value of the RECT property
  583. // Returns:
  584. //     Returns S_OK if successful, or an error value otherwise.
  585. //-----------------------------------------------------------------------
  586. HRESULT GetThemeRect(int iPartID, int iStateID, int iPropID, RECT* pRect);
  587. //-----------------------------------------------------------------------
  588. // Summary:
  589. //     Get the value for the specified string property
  590. // Parameters:
  591. //     iPartID         - Part number
  592. //     iStateID        - State number of part
  593. //     iPropID         - The property number to get the value for
  594. //     pszBuff         - Receives the string property value
  595. //     cchMaxBuffChars - Max. number of chars allowed in pszBuff
  596. // Returns:
  597. //     Returns S_OK if successful, or an error value otherwise.
  598. //-----------------------------------------------------------------------
  599. HRESULT GetThemeString(int iPartID, int iStateID, int iPropID, LPWSTR pszBuff, int cchMaxBuffChars);
  600. //-----------------------------------------------------------------------
  601. // Summary:
  602. //     Get the boolean value of specified System metric.
  603. // Parameters:
  604. //     iBoolID - The TMT_XXX BOOL number (first BOOL is
  605. //               TMT_FLATMENUS)
  606. // Returns:
  607. //     Returns S_OK if successful, or an error value otherwise.
  608. //-----------------------------------------------------------------------
  609. BOOL GetThemeSysBool(int iBoolID);
  610. //-----------------------------------------------------------------------
  611. // Summary:
  612. //     Get the value of the specified System color.
  613. // Parameters:
  614. //     iColorID - The system color index defined in winuser.h
  615. // Returns:
  616. //     The value of the specified system color.
  617. //-----------------------------------------------------------------------
  618. COLORREF GetThemeSysColor(int iColorID);
  619. //-----------------------------------------------------------------------
  620. // Summary:
  621. //     Get the brush for the specified System color.
  622. // Parameters:
  623. //     iColorID - The system color index defined in winuser.h
  624. // Returns:
  625. //     Handle to brush data.
  626. //-----------------------------------------------------------------------
  627. HBRUSH GetThemeSysColorBrush(int iColorID);
  628. //-----------------------------------------------------------------------
  629. // Summary:
  630. //     Get the LOGFONT for the specified System font.
  631. // Parameters:
  632. //     iFontID - The TMT_XXX font number (first font
  633. //               is TMT_CAPTIONFONT)
  634. //     pLF     - Ptr to LOGFONT to receive the font value.
  635. //               (scaled for the current logical screen dpi)
  636. // Returns:
  637. //     Returns S_OK if successful, or an error value otherwise.
  638. //-----------------------------------------------------------------------
  639. HRESULT GetThemeSysFont(int iFontID, LOGFONT* pLF);
  640. //-----------------------------------------------------------------------
  641. // Summary:
  642. //     Get the value of specified System int.
  643. // Parameters:
  644. //     iIntID  - Must be one of the following values:
  645. //               TMT_DPIX
  646. //               TMT_DPIY
  647. //               TMT_MINCOLORDEPTH
  648. //     piValue - Ptr to int to receive value
  649. // Returns:
  650. //     Returns S_OK if successful, or an error value otherwise.
  651. //-----------------------------------------------------------------------
  652. HRESULT GetThemeSysInt(int iIntID, int* piValue);
  653. //-----------------------------------------------------------------------
  654. // Summary:
  655. //     Get the value of the specified System size metric.  (scaled
  656. //     for the current logical screen dpi)
  657. // Parameters:
  658. //     iSizeID - The following values are supported:
  659. //               SM_CXBORDER   (border width)
  660. //               SM_CXVSCROLL  (scrollbar width)
  661. //               SM_CYHSCROLL  (scrollbar height)
  662. //               SM_CXSIZE     (caption width)
  663. //               SM_CYSIZE     (caption height)
  664. //               SM_CXSMSIZE   (small caption width)
  665. //               SM_CYSMSIZE   (small caption height)
  666. //               SM_CXMENUSIZE (menubar width)
  667. //               SM_CYMENUSIZE (menubar height)
  668. // Returns:
  669. //     Returns S_OK if successful, or an error value otherwise.
  670. //-----------------------------------------------------------------------
  671. int GetThemeSysSize(int iSizeID);
  672. //-----------------------------------------------------------------------
  673. // Summary:
  674. //     Get the value of specified System string metric.
  675. // Parameters:
  676. //     iStringID         - Must be one of the following values:
  677. //                         TMT_CSSNAME
  678. //                         TMT_XMLNAME
  679. //     pszStringBuff     - The buffer to receive the string value
  680. //     cchMaxStringChars - Max. number of chars that pszStringBuff
  681. //                         can hold
  682. // Returns:
  683. //     The size in dots per inch (DPI) scaled for the current
  684. //     logical screen.
  685. //-----------------------------------------------------------------------
  686. HRESULT GetThemeSysString(int iStringID, LPWSTR pszStringBuff, int cchMaxStringChars);
  687. //-----------------------------------------------------------------------
  688. // Summary:
  689. //     Calculates the size/location of the specified text when
  690. //     rendered in the Theme Font.
  691. // Parameters:
  692. //     hDC             - HDC to select font & measure into
  693. //     iPartID         - Part number to draw.
  694. //     iStateID        - State number (of the part)
  695. //     pszText         - The text to be measured
  696. //     iCharCount      - Number of chars to draw (-1 for all)
  697. //     dwTextFlags     - Same as DrawText() "uFormat" param
  698. //     pBoundingRect   - Optional: to control layout of text
  699. //     pExtentRect     - Receives the RECT for text size/location
  700. // Returns:
  701. //     Returns S_OK if successful, or an error value otherwise.
  702. //-----------------------------------------------------------------------
  703. HRESULT GetThemeTextExtent(HDC hDC, int iPartID, int iStateID, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, const RECT *pBoundingRect, RECT* pExtentRect);
  704. //-----------------------------------------------------------------------
  705. // Summary:
  706. //     Returns info about the theme-specified font for the part/
  707. //     state passed in.
  708. // Parameters:
  709. //     hDC      - Optional: hDC for screen context
  710. //     iPartID  - Part number to draw.
  711. //     iStateID - State number (of the part)
  712. //     ptm      - Receives the font info
  713. // Returns:
  714. //     Returns S_OK if successful, or an error value otherwise.
  715. //-----------------------------------------------------------------------
  716. HRESULT GetThemeTextMetrics(HDC hDC, int iPartID, int iStateID, TEXTMETRIC* ptm);
  717. //-----------------------------------------------------------------------
  718. // Summary:
  719. //     If window is themed, returns its most recent HTHEME from
  720. //     OpenThemeData() - Otherwise, returns NULL.
  721. // Parameters:
  722. //     hWnd - The window to get the HTHEME of
  723. // Returns:
  724. //     The most recent theme handle from OpenThemeData.
  725. //-----------------------------------------------------------------------
  726. HTHEME GetWindowTheme(HWND hWnd);
  727. //-----------------------------------------------------------------------
  728. // Summary:
  729. //     Returns a HitTestCode (a subset of the values returned by
  730. //     WM_NCHITTEST) for the point "ptTest" within the theme-
  731. //     specified background (bound by pRect).  "pRect" and "ptTest"
  732. //     should both be in the same coordinate system (client, screen,
  733. //     etc).
  734. // Parameters:
  735. //     hDC           - HDC to draw into
  736. //     iPartID       - Part number to test against
  737. //     iStateID      - State number (of the part)
  738. //     pRect         - The RECT used to draw the part
  739. //     hRgn          - Optional region to use; must be in same
  740. //                     coordinates as
  741. //                     pRect and pTest.
  742. //     ptTest        - The hit point to be tested
  743. //     dwOptions     - HTTB_xxx constants
  744. //     pwHitTestCode - Receives the returned hit test code - One of:
  745. //                     HTNOWHERE, HTLEFT, HTTOPLEFT, HTBOTTOMLEFT,
  746. //                     HTRIGHT, HTTOPRIGHT, HTBOTTOMRIGHT,
  747. //                     HTTOP, HTBOTTOM, HTCLIENT
  748. // Returns:
  749. //     Returns S_OK if successful, or an error value otherwise.
  750. //-----------------------------------------------------------------------
  751. HRESULT HitTestThemeBackground(HDC hDC, int iPartID, int iStateID, DWORD dwOptions, const RECT *pRect, HRGN hRgn, POINT ptTest, WORD* pwHitTestCode);
  752. //-----------------------------------------------------------------------
  753. // Summary:
  754. //     Reports whether the current application's user interface
  755. //     displays using visual styles.
  756. // Returns:
  757. //     Returns one of the following values.
  758. //     TRUE  - The application has a visual style applied.
  759. //     FALSE - The application does not have a visual style applied.
  760. //-----------------------------------------------------------------------
  761. BOOL IsAppThemed() const;
  762. //-----------------------------------------------------------------------
  763. // Summary:
  764. //     Can be used to test if a system theme is active for the
  765. //     current user session.
  766. //     use the API "IsAppThemed()" to test if a theme is active for
  767. //     the calling process.
  768. // Returns:
  769. //     Returns one of the following values:
  770. //     TRUE  - A visual style is enabled, and windows with visual
  771. //             styles applied should call OpenThemeData to start
  772. //             using theme drawing services.
  773. //     FALSE - A visual style is not enabled, and the window message
  774. //             handler does not need to make another call to
  775. //             IsThemeActive until it receives a WM_THEMECHANGED
  776. //             message.
  777. //-----------------------------------------------------------------------
  778. BOOL IsThemeActive() const;
  779. //-----------------------------------------------------------------------
  780. // Summary:
  781. //     Call this member function to determine if the application should
  782. //     display Windows XP themes.  IsAppThemeReady() will first check
  783. //     to see if the operating system supports Windows XP theme display,
  784. //     then checks to see if the application has any controls that are
  785. //     able to display Windows XP themes, then finally checks to see if
  786. //     the application has included a manifest file.
  787. // Returns:
  788. //     TRUE if the application can display Windows XP themes, otherwise FALSE.
  789. //-----------------------------------------------------------------------
  790. BOOL IsAppThemeReady() const;
  791. //-----------------------------------------------------------------------
  792. // Summary:
  793. //     Returns TRUE if the theme specified background for the part/
  794. //     state has transparent pieces or alpha-blended pieces.
  795. // Parameters:
  796. //     iPartID  - Part number
  797. //     iStateID - State number of part
  798. // Returns:
  799. //     Returns one of the following values.
  800. //     TRUE  - The theme-specified background for a particular
  801. //             iPartId and iStateId has transparent pieces or alpha-
  802. //             blended pieces.
  803. //     FALSE - The theme-specified background for a particular
  804. //             iPartId and iStateId does not have transparent pieces
  805. //             or alpha-blended pieces.
  806. //-----------------------------------------------------------------------
  807. BOOL IsThemeBackgroundPartiallyTransparent(int iPartID, int iStateID);
  808. //-----------------------------------------------------------------------
  809. // Summary:
  810. //     Reports whether the dialog supports background texturing.
  811. // Returns:
  812. //     Returns one of the following values.
  813. //     TRUE  - Background texturing is supported.
  814. //     FALSE - Background texturing is not supported.
  815. //-----------------------------------------------------------------------
  816. BOOL IsThemeDialogTextureEnabled();
  817. //-----------------------------------------------------------------------
  818. // Summary:
  819. //     Returns TRUE if the theme has defined parameters for the
  820. //     specified "iPartID" and "iStateID".
  821. // Parameters:
  822. //     iPartID  - Part number to find definition for
  823. //     iStateID - State number of part
  824. // Returns:
  825. //     Returns one of the following values.
  826. //     TRUE  - The theme has defined parameters for the specified
  827. //             iPartId and iStateId
  828. //     FALSE - The theme does not have defined parameters for the
  829. //             specified iPartId and iStateId
  830. //-----------------------------------------------------------------------
  831. BOOL IsThemePartDefined(int iPartID, int iStateID);
  832. //-----------------------------------------------------------------------
  833. // Summary:
  834. //     Sets the flags that control theming within the app
  835. // Parameters:
  836. //     dwFlags - The flag values to be set
  837. //-----------------------------------------------------------------------
  838. void SetThemeAppProperties(DWORD dwFlags);
  839. //-----------------------------------------------------------------------
  840. // Summary:
  841. //     Redirects an existing Window to use a different section of
  842. //     the current theme information than its class normally asks
  843. //     for.
  844. // Parameters:
  845. //     hWnd          - The handle of the window (cannot be NULL)
  846. //     pszSubAppName - App (group) name to use in place of the
  847. //                     calling app's name.  If NULL, the actual
  848. //                     calling app name will be used.
  849. //     pszSubIdList  - Semicolon separated list of class Id names to
  850. //                     use in place of actual list passed by the
  851. //                     window's class.  if NULL, the id list from
  852. //                     the calling class is used.
  853. // Remarks: The Theme Manager will remember the "pszSubAppName" and the
  854. //          "pszSubIdList" associations thru the lifetime of the window
  855. //          (even if themes are subsequently changed).  The window is
  856. //          sent a "WM_THEMECHANGED" msg at the end of this call, so that
  857. //          the new theme can be found and applied.
  858. //          When "pszSubAppName" or "pszSubIdList" are NULL, the Theme
  859. //          Manager removes the previously remember association.  To turn
  860. //          off theme-ing for the specified window, you can pass an empty
  861. //          string (L"") so it won't match any section entries.
  862. // Returns:
  863. //     Returns S_OK if successful, or an error value otherwise.
  864. //-----------------------------------------------------------------------
  865. HRESULT SetWindowTheme(HWND hWnd, LPCWSTR pszSubAppName, LPCWSTR pszSubIdList);
  866. //-----------------------------------------------------------------------
  867. // Summary:
  868. //     Call this member function to determine if OpenThemeData() was
  869. //     called to open theme information for a particular window.
  870. // Returns:
  871. //     TRUE if theme information was loaded, otherwise FALSE.
  872. //-----------------------------------------------------------------------
  873. BOOL ThemeDataOpen() const;
  874. //-----------------------------------------------------------------------
  875. // Summary:
  876. //     Retrieves the property flags that control how visual styles are applied in the current application.
  877. //-----------------------------------------------------------------------
  878. DWORD GetThemeAppProperties();
  879. //{{AFX_CODEJOCK_PRIVATE
  880. static BOOL m_bDllDetached;
  881. //for compatibility with older versions.
  882. void CloseTheme() {
  883. CloseThemeData();
  884. }
  885. void OpenTheme(HWND hWnd, LPCWSTR pszClassList) {
  886. OpenThemeData(hWnd, pszClassList);
  887. }
  888. void DrawBackground(HDC hdc, int iPartId, int iStateId, const RECT *pRect,  const RECT* pClipRect) {
  889. DrawThemeBackground(hdc, iPartId, iStateId, pRect, pClipRect);
  890. }
  891. //}}AFX_CODEJOCK_PRIVATE
  892. //-----------------------------------------------------------------------
  893. // Summary:
  894. //     Begins a buffered paint operation
  895. // Parameters:
  896. //     hdcTarget - Handle of the target device context (DC) on which the buffer will be painted.
  897. //     prcTarget - Pointer to a RECT structure that specifies the area of the target DC in which to paint.
  898. //     dwFormat - A member of the BP_BUFFERFORMAT enumeration that specifies the format of the buffer.
  899. //     pPaintParams - [in] Pointer to a BP_PAINTPARAMS structure that defines the paint operation parameters. This value can be NULL.
  900. //     phdc - [out] When this function returns, this value points to the handle of the new device context.
  901. // Returns: A handle to the buffered paint context
  902. // See Also: EndBufferedPaint
  903. //-----------------------------------------------------------------------
  904. HPAINTBUFFER BeginBufferedPaint(HDC hdcTarget, const RECT* prcTarget, XTP_UX_BUFFERFORMAT dwFormat, XTP_UX_PAINTPARAMS *pPaintParams, HDC *phdc);
  905. //-----------------------------------------------------------------------
  906. // Summary:
  907. //     Completes a buffered paint operation and frees the associated buffered paint handle
  908. // Parameters:
  909. //     hBufferedPaint - Handle of the buffered paint context, obtained through BeginBufferedPaint
  910. //     fUpdateTarget - TRUE to copy the buffer to the target device context (DC)
  911. // See Also: BeginBufferedPaint
  912. //-----------------------------------------------------------------------
  913. void EndBufferedPaint(HPAINTBUFFER hBufferedPaint, BOOL fUpdateTarget);
  914. //-----------------------------------------------------------------------
  915. // Summary:
  916. //     Draws the text using the theme-specified color and font for
  917. //     the "iPartID" and "iStateID".
  918. // Parameters:
  919. //     hDC          - HDC to draw into
  920. //     iPartId      - Part number to draw
  921. //     iStateId     - State number (of the part) to draw
  922. //     pszText      - Actual text to draw
  923. //     cchText      - Number of chars to draw (-1 for all)
  924. //     dwTextFlags  - Same as DrawText() "uFormat" param
  925. //     pOptions     - Additional drawing options
  926. //     pRect        - Defines the size/location of the part
  927. // Returns:
  928. //     Returns S_OK if successful, or an error value otherwise.
  929. //-----------------------------------------------------------------------
  930. HRESULT DrawThemeTextEx(HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int cchText, DWORD dwTextFlags, LPRECT pRect, const XTP_UX_DTTOPTS *pOptions);
  931. //-----------------------------------------------------------------------
  932. // Parameters:
  933. //     nThemeWrapper - Wrapper id.
  934. //     lpWrapperPtr  - Wrapper pointer
  935. // Summary:
  936. //     This method is used to set user defined wrappers
  937. //-----------------------------------------------------------------------
  938. void SetThemeWrapperPtr(int nThemeWrapper, LPVOID lpWrapperPtr);
  939. void CreateSharedData();
  940. private:
  941. void ReloadLibrary() const;
  942. private:
  943. HTHEME  m_hTheme;     // Handle to the theme data.
  944. BOOL m_bUseSkinFramework;
  945. CSharedData* m_pSharedDara;
  946. CSharedData& GetSharedData() const;
  947. };
  948. //{{AFX_CODEJOCK_PRIVATE
  949. struct XTP_DWM_MARGINS
  950. {
  951. int cxLeftWidth;      // width of left border that retains its size
  952. int cxRightWidth;     // width of right border that retains its size
  953. int cyTopHeight;      // height of top border that retains its size
  954. int cyBottomHeight;   // height of bottom border that retains its size
  955. };
  956. TYPEDEF_WRAPPER_POINTER(0, HRESULT, DwmDefWindowProc)(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult);
  957. TYPEDEF_WRAPPER_POINTER(1, HRESULT, DwmIsCompositionEnabled)( BOOL*);
  958. TYPEDEF_WRAPPER_POINTER(2, HRESULT, DwmExtendFrameIntoClientArea)(HWND, const XTP_DWM_MARGINS*);
  959. //===========================================================================
  960. // Summary:
  961. //     The CXTPWinDwmWrapper class wraps the dwp api.
  962. //===========================================================================
  963. class _XTP_EXT_CLASS CXTPWinDwmWrapper
  964. {
  965. private:
  966. //-----------------------------------------------------------------------
  967. // Summary:
  968. //     Shared data of wrappers
  969. //-----------------------------------------------------------------------
  970. class CSharedData
  971. {
  972. public:
  973. //-------------------------------------------------------------------------
  974. // Summary:
  975. //     Constructs a CSharedData object.
  976. //-------------------------------------------------------------------------
  977. CSharedData();
  978. public:
  979. LPVOID m_ptrWrappers[3];   // Wrapper pointer
  980. HMODULE m_hDwmDll;        // Handle to the theme dll.
  981. };
  982. public:
  983. CXTPWinDwmWrapper();
  984. ~CXTPWinDwmWrapper();
  985. public:
  986. HRESULT DefWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult);
  987. BOOL IsCompositionEnabled();
  988. HRESULT ExtendFrameIntoClientArea(HWND hWnd, int cxLeftWidth, int cyTopHeight, int cxRightWidth, int cyBottomHeight);
  989. public:
  990. void LogicalToPhysicalPoint(HWND hWnd, LPPOINT lpPoint);
  991. void SetProcessDPIAware();
  992. private:
  993. CSharedData& GetSharedData() const;
  994. };
  995. //}}AFX_CODEJOCK_PRIVATE
  996. /////////////////////////////////////////////////////////////////////////////
  997. #endif // !defined(__XTPWINTHEMEWRAPPER_H__)