ExtPaintManager.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:273k
源码类别:

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #if (!defined __EXT_PAINT_MANAGER_H)
  22. #define __EXT_PAINT_MANAGER_H
  23. #if (!defined __EXT_MFC_DEF_H)
  24. #include <ExtMfcDef.h>
  25. #endif // __EXT_MFC_DEF_H
  26. #if (!defined __EXT_CMD_ICON_H)
  27. #include <ExtCmdIcon.h>
  28. #endif // __EXT_CMD_ICON_H
  29. #if (!defined __AFXTEMPL_H__)
  30. #include <AfxTempl.h>
  31. #endif
  32. #if (!defined __EXT_MFC_NO_TAB_CTRL)
  33. #if (!defined __EXT_TABWND_H)
  34. #include <ExtTabWnd.h>
  35. #endif
  36. #endif // (!defined __EXT_MFC_NO_TAB_CTRL)
  37. #if (!defined __EXT_PMSYNCHRONIZESINK_H)
  38. #include "../Src/ExtPmSynchronizeSink.h"
  39. #endif
  40. #define __ExtMfc_CXTEXTMARGIN (-1) // 1
  41. #define __ExtMfc_CYTEXTMARGIN (0)  // 1
  42. #define __EXT_PM_BACK_COMPATIBILITY_COLOR_API
  43. #define __EXT_PM_BACK_COMPATIBILITY_BITMAP_API
  44. class CExtScrollBar;
  45. class CExtBitmap;
  46. class CExtCmdIcon;
  47. class CExtBarButton;
  48. class CExtBarNcAreaButton;
  49. class CExtMiniDockFrameWnd;
  50. class CExtControlBar;
  51. class CExtToolControlBar;
  52. class CExtBarContentExpandButton;
  53. class CExtPopupMenuWnd;
  54. class CExtAnimationParameters;
  55. class CExtAnimationClient;
  56. #ifndef __EXT_MFC_NO_GRIDWND
  57. class CExtGridCell;
  58. #endif // #ifndef __EXT_MFC_NO_GRIDWND
  59. #ifndef __EXT_MFC_NO_STATUSBAR
  60. class CExtStatusControlBar;
  61. #endif
  62. #if (!defined __EXT_MFC_NO_DOCK_MARKERS)
  63. class CExtDynDockMarkerWnd;
  64. #endif
  65. #if (!defined __EXT_MFC_NO_RIBBON_BAR)
  66. class CExtRibbonButton;
  67. class CExtRibbonButtonGroup;
  68. class CExtRibbonButtonToolGroup;
  69. class CExtRibbonButtonFile;
  70. class CExtRibbonPage;
  71. class CExtNcFrameImpl;
  72. class CExtRibbonButtonQuickAccessContentExpand;
  73. class CExtRibbonBar;
  74. class CExtRibbonButtonDialogLauncher;
  75. class CExtRibbonGalleryInplaceScrollBar;
  76. class CExtRibbonGalleryWnd;
  77. class CExtRibbonGalleryPopupMenuWnd;
  78. class CExtRibbonNodeGallery;
  79. class CExtRibbonButtonGallery;
  80. #endif
  81. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  82. class CExtCustomizeCmdScreenTip;
  83. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  84. #if (!defined __DEFAULT_PAINT_MANAGER_CLASS)
  85. #define __DEFAULT_PAINT_MANAGER_CLASS CExtPaintManagerXP
  86. #endif
  87. #if (!defined __EXT_MFC_NO_PAGECONTAINER_CTRL)
  88. class CExtPageContainerWnd;
  89. #endif // (!defined __EXT_MFC_NO_PAGECONTAINER_CTRL)
  90. #define __ExtMfc_WM_THEMECHANGED 0x031A
  91. // AnimateWindow() Flags
  92. #define __EXT_AW_HOR_POSITIVE    0x00000001
  93. #define __EXT_AW_HOR_NEGATIVE    0x00000002
  94. #define __EXT_AW_VER_POSITIVE    0x00000004
  95. #define __EXT_AW_VER_NEGATIVE    0x00000008
  96. #define __EXT_AW_CENTER          0x00000010
  97. #define __EXT_AW_HIDE            0x00010000
  98. #define __EXT_AW_ACTIVATE        0x00020000
  99. #define __EXT_AW_SLIDE           0x00040000
  100. #define __EXT_AW_BLEND           0x00080000
  101. // for layered API
  102. #define __EXT_MFC_LWA_COLORKEY  0x00000001
  103. #define __EXT_MFC_LWA_ALPHA     0x00000002
  104. #define __EXT_MFC_WS_EX_LAYERED 0x00080000
  105. #define __EXT_MFC_ULW_COLORKEY  0x00000001
  106. #define __EXT_MFC_ULW_ALPHA     0x00000002
  107. #define __EXT_MFC_ULW_OPAQUE    0x00000004
  108. #define __EXT_MFC_AC_SRC_OVER   0x00
  109. #define __EXT_MFC_AC_SRC_ALPHA  0x01
  110. // Prof-UIS impl defines
  111. #define __ExtMfc_MIN_SYS_COLOR_VAL 0L
  112. #define __ExtMfc_MAX_SYS_COLOR_VAL 49L
  113. #define __ExtMfc_COLOR_MAP_BASE 1000L
  114. #define __ExtMfc_XP_COLOR_SHIFT (__ExtMfc_COLOR_MAP_BASE + 1000L)
  115. #define __ExtMfc_2003_COLOR_SHIFT (__ExtMfc_XP_COLOR_SHIFT + 1000L)
  116. #define __ExtMfc_STUDIO_2005_COLOR_SHIFT (__ExtMfc_2003_COLOR_SHIFT + 1000L)
  117. #define __ExtMfc_STUDIO_2008_COLOR_SHIFT (__ExtMfc_STUDIO_2005_COLOR_SHIFT + 1000L)
  118. //#define __ExtMfc_MENU_GAP__ 4
  119. #define __EXT_MENU_ICON_CX 16
  120. #define __EXT_MENU_ICON_CY 16
  121. #define __EXT_MENU_GAP 3
  122. #define __EXT_MENU_MIN_HEIGHT (__EXT_MENU_ICON_CY+__EXT_MENU_GAP*2)
  123. #define __EXT_MENU_POPUP_ARROW_AREA_DX 16
  124. #define __EXT_MENU_IMG_RECT_OUT_GAP 2
  125. #define __EXT_MENU_TOOLBTN_GAP 2
  126. #define __EXT_VERT_FONT_ESCAPEMENT_X__ (900)
  127. #define __EXT_VERT_FONT_ESCAPEMENT__ (2700)
  128. #define __DROPDOWN_ARROW_GAP 3
  129. // PrintWindow() API flags
  130. #define __EXT_MFC_PW_CLIENTONLY 0x00000001
  131. //////////////////////////////////////////////////////////////////////////
  132. // UXTHEME defines
  133. //////////////////////////////////////////////////////////////////////////
  134. // Define API decoration for direct importing of DLL references.
  135. #define __EXT_UX_THEMEAPI(_name_) HRESULT ( STDAPICALLTYPE * _name_ )
  136. #define __EXT_UX_THEMEAPI_(_type_,_name_) _type_ ( STDAPICALLTYPE * _name_ )
  137. #define __EXT_UX_DTT_GRAYED                 0x1
  138. #define __EXT_UX_DTT_FLAGS2VALIDBITS        (__EXT_UX_DTT_GRAYED)
  139. #define __EXT_UX_HTTB_BACKGROUNDSEG         0x0000  
  140. #define __EXT_UX_HTTB_FIXEDBORDER           0x0002
  141. #define __EXT_UX_HTTB_CAPTION               0x0004  
  142. #define __EXT_UX_HTTB_RESIZINGBORDER_LEFT   0x0010
  143. #define __EXT_UX_HTTB_RESIZINGBORDER_TOP    0x0020
  144. #define __EXT_UX_HTTB_RESIZINGBORDER_RIGHT  0x0040
  145. #define __EXT_UX_HTTB_RESIZINGBORDER_BOTTOM 0x0080
  146. #define __EXT_UX_HTTB_RESIZINGBORDER 
  147. ( __EXT_UX_HTTB_RESIZINGBORDER_LEFT 
  148. | __EXT_UX_HTTB_RESIZINGBORDER_TOP 
  149. | __EXT_UX_HTTB_RESIZINGBORDER_RIGHT 
  150. | __EXT_UX_HTTB_RESIZINGBORDER_BOTTOM 
  151. )
  152. #define __EXT_UX_HTTB_SIZINGTEMPLATE        0x0100
  153. #define __EXT_UX_HTTB_SYSTEMSIZINGMARGINS   0x0200
  154. #define __EXT_UX_MAX_INTLIST_COUNT          10
  155. #define __EXT_UX_ETDT_DISABLE               0x00000001
  156. #define __EXT_UX_ETDT_ENABLE                0x00000002
  157. #define __EXT_UX_ETDT_USETABTEXTURE         0x00000004
  158. #define __EXT_UX_ETDT_ENABLETAB 
  159. ( __EXT_UX_ETDT_ENABLE 
  160. | __EXT_UX_ETDT_USETABTEXTURE 
  161. )
  162. #define __EXT_UX_STAP_ALLOW_NONCLIENT       (1 << 0)
  163. #define __EXT_UX_STAP_ALLOW_CONTROLS        (1 << 1)
  164. #define __EXT_UX_STAP_ALLOW_WEBCONTENT      (1 << 2)
  165. #define __EXT_UX_SZ_THDOCPROP_DISPLAYNAME   L"DisplayName"
  166. #define __EXT_UX_SZ_THDOCPROP_CANONICALNAME L"ThemeName"
  167. #define __EXT_UX_SZ_THDOCPROP_TOOLTIP       L"ToolTip"
  168. #define __EXT_UX_SZ_THDOCPROP_AUTHOR        L"author"
  169. #define __EXT_UX_DTBG_CLIPRECT              0x00000001
  170. #define __EXT_UX_DTBG_DRAWSOLID             0x00000002
  171. #define __EXT_UX_DTBG_OMITBORDER            0x00000004
  172. #define __EXT_UX_DTBG_OMITCONTENT           0x00000008
  173. #define __EXT_UX_DTBG_COMPUTINGREGION       0x00000010
  174. #define __EXT_UX_DTBG_MIRRORDC              0x00000020
  175. #define __EXT_UX_OTD_FORCE_RECT_SIZING      0x00000001 // make all parts size to rect
  176. #define __EXT_UX_OTD_NONCLIENT              0x00000002 // set if hTheme to be used for nonclient area
  177. #define __EXT_UX_OTD_VALIDBITS              (__EXT_UX_OTD_FORCE_RECT_SIZING|__EXT_UX_OTD_NONCLIENT)
  178. // bits used in dwFlags of DTBGOPTS ----
  179. #define __EXT_UX_DTBG_CLIPRECT              0x00000001  // rcClip has been specified
  180. #define __EXT_UX_DTBG_DRAWSOLID             0x00000002  // DEPRECATED: draw transparent/alpha images as solid
  181. #define __EXT_UX_DTBG_OMITBORDER            0x00000004  // don't draw border of part
  182. #define __EXT_UX_DTBG_OMITCONTENT           0x00000008  // don't draw content area of part
  183. #define __EXT_UX_DTBG_COMPUTINGREGION       0x00000010  // TRUE if calling to compute region
  184. #define __EXT_UX_DTBG_MIRRORDC              0x00000020  // assume the hdc is mirrorred and
  185. // flip images as appropriate (currently 
  186.                                             // only supported for bgtype=imagefile)
  187. #define __EXT_UX_DTBG_NOMIRROR              0x00000040  // don't mirror the output, overrides everything else 
  188. #define __EXT_UX_DTBG_VALIDBITS             (__EXT_UX_DTBG_CLIPRECT|__EXT_UX_DTBG_DRAWSOLID      | 
  189. __EXT_UX_DTBG_OMITBORDER|__EXT_UX_DTBG_OMITCONTENT   | 
  190. __EXT_UX_DTBG_COMPUTINGREGION|__EXT_UX_DTBG_MIRRORDC | 
  191. __EXT_UX_DTBG_NOMIRROR)
  192. #define __EXT_UX_DTT_TEXTCOLOR       (1UL << 0)      // crText has been specified
  193. #define __EXT_UX_DTT_BORDERCOLOR     (1UL << 1)      // crBorder has been specified
  194. #define __EXT_UX_DTT_SHADOWCOLOR     (1UL << 2)      // crShadow has been specified
  195. #define __EXT_UX_DTT_SHADOWTYPE      (1UL << 3)      // iTextShadowType has been specified
  196. #define __EXT_UX_DTT_SHADOWOFFSET    (1UL << 4)      // ptShadowOffset has been specified
  197. #define __EXT_UX_DTT_BORDERSIZE      (1UL << 5)      // iBorderSize has been specified
  198. #define __EXT_UX_DTT_FONTPROP        (1UL << 6)      // iFontPropId has been specified
  199. #define __EXT_UX_DTT_COLORPROP       (1UL << 7)      // iColorPropId has been specified
  200. #define __EXT_UX_DTT_STATEID         (1UL << 8)      // IStateId has been specified
  201. #define __EXT_UX_DTT_CALCRECT        (1UL << 9)      // Use pRect as and in/out parameter
  202. #define __EXT_UX_DTT_APPLYOVERLAY    (1UL << 10)     // fApplyOverlay has been specified
  203. #define __EXT_UX_DTT_GLOWSIZE        (1UL << 11)     // iGlowSize has been specified
  204. #define __EXT_UX_DTT_CALLBACK        (1UL << 12)     // pfnDrawTextCallback has been specified
  205. #define __EXT_UX_DTT_COMPOSITED      (1UL << 13)     // Draws text with antialiased alpha (needs a DIB section)
  206. #define __EXT_UX_DTT_VALIDBITS       (__EXT_UX_DTT_TEXTCOLOR    | 
  207.                                       __EXT_UX_DTT_BORDERCOLOR  | 
  208.                                       __EXT_UX_DTT_SHADOWCOLOR  | 
  209.                                       __EXT_UX_DTT_SHADOWTYPE   | 
  210.                                       __EXT_UX_DTT_SHADOWOFFSET | 
  211.                                       __EXT_UX_DTT_BORDERSIZE   | 
  212.                                       __EXT_UX_DTT_FONTPROP     | 
  213.                                       __EXT_UX_DTT_COLORPROP    | 
  214.                                       __EXT_UX_DTT_STATEID      | 
  215.                                       __EXT_UX_DTT_CALCRECT     | 
  216.                                       __EXT_UX_DTT_APPLYOVERLAY | 
  217.                                       __EXT_UX_DTT_GLOWSIZE     | 
  218.                                       __EXT_UX_DTT_COMPOSITED)
  219. #if (defined __EXT_MFC_TEMPLATED_CHARS_IMPLEMENTED)
  220. #if (defined __EXT_MFC_COMPILED_WITH_NATIVE_WCHAR_T )
  221. typedef wchar_t * __EXT_UX_LPWSTR;
  222. typedef const wchar_t * __EXT_UX_LPCWSTR;
  223. #else
  224. typedef unsigned short * __EXT_UX_LPWSTR;
  225. typedef const unsigned short * __EXT_UX_LPCWSTR;
  226. #endif
  227. #else
  228. typedef LPWSTR __EXT_UX_LPWSTR;
  229. typedef LPCWSTR __EXT_UX_LPCWSTR;
  230. #endif
  231. //////////////////////////////////////////////////////////////////////////
  232. // CExtUxTheme class
  233. //////////////////////////////////////////////////////////////////////////
  234. class __PROF_UIS_API CExtUxTheme
  235. {
  236. public:
  237. typedef enum __EXT_UX_THEMESIZE
  238. {
  239. __EXT_UX_TS_MIN,             // minimum size
  240. __EXT_UX_TS_TRUE,            // size without stretching
  241. __EXT_UX_TS_DRAW,            // size that theme mgr will use to draw part
  242. };
  243. typedef struct __PROF_UIS_API __EXT_UX__MARGINS
  244. {
  245. int cxLeftWidth;             // width of left border that retains its size
  246. int cxRightWidth;            // width of right border that retains its size
  247. int cyTopHeight;             // height of top border that retains its size
  248. int cyBottomHeight;          // height of bottom border that retains its size
  249. } __EXT_UX_MARGINS, *__EXT_UX_PMARGINS;
  250. typedef struct __PROF_UIS_API __EXT_UX__INTLIST
  251. {
  252. int iValueCount;      // number of values in iValues
  253. int iValues[__EXT_UX_MAX_INTLIST_COUNT];
  254. } __EXT_UX_INTLIST, *__EXT_UX_PINTLIST;
  255. typedef enum __EXT_UX_PROPERTYORIGIN
  256. {
  257. __EXT_UX_PO_STATE,           // property was found in the state section
  258. __EXT_UX_PO_PART,            // property was found in the part section
  259. __EXT_UX_PO_CLASS,           // property was found in the class section
  260. __EXT_UX_PO_GLOBAL,          // property was found in [globals] section
  261. __EXT_UX_PO_NOTFOUND         // property was not found
  262. };
  263. typedef struct __PROF_UIS_API __EXT_UX__DTBGOPTS
  264. {
  265. DWORD dwSize;                // size of the struct
  266. DWORD dwFlags;               // which options have been specified
  267. RECT rcClip;                 // clipping rectangle
  268. }
  269. __EXT_UX_DTBGOPTS, *__EXT_UX_PDTBGOPTS;
  270. // Callback function used by DrawTextWithGlow instead of DrawTextW
  271. typedef int ( WINAPI * __EXT_UX_DTT_CALLBACK_PROC ) (
  272. HDC hdc,
  273. __EXT_UX_LPWSTR pszText,
  274. int cchText,
  275. LPRECT prc,
  276. UINT dwFlags,
  277. LPARAM lParam
  278. );
  279. typedef struct __EXT_UX__DTTOPTS
  280. {
  281. DWORD             dwSize;              // size of the struct
  282. DWORD             dwFlags;             // which options have been specified
  283. COLORREF          crText;              // color to use for text fill
  284. COLORREF          crBorder;            // color to use for text outline
  285. COLORREF          crShadow;            // color to use for text shadow
  286. int               iTextShadowType;     // TST_SINGLE or TST_CONTINUOUS
  287. POINT             ptShadowOffset;      // where shadow is drawn (relative to text)
  288. int               iBorderSize;         // Border radius around text
  289. int               iFontPropId;         // Font property to use for the text instead of TMT_FONT
  290. int               iColorPropId;        // Color property to use for the text instead of TMT_TEXTCOLOR
  291. int               iStateId;            // Alternate state id
  292. BOOL              fApplyOverlay;       // Overlay text on top of any text effect?
  293. int               iGlowSize;           // Glow radious around text
  294. __EXT_UX_DTT_CALLBACK_PROC
  295.                   pfnDrawTextCallback; // Callback for DrawText
  296. LPARAM            lParam;              // Parameter for callback
  297. } __EXT_UX_DTTOPTS, *__EXT_UX_PDTTOPTS;
  298. typedef HANDLE __EXT_UX_HTHEME;            // handle to a section of theme data for class
  299. CExtUxTheme();
  300. virtual ~CExtUxTheme();
  301. bool IsControlsThemed( 
  302. bool bCheckComCtlVersion = true 
  303. );
  304. bool IsNonClientThemed( 
  305. bool bCheckComCtlVersion = true 
  306. );
  307. bool IsWebContentThemed( 
  308. bool bCheckComCtlVersion = true 
  309. );
  310. //---------------------------------------------------------------------------
  311. //  OpenThemeData()     - Open the theme data for the specified HWND and 
  312. //                        semi-colon separated list of class names. 
  313. // 
  314. //                        OpenThemeData() will try each class name, one at 
  315. //                        a time, and use the first matching theme info
  316. //                        found.  If a match is found, a theme handle
  317. //                        to the data is returned.  If no match is found,
  318. //                        a "NULL" handle is returned. 
  319. //
  320. //                        When the window is destroyed or a WM_THEMECHANGED
  321. //                        msg is received, "CloseThemeData()" should be 
  322. //                        called to close the theme handle.
  323. //
  324. //  hWnd                - window handle of the control/window to be themed
  325. //  pszClassList        - class name (or list of names) to match to theme data
  326. //                        section.  if the list contains more than one name, 
  327. //                        the names are tested one at a time for a match.  
  328. //                        If a match is found, OpenThemeData() returns a 
  329. //                        theme handle associated with the matching class. 
  330. //                        This param is a list (instead of just a single 
  331. //                        class name) to provide the class an opportunity 
  332. //                        to get the "best" match between the class and 
  333. //                        the current theme.  For example, a button might
  334. //                        pass L"OkButton, Button" if its ID=ID_OK.  If 
  335. //                        the current theme has an entry for OkButton, 
  336. //                        that will be used.  Otherwise, we fall back on 
  337. //                        the normal Button entry.
  338. //---------------------------------------------------------------------------
  339. __EXT_UX_HTHEME OpenThemeData(
  340. HWND hWnd, 
  341. __EXT_UX_LPCWSTR pszClassList
  342. );
  343. //---------------------------------------------------------------------------
  344. //  OpenThemeDataEx     - Open the theme data for the specified HWND and 
  345. //                        semi-colon separated list of class names. 
  346. // 
  347. //                        OpenThemeData() will try each class name, one at 
  348. //                        a time, and use the first matching theme info
  349. //                        found.  If a match is found, a theme handle
  350. //                        to the data is returned.  If no match is found,
  351. //                        a "NULL" handle is returned. 
  352. //
  353. //                        When the window is destroyed or a WM_THEMECHANGED
  354. //                        msg is received, "CloseThemeData()" should be 
  355. //                        called to close the theme handle.
  356. //
  357. //  hwnd                - window handle of the control/window to be themed
  358. //
  359. //  pszClassList        - class name (or list of names) to match to theme data
  360. //                        section.  if the list contains more than one name, 
  361. //                        the names are tested one at a time for a match.  
  362. //                        If a match is found, OpenThemeData() returns a 
  363. //                        theme handle associated with the matching class. 
  364. //                        This param is a list (instead of just a single 
  365. //                        class name) to provide the class an opportunity 
  366. //                        to get the "best" match between the class and 
  367. //                        the current theme.  For example, a button might
  368. //                        pass L"OkButton, Button" if its ID=ID_OK.  If 
  369. //                        the current theme has an entry for OkButton, 
  370. //                        that will be used.  Otherwise, we fall back on 
  371. //                        the normal Button entry.
  372. //
  373. //  dwFlags             - allows certain overrides of std features
  374. //                        (see OTD_XXX defines above)
  375. //---------------------------------------------------------------------------
  376. __EXT_UX_HTHEME OpenThemeDataEx(
  377. HWND hwnd,
  378. __EXT_UX_LPCWSTR pszClassList,
  379. DWORD dwFlags
  380. );
  381. //---------------------------------------------------------------------------
  382. //  CloseTHemeData()    - closes the theme data handle.  This should be done 
  383. //                        when the window being themed is destroyed or
  384. //                        whenever a WM_THEMECHANGED msg is received 
  385. //                        (followed by an attempt to create a new Theme data 
  386. //                        handle).
  387. //---------------------------------------------------------------------------
  388. HRESULT CloseThemeData( 
  389. bool bAllowCaching = false
  390. );
  391. //---------------------------------------------------------------------------
  392. //    functions for basic drawing support 
  393. //---------------------------------------------------------------------------
  394. // The following methods are the theme-aware drawing services.
  395. // Controls/Windows are defined in drawable "parts" by their author: a 
  396. // parent part and 0 or more child parts.  Each of the parts can be 
  397. // described in "states" (ex: disabled, hot, pressed).  
  398. //---------------------------------------------------------------------------
  399. // For the list of all themed classes and the definition of all
  400. // parts and states, see the file "tmschmea.h".
  401. //---------------------------------------------------------------------------
  402. // Each of the below methods takes a "iPartId" param to specify the 
  403. // part and a "iStateId" to specify the state of the part.  
  404. // "iStateId=0" refers to the root part.  "iPartId" = "0" refers to 
  405. // the root class.  
  406. //-----------------------------------------------------------------------
  407. // Note: draw operations are always scaled to fit (and not to exceed)  
  408. // the specified "Rect".
  409. //-----------------------------------------------------------------------
  410. //------------------------------------------------------------------------
  411. //  DrawThemeBackground()   
  412. //                      - draws the theme-specified border and fill for 
  413. //                        the "iPartId" and "iStateId".  This could be 
  414. //                        based on a bitmap file, a border and fill, or 
  415. //                        other image description.  
  416. //
  417. //  hdc                 - HDC to draw into
  418. //  iPartId             - part number to draw
  419. //  iStateId            - state number (of the part) to draw
  420. //  pRect               - defines the size/location of the part
  421. //  pClipRect           - optional clipping rect (don't draw outside it)
  422. //------------------------------------------------------------------------
  423. HRESULT DrawThemeBackground(
  424. HDC hdc, 
  425. int iPartId, 
  426. int iStateId, 
  427. const RECT * pRect, 
  428. OPTIONAL const RECT * pClipRect
  429. );
  430. HRESULT DrawBackground(
  431. HWND hWnd,
  432. HDC hdc, 
  433. int iPartId, 
  434. int iStateId, 
  435. const RECT * pRect, 
  436. OPTIONAL const RECT * pClipRect
  437. );
  438. //-------------------------------------------------------------------------
  439. //  DrawThemeText()     - draws the text using the theme-specified 
  440. //                        color and font for the "iPartId" and 
  441. //                        "iStateId".  
  442. //
  443. //  hdc                 - HDC to draw into
  444. //  iPartId             - part number to draw
  445. //  iStateId            - state number (of the part) to draw
  446. //  pszText             - actual text to draw
  447. //  dwCharCount         - number of chars to draw (-1 for all)
  448. //  dwTextFlags         - same as DrawText() "uFormat" param
  449. //  dwTextFlags2        - additional drawing options 
  450. //  pRect               - defines the size/location of the part
  451. //-------------------------------------------------------------------------
  452. HRESULT DrawThemeText(
  453. HDC hdc, 
  454. int iPartId, 
  455. int iStateId, 
  456. __EXT_UX_LPCWSTR pszText, 
  457. int iCharCount, 
  458. DWORD dwTextFlags, 
  459. DWORD dwTextFlags2, 
  460. const RECT * pRect
  461. );
  462. HRESULT DrawThemeText(
  463. HDC hdc, 
  464. int iPartId, 
  465. int iStateId, 
  466. const CExtSafeString & sText, 
  467. int iCharCount, 
  468. DWORD dwTextFlags, 
  469. DWORD dwTextFlags2, 
  470. const RECT * pRect
  471. );
  472. HRESULT DrawThemeTextEx(
  473. HDC hdc,
  474. int iPartId,
  475. int iStateId,
  476. __EXT_UX_LPCWSTR pszText,
  477. int iCharCount,
  478. DWORD dwFlags,
  479. LPRECT pRect,
  480. const __EXT_UX_DTTOPTS * pOptions
  481. );
  482. HRESULT DrawThemeTextEx(
  483. HDC hdc,
  484. int iPartId,
  485. int iStateId,
  486. const CExtSafeString & sText, 
  487. int iCharCount,
  488. DWORD dwFlags,
  489. LPRECT pRect,
  490. const __EXT_UX_DTTOPTS * pOptions
  491. );
  492. //-------------------------------------------------------------------------
  493. //  GetThemeBackgroundContentRect()
  494. //                      - gets the size of the content for the theme-defined 
  495. //                        background.  This is usually the area inside
  496. //                        the borders or Margins.  
  497. //
  498. //      hdc             - (optional) device content to be used for drawing
  499. //      iPartId         - part number to draw
  500. //      iStateId        - state number (of the part) to draw
  501. //      pBoundingRect   - the outer RECT of the part being drawn
  502. //      pContentRect    - RECT to receive the content area
  503. //-------------------------------------------------------------------------
  504. HRESULT GetThemeBackgroundContentRect(
  505. OPTIONAL HDC hdc, 
  506. int iPartId, 
  507. int iStateId,  
  508. const RECT * pBoundingRect, 
  509. OUT RECT * pContentRect
  510. );
  511. //-------------------------------------------------------------------------
  512. //  GetThemeBackgroundExtent() - calculates the size/location of the theme-
  513. //                               specified background based on the 
  514. //                               "pContentRect".
  515. //
  516. //      hdc             - (optional) device content to be used for drawing
  517. //      iPartId         - part number to draw
  518. //      iStateId        - state number (of the part) to draw
  519. //      pContentRect    - RECT that defines the content area
  520. //      pBoundingRect   - RECT to receive the overall size/location of part
  521. //-------------------------------------------------------------------------
  522. HRESULT GetThemeBackgroundExtent(
  523. OPTIONAL HDC hdc,
  524. int iPartId, 
  525. int iStateId, 
  526. const RECT * pContentRect, 
  527. OUT RECT * pExtentRect
  528. );
  529. //-------------------------------------------------------------------------
  530. //  GetThemePartSize() - returns the specified size of the theme part
  531. //
  532. //  hdc                 - HDC to select font into & measure against
  533. //  iPartId             - part number to retrieve size for
  534. //  iStateId            - state number (of the part) 
  535. //  prc                 - (optional) rect for part drawing destination
  536. //  eSize               - the type of size to be retreived
  537. //  psz                 - receives the specified size of the part 
  538. //-------------------------------------------------------------------------
  539. HRESULT GetThemePartSize(
  540. HDC hdc, 
  541. int iPartId, 
  542. int iStateId, 
  543. OPTIONAL RECT * prc, 
  544. enum __EXT_UX_THEMESIZE eSize, 
  545. OUT SIZE * psz
  546. );
  547. //-------------------------------------------------------------------------
  548. //  GetThemeTextExtent() - calculates the size/location of the specified 
  549. //                         text when rendered in the Theme Font. 
  550. //
  551. //  hdc                 - HDC to select font & measure into
  552. //  iPartId             - part number to draw
  553. //  iStateId            - state number (of the part) 
  554. //  pszText             - the text to be measured
  555. //  dwCharCount         - number of chars to draw (-1 for all)
  556. //  dwTextFlags         - same as DrawText() "uFormat" param
  557. //  pszBoundingRect     - optional: to control layout of text
  558. //  pszExtentRect       - receives the RECT for text size/location
  559. //-------------------------------------------------------------------------
  560. HRESULT GetThemeTextExtent(
  561. HDC hdc, 
  562. int iPartId, 
  563. int iStateId, 
  564. __EXT_UX_LPCWSTR pszText, 
  565. int iCharCount, 
  566. DWORD dwTextFlags, 
  567. OPTIONAL const RECT * pBoundingRect, 
  568. OUT RECT * pExtentRect
  569. );
  570. HRESULT GetThemeTextExtent(
  571. HDC hdc, 
  572. int iPartId, 
  573. int iStateId, 
  574. const CExtSafeString & sText, 
  575. int iCharCount, 
  576. DWORD dwTextFlags, 
  577. OPTIONAL const RECT * pBoundingRect, 
  578. OUT RECT * pExtentRect
  579. );
  580. //-------------------------------------------------------------------------
  581. //  GetThemeTextMetrics()
  582. //                      - returns info about the theme-specified font
  583. //                        for the part/state passed in.
  584. //
  585. //  hdc                 - optional: HDC for screen context
  586. //  iPartId             - part number to draw
  587. //  iStateId            - state number (of the part) 
  588. //  ptm                 - receives the font info
  589. //-------------------------------------------------------------------------
  590. HRESULT GetThemeTextMetrics(
  591. OPTIONAL HDC hdc, 
  592. int iPartId, 
  593. int iStateId, 
  594. OUT TEXTMETRIC * ptm
  595. );
  596. //-------------------------------------------------------------------------
  597. //  GetThemeBackgroundRegion()
  598. //                      - computes the region for a regular or partially 
  599. //                        transparent theme-specified background that is 
  600. //                        bound by the specified "pRect".
  601. //                        If the rectangle is empty, sets the HRGN to NULL 
  602. //                        and return S_FALSE.
  603. //
  604. //  hdc                 - optional HDC to draw into (DPI scaling)
  605. //  iPartId             - part number to draw
  606. //  iStateId            - state number (of the part) 
  607. //  pRect               - the RECT used to draw the part
  608. //  pRegion             - receives handle to calculated region
  609. //-------------------------------------------------------------------------
  610. HRESULT GetThemeBackgroundRegion(
  611. OPTIONAL HDC hdc,  
  612. int iPartId, 
  613. int iStateId, 
  614. const RECT * pRect, 
  615. OUT HRGN * pRegion
  616. );
  617. //-------------------------------------------------------------------------
  618. //  HitTestThemeBackground()
  619. //                      - returns a HitTestCode (a subset of the values 
  620. //                        returned by WM_NCHITTEST) for the point "ptTest" 
  621. //                        within the theme-specified background
  622. //                        (bound by pRect).  "pRect" and "ptTest" should 
  623. //                        both be in the same coordinate system 
  624. //                        (client, screen, etc).
  625. //
  626. //      hdc             - HDC to draw into
  627. //      iPartId         - part number to test against
  628. //      iStateId        - state number (of the part) 
  629. //      pRect           - the RECT used to draw the part
  630. //      hrgn            - optional region to use; must be in same coordinates as
  631. //                      -    pRect and pTest.
  632. //      ptTest          - the hit point to be tested
  633. //      dwOptions       - HTTB_xxx constants
  634. //      pwHitTestCode   - receives the returned hit test code - one of:
  635. //                        HTNOWHERE, HTLEFT, HTTOPLEFT, HTBOTTOMLEFT,
  636. //                        HTRIGHT, HTTOPRIGHT, HTBOTTOMRIGHT,
  637. //                        HTTOP, HTBOTTOM, HTCLIENT
  638. //-------------------------------------------------------------------------
  639. HRESULT HitTestThemeBackground(
  640. OPTIONAL HDC hdc, 
  641. int iPartId, 
  642. int iStateId, 
  643. DWORD dwOptions, 
  644. const RECT * pRect, 
  645. OPTIONAL HRGN hrgn, 
  646. POINT ptTest, 
  647. OUT WORD * pwHitTestCode
  648. );
  649. //------------------------------------------------------------------------
  650. //  DrawThemeEdge()     - Similar to the DrawEdge() API, but uses part colors
  651. //                        and is high-DPI aware
  652. //  hdc                 - HDC to draw into
  653. //  iPartId             - part number to draw
  654. //  iStateId            - state number of part
  655. //  pDestRect           - the RECT used to draw the line(s)
  656. //  uEdge               - Same as DrawEdge() API
  657. //  uFlags              - Same as DrawEdge() API
  658. //  pContentRect        - Receives the interior rect if (uFlags & BF_ADJUST)
  659. //------------------------------------------------------------------------
  660. HRESULT DrawThemeEdge(
  661. HDC hdc, 
  662. int iPartId, 
  663. int iStateId, 
  664. const RECT * pDestRect, 
  665. UINT uEdge, UINT uFlags, 
  666. OPTIONAL OUT RECT * pContentRect
  667. );
  668. //------------------------------------------------------------------------
  669. //  DrawThemeIcon()     - draws an image within an imagelist based on 
  670. //                        a (possible) theme-defined effect. 
  671. //
  672. //  hdc                 - HDC to draw into
  673. //  iPartId             - part number to draw
  674. //  iStateId            - state number of part
  675. //  pRect               - the RECT to draw the image within
  676. //  himl                - handle to IMAGELIST 
  677. //  iImageIndex         - index into IMAGELIST (which icon to draw)
  678. //------------------------------------------------------------------------
  679. HRESULT DrawThemeIcon(
  680. HDC hdc, 
  681. int iPartId, 
  682. int iStateId, 
  683. const RECT * pRect, 
  684. HIMAGELIST himl, 
  685. int iImageIndex
  686. );
  687. //---------------------------------------------------------------------------
  688. //  IsThemePartDefined() - returns TRUE if the theme has defined parameters
  689. //                         for the specified "iPartId" and "iStateId".
  690. //
  691. //  iPartId             - part number to find definition for
  692. //  iStateId            - state number of part
  693. //---------------------------------------------------------------------------
  694. BOOL IsThemePartDefined(
  695. int iPartId, 
  696. int iStateId
  697. );
  698. //---------------------------------------------------------------------------
  699. //  IsThemeBackgroundPartiallyTransparent()
  700. //                      - returns TRUE if the theme specified background for 
  701. //                        the part/state has transparent pieces or 
  702. //                        alpha-blended pieces.
  703. //
  704. //  iPartId             - part number 
  705. //  iStateId            - state number of part
  706. //---------------------------------------------------------------------------
  707. BOOL IsThemeBackgroundPartiallyTransparent(
  708. int iPartId, 
  709. int iStateId
  710. );
  711. //---------------------------------------------------------------------------
  712. //    lower-level theme information services
  713. //---------------------------------------------------------------------------
  714. // The following methods are getter routines for each of the Theme Data types.
  715. // Controls/Windows are defined in drawable "parts" by their author: a 
  716. // parent part and 0 or more child parts.  Each of the parts can be 
  717. // described in "states" (ex: disabled, hot, pressed).  
  718. //---------------------------------------------------------------------------
  719. // Each of the below methods takes a "iPartId" param to specify the 
  720. // part and a "iStateId" to specify the state of the part.  
  721. // "iStateId=0" refers to the root part.  "iPartId" = "0" refers to 
  722. // the root class.  
  723. //-----------------------------------------------------------------------
  724. // Each method also take a "iPropId" param because multiple instances of 
  725. // the same primitive type can be defined in the theme schema.
  726. //-----------------------------------------------------------------------
  727. //-----------------------------------------------------------------------
  728. //  GetThemeColor()     - Get the value for the specified COLOR property
  729. //
  730. //  iPartId             - part number 
  731. //  iStateId            - state number of part
  732. //  iPropId             - the property number to get the value for
  733. //  pColor              - receives the value of the property
  734. //-----------------------------------------------------------------------
  735. HRESULT GetThemeColor(
  736. int iPartId, 
  737. int iStateId, 
  738. int iPropId, 
  739. OUT COLORREF * pColor
  740. );
  741. //-----------------------------------------------------------------------
  742. //  GetThemeMetric()    - Get the value for the specified metric/size
  743. //                        property
  744. //
  745. //  hdc                 - (optional) hdc to be drawn into (DPI scaling)
  746. //  iPartId             - part number 
  747. //  iStateId            - state number of part
  748. //  iPropId             - the property number to get the value for
  749. //  piVal               - receives the value of the property
  750. //-----------------------------------------------------------------------
  751. HRESULT GetThemeMetric(
  752. OPTIONAL HDC hdc, 
  753. int iPartId, 
  754. int iStateId, 
  755. int iPropId, 
  756. OUT int * piVal
  757. );
  758. //-----------------------------------------------------------------------
  759. //  GetThemeString()    - Get the value for the specified string property
  760. //
  761. //  iPartId             - part number 
  762. //  iStateId            - state number of part
  763. //  iPropId             - the property number to get the value for
  764. //  pszBuff             - receives the string property value
  765. //  cchMaxBuffChars     - max. number of chars allowed in pszBuff
  766. //-----------------------------------------------------------------------
  767. HRESULT GetThemeString(
  768. int iPartId, 
  769. int iStateId, 
  770. int iPropId, 
  771. OUT __EXT_UX_LPWSTR pszBuff, 
  772. int cchMaxBuffChars
  773. );
  774. //-----------------------------------------------------------------------
  775. //  GetThemeBool()      - Get the value for the specified BOOL property
  776. //
  777. //  iPartId             - part number 
  778. //  iStateId            - state number of part
  779. //  iPropId             - the property number to get the value for
  780. //  pfVal               - receives the value of the property
  781. //-----------------------------------------------------------------------
  782. HRESULT GetThemeBool(
  783. int iPartId, 
  784. int iStateId, 
  785. int iPropId, 
  786. OUT BOOL * pfVal
  787. );
  788. //-----------------------------------------------------------------------
  789. //  GetThemeInt()       - Get the value for the specified int property
  790. //
  791. //  iPartId             - part number 
  792. //  iStateId            - state number of part
  793. //  iPropId             - the property number to get the value for
  794. //  piVal               - receives the value of the property
  795. //-----------------------------------------------------------------------
  796. HRESULT GetThemeInt(
  797. int iPartId, 
  798. int iStateId, 
  799. int iPropId, 
  800. OUT int * piVal
  801. );
  802. //-----------------------------------------------------------------------
  803. //  GetThemeEnumValue() - Get the value for the specified ENUM property
  804. //
  805. //  iPartId             - part number 
  806. //  iStateId            - state number of part
  807. //  iPropId             - the property number to get the value for
  808. //  piVal               - receives the value of the enum (cast to int*)
  809. //-----------------------------------------------------------------------
  810. HRESULT GetThemeEnumValue(
  811. int iPartId, 
  812. int iStateId, 
  813. int iPropId, 
  814. OUT int * piVal
  815. );
  816. //-----------------------------------------------------------------------
  817. //  GetThemePosition()  - Get the value for the specified position
  818. //                        property
  819. //
  820. //  iPartId             - part number 
  821. //  iStateId            - state number of part
  822. //  iPropId             - the property number to get the value for
  823. //  pPoint              - receives the value of the position property
  824. //-----------------------------------------------------------------------
  825. HRESULT GetThemePosition(
  826. int iPartId, 
  827. int iStateId, 
  828. int iPropId, 
  829. OUT POINT * pPoint
  830. );
  831. //-----------------------------------------------------------------------
  832. //  GetThemeFont()      - Get the value for the specified font property
  833. //
  834. //  hdc                 - (optional) hdc to be drawn to (DPI scaling)
  835. //  iPartId             - part number 
  836. //  iStateId            - state number of part
  837. //  iPropId             - the property number to get the value for
  838. //  pFont               - receives the value of the LOGFONT property
  839. //                        (scaled for the current logical screen dpi) 
  840. //-----------------------------------------------------------------------
  841. HRESULT GetThemeFont(
  842. OPTIONAL HDC hdc, 
  843. int iPartId, 
  844. int iStateId, 
  845. int iPropId, 
  846. OUT LOGFONT * pFont
  847. );
  848. //-----------------------------------------------------------------------
  849. //  GetThemeRect()      - Get the value for the specified RECT property
  850. //
  851. //  iPartId             - part number 
  852. //  iStateId            - state number of part
  853. //  iPropId             - the property number to get the value for
  854. //  pRect               - receives the value of the RECT property
  855. //-----------------------------------------------------------------------
  856. HRESULT GetThemeRect(
  857. int iPartId, 
  858. int iStateId, 
  859. int iPropId, 
  860. OUT RECT * pRect
  861. );
  862. //-----------------------------------------------------------------------
  863. //  GetThemeMargins()   - Get the value for the specified __EXT_UX_MARGINS property
  864. //
  865. //      hdc             - (optional) hdc to be used for drawing
  866. //      iPartId         - part number 
  867. //      iStateId        - state number of part
  868. //      iPropId         - the property number to get the value for
  869. //      prc             - RECT for area to be drawn into
  870. //      pMargins        - receives the value of the __EXT_UX_MARGINS property
  871. //-----------------------------------------------------------------------
  872. HRESULT GetThemeMargins(
  873. OPTIONAL HDC hdc, 
  874. int iPartId, 
  875. int iStateId, 
  876. int iPropId, 
  877. OPTIONAL RECT * prc, 
  878. OUT __EXT_UX_MARGINS * pMargins
  879. );
  880. //-----------------------------------------------------------------------
  881. //  GetThemeIntList()   - Get the value for the specified __EXT_UX_INTLIST struct
  882. //
  883. //      iPartId         - part number 
  884. //      iStateId        - state number of part
  885. //      iPropId         - the property number to get the value for
  886. //      pIntList        - receives the value of the __EXT_UX_INTLIST property
  887. //-----------------------------------------------------------------------
  888. HRESULT GetThemeIntList(
  889. int iPartId, 
  890. int iStateId, 
  891. int iPropId, 
  892. OUT __EXT_UX_INTLIST * pIntList
  893. );
  894. //-----------------------------------------------------------------------
  895. //  GetThemePropertyOrigin()
  896. //                      - searches for the specified theme property
  897. //                        and sets "pOrigin" to indicate where it was 
  898. //                        found (or not found)
  899. //
  900. //  iPartId             - part number 
  901. //  iStateId            - state number of part
  902. //  iPropId             - the property number to search for
  903. //  pOrigin             - receives the value of the property origin
  904. //-----------------------------------------------------------------------
  905. HRESULT GetThemePropertyOrigin(
  906. int iPartId, 
  907. int iStateId, 
  908. int iPropId, 
  909. OUT enum __EXT_UX_PROPERTYORIGIN * pOrigin
  910. );
  911. //---------------------------------------------------------------------------
  912. //  SetWindowTheme()
  913. //                      - redirects an existing Window to use a different 
  914. //                        section of the current theme information than its 
  915. //                        class normally asks for.
  916. //
  917. //  hwnd                - the handle of the window (cannot be NULL)
  918. //
  919. //  pszSubAppName       - app (group) name to use in place of the calling
  920. //                        app's name.  If NULL, the actual calling app 
  921. //                        name will be used.
  922. //
  923. //  pszSubIdList        - semicolon separated list of class Id names to 
  924. //                        use in place of actual list passed by the 
  925. //                        window's class.  if NULL, the id list from the 
  926. //                        calling class is used.
  927. //---------------------------------------------------------------------------
  928. // The Theme Manager will remember the "pszSubAppName" and the
  929. // "pszSubIdList" associations thru the lifetime of the window (even 
  930. // if themes are subsequently changed).  The window is sent a 
  931. // "WM_THEMECHANGED" msg at the end of this call, so that the new
  932. // theme can be found and applied.
  933. //---------------------------------------------------------------------------
  934. // When "pszSubAppName" or "pszSubIdList" are NULL, the Theme Manager 
  935. // removes the previously remember association.  To turn off theme-ing for 
  936. // the specified window, you can pass an empty string (L"") so it 
  937. // won't match any section entries.
  938. //---------------------------------------------------------------------------
  939. HRESULT SetWindowTheme(
  940. HWND hwnd, 
  941. __EXT_UX_LPCWSTR pszSubAppName, 
  942. __EXT_UX_LPCWSTR pszSubIdList
  943. );
  944. //---------------------------------------------------------------------------
  945. //  GetThemeFilename()  - Get the value for the specified FILENAME property.
  946. //
  947. //  iPartId             - part number 
  948. //  iStateId            - state number of part
  949. //  iPropId             - the property number to search for
  950. //  pszThemeFileName    - output buffer to receive the filename
  951. //  cchMaxBuffChars     - the size of the return buffer, in chars
  952. //---------------------------------------------------------------------------
  953. HRESULT GetThemeFilename(
  954. int iPartId, 
  955. int iStateId, 
  956. int iPropId, 
  957. OUT __EXT_UX_LPWSTR pszThemeFileName, 
  958. int cchMaxBuffChars
  959. );
  960. //---------------------------------------------------------------------------
  961. //  GetThemeSysColor()  - Get the value of the specified System color. 
  962. //
  963. //  bThemeSysColor      - if TRUE, will return color from [SysMetrics] 
  964. //   section of theme.
  965. //                        if FALSE, will return the global system color.
  966. //  iColorId            - the system color index defined in winuser.h
  967. //---------------------------------------------------------------------------
  968. COLORREF GetThemeSysColor( 
  969. BOOL bThemeSysColor,
  970. int iColorId 
  971. );
  972. //---------------------------------------------------------------------------
  973. //  GetThemeSysColorBrush() 
  974. //                      - Get the brush for the specified System color. 
  975. //
  976. //  bThemeSysColor      - if TRUE, will return
  977. //                        brush matching color from [SysMetrics] section of 
  978. //                        theme.  if FALSE, will return the brush matching
  979. //                        global system color.
  980. //  iColorId            - the system color index defined in winuser.h
  981. //---------------------------------------------------------------------------
  982. HBRUSH GetThemeSysColorBrush( 
  983. BOOL bThemeSysColor, 
  984. int iColorId 
  985. );
  986. //---------------------------------------------------------------------------
  987. //  GetThemeSysBool()   - Get the boolean value of specified System metric. 
  988. //
  989. //  bThemeSysColor      - if TRUE, will return
  990. //                        BOOL from [SysMetrics] section of theme.
  991. //                        if FALSE, will return the specified system boolean.
  992. //  iBoolId             - the TMT_XXX BOOL number (first BOOL
  993. //                        is TMT_FLATMENUS)
  994. //---------------------------------------------------------------------------
  995. BOOL GetThemeSysBool(
  996. BOOL bThemeSysColor,
  997. int iBoolId
  998. );
  999. //---------------------------------------------------------------------------
  1000. //  GetThemeSysSize()   - Get the value of the specified System size metric. 
  1001. //                        (scaled for the current logical screen dpi) 
  1002. //
  1003. //  bThemeSysColor      - if TRUE, will return
  1004. //                        size from [SysMetrics] section of theme.
  1005. //                        if FALSE, will return the global system metric.
  1006. //  iSizeId             - the following values are supported when 
  1007. //                        hTheme is non-NULL:
  1008. //                          SM_CXBORDER   (border width)
  1009. //                          SM_CXVSCROLL  (scrollbar width)
  1010. //                          SM_CYHSCROLL  (scrollbar height)
  1011. //                          SM_CXSIZE     (caption width)
  1012. //                          SM_CYSIZE     (caption height)
  1013. //                          SM_CXSMSIZE   (small caption width)
  1014. //                          SM_CYSMSIZE   (small caption height)
  1015. //                          SM_CXMENUSIZE (menubar width)
  1016. //                          SM_CYMENUSIZE (menubar height)
  1017. //                        when hTheme is NULL, iSizeId is passed directly
  1018. //                        to the GetSystemMetrics() function
  1019. //---------------------------------------------------------------------------
  1020. int GetThemeSysSize(
  1021. BOOL bThemeSysColor,
  1022. int iSizeId
  1023. );
  1024. //---------------------------------------------------------------------------
  1025. //  GetThemeSysFont()   - Get the LOGFONT for the specified System font. 
  1026. //
  1027. //  bThemeSysColor      - if TRUE, will return
  1028. //                        font from [SysMetrics] section of theme.
  1029. //                        if FALSE, will return the specified system font.
  1030. //  iFontId             - the TMT_XXX font number (first font
  1031. //                        is TMT_CAPTIONFONT)
  1032. //  plf                 - ptr to LOGFONT to receive the font value.
  1033. //                        (scaled for the current logical screen dpi) 
  1034. //---------------------------------------------------------------------------
  1035. HRESULT GetThemeSysFont(
  1036. BOOL bThemeSysColor,
  1037. int iFontId, 
  1038. OUT LOGFONT * plf
  1039. );
  1040. //---------------------------------------------------------------------------
  1041. //  GetThemeSysString() - Get the value of specified System string metric. 
  1042. //
  1043. //  iStringId           - must be one of the following values:
  1044. //                          TMT_CSSNAME
  1045. //                          TMT_XMLNAME
  1046. //  pszStringBuff       - the buffer to receive the string value
  1047. //  cchMaxStringChars   - max. number of chars that pszStringBuff can hold
  1048. //---------------------------------------------------------------------------
  1049. HRESULT GetThemeSysString(
  1050. int iStringId, 
  1051. OUT __EXT_UX_LPWSTR pszStringBuff, 
  1052. int cchMaxStringChars
  1053. );
  1054. //---------------------------------------------------------------------------
  1055. //  GetThemeSysInt() - Get the value of specified System int.
  1056. //
  1057. //  iIntId              - must be one of the following values:
  1058. //                          TMT_DPIX
  1059. //                          TMT_DPIY
  1060. //                          TMT_MINCOLORDEPTH
  1061. //  piValue             - ptr to int to receive value
  1062. //---------------------------------------------------------------------------
  1063. HRESULT GetThemeSysInt(
  1064. int iIntId, 
  1065. int * piValue
  1066. );
  1067. //---------------------------------------------------------------------------
  1068. //  IsThemeActive()     - can be used to test if a system theme is active
  1069. //                        for the current user session.  
  1070. //
  1071. //                        use the API "IsAppThemed()" to test if a theme is
  1072. //                        active for the calling process.
  1073. //---------------------------------------------------------------------------
  1074. BOOL IsThemeActive();
  1075. //---------------------------------------------------------------------------
  1076. //  IsAppThemed()       - returns TRUE if a theme is active and available to
  1077. //                        the current process
  1078. //---------------------------------------------------------------------------
  1079. BOOL IsAppThemed();
  1080. //---------------------------------------------------------------------------
  1081. //  GetWindowTheme()    - if window is themed, returns its most recent
  1082. //                        __EXT_UX_HTHEME from OpenThemeData() - otherwise, returns
  1083. //                        NULL.
  1084. //
  1085. //      hwnd            - the window to get the __EXT_UX_HTHEME of
  1086. //---------------------------------------------------------------------------
  1087. __EXT_UX_HTHEME GetWindowTheme( HWND hwnd );
  1088. //---------------------------------------------------------------------------
  1089. //  EnableThemeDialogTexture() 
  1090. //
  1091. //  - Enables/disables dialog background theme.  This method can be used to 
  1092. //    tailor dialog compatibility with child windows and controls that 
  1093. //    may or may not coordinate the rendering of their client area backgrounds 
  1094. //    with that of their parent dialog in a manner that supports seamless 
  1095. //    background texturing.
  1096. //
  1097. //      hwnd         - the window handle of the target dialog
  1098. //      dwFlags      - ETDT_ENABLE to enable the theme-defined dialog background texturing,
  1099. //                     ETDT_DISABLE to disable background texturing,
  1100. //                     ETDT_ENABLETAB to enable the theme-defined background 
  1101. //                          texturing using the Tab texture
  1102. //---------------------------------------------------------------------------
  1103. HRESULT EnableThemeDialogTexture(
  1104. HWND hwnd, 
  1105. DWORD dwFlags
  1106. );
  1107. //---------------------------------------------------------------------------
  1108. //  IsThemeDialogTextureEnabled() 
  1109. //
  1110. //  - Reports whether the dialog supports background texturing.
  1111. //
  1112. //      hdlg         - the window handle of the target dialog
  1113. //---------------------------------------------------------------------------
  1114. BOOL IsThemeDialogTextureEnabled( HWND hwnd );
  1115. //---------------------------------------------------------------------------
  1116. //  GetThemeAppProperties()
  1117. //                      - returns the app property flags that control theming
  1118. //---------------------------------------------------------------------------
  1119. DWORD GetThemeAppProperties();
  1120. //---------------------------------------------------------------------------
  1121. //  SetThemeAppProperties()
  1122. //                      - sets the flags that control theming within the app
  1123. //
  1124. //      dwFlags         - the flag values to be set
  1125. //---------------------------------------------------------------------------
  1126. void SetThemeAppProperties( DWORD dwFlags );
  1127. //---------------------------------------------------------------------------
  1128. //  GetCurrentThemeName()
  1129. //                      - Get the name of the current theme in-use.  
  1130. //                        Optionally, return the ColorScheme name and the 
  1131. //                        Size name of the theme.
  1132. //
  1133. //  pszThemeFileName    - receives the theme path & filename
  1134. //  cchMaxNameChars     - max chars allowed in pszNameBuff
  1135. //  pszColorBuff        - (optional) receives the canonical color scheme name
  1136. //  cchMaxColorChars    - max chars allowed in pszColorBuff
  1137. //  pszSizeBuff         - (optional) receives the canonical size name 
  1138. //  cchMaxSizeChars     - max chars allowed in pszSizeBuff
  1139. //---------------------------------------------------------------------------
  1140. HRESULT GetCurrentThemeName(
  1141. OUT __EXT_UX_LPWSTR pszThemeFileName, 
  1142. int cchMaxNameChars, 
  1143. OUT OPTIONAL __EXT_UX_LPWSTR pszColorBuff, 
  1144. int cchMaxColorChars,
  1145. OUT OPTIONAL __EXT_UX_LPWSTR pszSizeBuff, 
  1146. int cchMaxSizeChars
  1147. );
  1148. //---------------------------------------------------------------------------
  1149. //  GetThemeDocumentationProperty()
  1150. //                      - Get the value for the specified property name from 
  1151. //                        the [documentation] section of the themes.ini file 
  1152. //                        for the specified theme.  If the property has been 
  1153. //                        localized in the theme files string table, the 
  1154. //                        localized version of the property value is returned. 
  1155. //
  1156. //  pszThemeFileName    - filename of the theme file to query
  1157. //  pszPropertyName     - name of the string property to retreive a value for
  1158. //  pszValueBuff        - receives the property string value
  1159. //  cchMaxValChars      - max chars allowed in pszValueBuff
  1160. //---------------------------------------------------------------------------
  1161. HRESULT GetThemeDocumentationProperty(
  1162. __EXT_UX_LPCWSTR pszThemeName,
  1163. __EXT_UX_LPCWSTR pszPropertyName, 
  1164. OUT __EXT_UX_LPWSTR pszValueBuff, 
  1165. int cchMaxValChars
  1166. );
  1167. //---------------------------------------------------------------------------
  1168. // DrawThemeParentBackground()
  1169. //                      - used by partially-transparent or alpha-blended
  1170. //                        child controls to draw the part of their parent
  1171. //                        that they appear in front of.
  1172. //
  1173. //  hwnd                - handle of the child control
  1174. //  hdc                 - hdc of the child control
  1175. //  prc                 - (optional) rect that defines the area to be 
  1176. //                        drawn (CHILD coordinates)
  1177. //---------------------------------------------------------------------------
  1178. HRESULT DrawThemeParentBackground(
  1179. HWND hwnd, 
  1180. HDC hdc, 
  1181. OPTIONAL RECT * prc
  1182. );
  1183. //---------------------------------------------------------------------------
  1184. //  EnableTheming()     - enables or disables themeing for the current user
  1185. //                        in the current and future sessions.
  1186. //
  1187. //  fEnable             - if FALSE, disable theming & turn themes off.
  1188. //                      - if TRUE, enable themeing and, if user previously
  1189. //                        had a theme active, make it active now.
  1190. //---------------------------------------------------------------------------
  1191. HRESULT EnableTheming( BOOL fEnable );
  1192. //------------------------------------------------------------------------
  1193. //  DrawThemeBackgroundEx()   
  1194. //                      - draws the theme-specified border and fill for 
  1195. //                        the "iPartId" and "iStateId".  This could be 
  1196. //                        based on a bitmap file, a border and fill, or 
  1197. //                        other image description.  NOTE: This will be
  1198. //                        merged back into DrawThemeBackground() after 
  1199. //                        BETA 2.
  1200. //
  1201. //  hdc                 - HDC to draw into
  1202. //  iPartId             - part number to draw
  1203. //  iStateId            - state number (of the part) to draw
  1204. //  pRect               - defines the size/location of the part
  1205. //  pOptions            - ptr to optional params
  1206. //------------------------------------------------------------------------
  1207. HRESULT DrawThemeBackgroundEx(
  1208. HDC hdc, 
  1209. int iPartId, 
  1210. int iStateId, 
  1211. const RECT * pRect, 
  1212. OPTIONAL const __EXT_UX_DTBGOPTS * pOptions
  1213. );
  1214. protected:
  1215. __EXT_UX_HTHEME m_hUxTheme;
  1216. HINSTANCE m_hUxThemeDll;
  1217. bool m_bNeedToFreeDll:1;
  1218. DWORD m_dwComCtlVersion;
  1219. WCHAR m_szClassListCached[ MAX_PATH ];
  1220. HWND m_hWndCached;
  1221. HRESULT _CloseThemeData( __EXT_UX_HTHEME hUxTheme );
  1222. __EXT_UX_THEMEAPI_( __EXT_UX_HTHEME, m_pfnOpenThemeData )( HWND hwnd, __EXT_UX_LPCWSTR pszClassList );
  1223. __EXT_UX_THEMEAPI_( __EXT_UX_HTHEME, m_pfnOpenThemeDataEx )( HWND hwnd, __EXT_UX_LPCWSTR pszClassList, DWORD dwFlags );
  1224. __EXT_UX_THEMEAPI(  m_pfnCloseThemeData )( __EXT_UX_HTHEME hTheme );
  1225. __EXT_UX_THEMEAPI(  m_pfnDrawThemeBackground )( __EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect);
  1226. __EXT_UX_THEMEAPI(  m_pfnDrawThemeText )( __EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, __EXT_UX_LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, DWORD dwTextFlags2, const RECT *pRect);
  1227. __EXT_UX_THEMEAPI(  m_pfnDrawThemeTextEx )( __EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, __EXT_UX_LPCWSTR pszText, int iCharCount, DWORD dwFlags, LPRECT pRect, const __EXT_UX_DTTOPTS * pOptions );
  1228. __EXT_UX_THEMEAPI(  m_pfnGetThemeBackgroundContentRect )( __EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId,  const RECT *pBoundingRect, RECT *pContentRect );
  1229. __EXT_UX_THEMEAPI(  m_pfnGetThemeBackgroundExtent )( __EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pContentRect, RECT *pExtentRect );
  1230. __EXT_UX_THEMEAPI(  m_pfnGetThemePartSize )( __EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, RECT *prc, enum __EXT_UX_THEMESIZE eSize, SIZE *psz );
  1231. __EXT_UX_THEMEAPI(  m_pfnGetThemeTextExtent )( __EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, __EXT_UX_LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, const RECT *pBoundingRect, RECT *pExtentRect );
  1232. __EXT_UX_THEMEAPI(  m_pfnGetThemeTextMetrics )( __EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, TEXTMETRIC* ptm );
  1233. __EXT_UX_THEMEAPI(  m_pfnGetThemeBackgroundRegion )( __EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, HRGN *pRegion );
  1234. __EXT_UX_THEMEAPI(  m_pfnHitTestThemeBackground)(__EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, DWORD dwOptions, const RECT *pRect, HRGN hrgn, POINT ptTest, WORD *pwHitTestCode);
  1235. __EXT_UX_THEMEAPI(  m_pfnDrawThemeEdge)(__EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pDestRect, UINT uEdge, UINT uFlags, RECT *pContentRect);
  1236. __EXT_UX_THEMEAPI(  m_pfnDrawThemeIcon)(__EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, HIMAGELIST himl, int iImageIndex);
  1237. __EXT_UX_THEMEAPI_( BOOL, m_pfnIsThemePartDefined)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId);
  1238. __EXT_UX_THEMEAPI_( BOOL, m_pfnIsThemeBackgroundPartiallyTransparent)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId);
  1239. __EXT_UX_THEMEAPI(  m_pfnGetThemeColor)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId, int iPropId, COLORREF *pColor);
  1240. __EXT_UX_THEMEAPI(  m_pfnGetThemeMetric)(__EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId, int *piVal);
  1241. __EXT_UX_THEMEAPI(  m_pfnGetThemeString)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId, int iPropId, __EXT_UX_LPWSTR pszBuff, int cchMaxBuffChars);
  1242. __EXT_UX_THEMEAPI(  m_pfnGetThemeBool)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId, int iPropId, BOOL *pfVal);
  1243. __EXT_UX_THEMEAPI(  m_pfnGetThemeInt)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId, int iPropId, int *piVal);
  1244. __EXT_UX_THEMEAPI(  m_pfnGetThemeEnumValue)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId, int iPropId,int *piVal);
  1245. __EXT_UX_THEMEAPI(  m_pfnGetThemePosition)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId, int iPropId,POINT *pPoint);
  1246. __EXT_UX_THEMEAPI(  m_pfnGetThemeFont)(__EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId,LOGFONT *pFont);
  1247. __EXT_UX_THEMEAPI(  m_pfnGetThemeRect)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId, int iPropId,RECT *pRect);
  1248. __EXT_UX_THEMEAPI(  m_pfnGetThemeMargins)(__EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId, RECT *prc,__EXT_UX_MARGINS *pMargins);
  1249. __EXT_UX_THEMEAPI(  m_pfnGetThemeIntList)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId, int iPropId,__EXT_UX_INTLIST *pIntList);
  1250. __EXT_UX_THEMEAPI(  m_pfnGetThemePropertyOrigin)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId, int iPropId,enum __EXT_UX_PROPERTYORIGIN *pOrigin);
  1251. __EXT_UX_THEMEAPI(  m_pfnSetWindowTheme)(HWND hwnd, __EXT_UX_LPCWSTR pszSubAppName, __EXT_UX_LPCWSTR pszSubIdList);
  1252. __EXT_UX_THEMEAPI(  m_pfnGetThemeFilename)(__EXT_UX_HTHEME hTheme, int iPartId, int iStateId, int iPropId,__EXT_UX_LPWSTR pszThemeFileName, int cchMaxBuffChars);
  1253. __EXT_UX_THEMEAPI_( COLORREF, m_pfnGetThemeSysColor)(__EXT_UX_HTHEME hTheme, int iColorId);
  1254. __EXT_UX_THEMEAPI_( HBRUSH, m_pfnGetThemeSysColorBrush)(__EXT_UX_HTHEME hTheme, int iColorId);
  1255. __EXT_UX_THEMEAPI_( BOOL, m_pfnGetThemeSysBool)(__EXT_UX_HTHEME hTheme, int iBoolId);
  1256. __EXT_UX_THEMEAPI_( int, m_pfnGetThemeSysSize)(__EXT_UX_HTHEME hTheme, int iSizeId);
  1257. __EXT_UX_THEMEAPI(  m_pfnGetThemeSysFont)(__EXT_UX_HTHEME hTheme, int iFontId,LOGFONT *plf);
  1258. __EXT_UX_THEMEAPI(  m_pfnGetThemeSysString)(__EXT_UX_HTHEME hTheme, int iStringId, __EXT_UX_LPWSTR pszStringBuff, int cchMaxStringChars);
  1259. __EXT_UX_THEMEAPI(  m_pfnGetThemeSysInt)(__EXT_UX_HTHEME hTheme, int iIntId, int *piValue);
  1260. __EXT_UX_THEMEAPI_( BOOL, m_pfnIsThemeActive)();
  1261. __EXT_UX_THEMEAPI_( BOOL, m_pfnIsAppThemed)();
  1262. __EXT_UX_THEMEAPI_( __EXT_UX_HTHEME, m_pfnGetWindowTheme)(HWND hwnd);
  1263. __EXT_UX_THEMEAPI(  m_pfnEnableThemeDialogTexture)(HWND hwnd, DWORD dwFlags);
  1264. __EXT_UX_THEMEAPI_( BOOL, m_pfnIsThemeDialogTextureEnabled)(HWND hwnd);
  1265. __EXT_UX_THEMEAPI_( DWORD, m_pfnGetThemeAppProperties)();
  1266. __EXT_UX_THEMEAPI_( void, m_pfnSetThemeAppProperties)(DWORD dwFlags);
  1267. __EXT_UX_THEMEAPI(  m_pfnGetCurrentThemeName)(__EXT_UX_LPWSTR pszThemeFileName, int cchMaxNameChars, __EXT_UX_LPWSTR pszColorBuff, int cchMaxColorChars, __EXT_UX_LPWSTR pszSizeBuff, int cchMaxSizeChars);
  1268. __EXT_UX_THEMEAPI(  m_pfnGetThemeDocumentationProperty)(__EXT_UX_LPCWSTR pszThemeName, __EXT_UX_LPCWSTR pszPropertyName,__EXT_UX_LPWSTR pszValueBuff, int cchMaxValChars);
  1269. __EXT_UX_THEMEAPI(  m_pfnDrawThemeParentBackground)(HWND hwnd, HDC hdc, RECT* prc);
  1270. __EXT_UX_THEMEAPI(  m_pfnEnableTheming)(BOOL fEnable);
  1271. __EXT_UX_THEMEAPI(  m_pfnDrawThemeBackgroundEx)(__EXT_UX_HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const __EXT_UX_DTBGOPTS *pOptions);
  1272. }; // CExtUxTheme
  1273. //////////////////////////////////////////////////////////////////////////
  1274. // DWMAPI defines
  1275. //////////////////////////////////////////////////////////////////////////
  1276. // Define API decoration for direct importing of DLL references.
  1277. #define __EXT_DWMAPI(_name_) HRESULT ( STDAPICALLTYPE * _name_ )
  1278. #define __EXT_DWMAPI_(_type_,_name_) _type_ ( STDAPICALLTYPE * _name_ )
  1279. #define __EXT_DWM_COMPOSED_EVENT_NAME_MAX_LENGTH 64
  1280. #define __EXT_DWM_COMPOSED_EVENT_BASE_NAME L"DwmComposedEvent_"
  1281. #define __EXT_DWM_COMPOSED_EVENT_NAME_FORMAT L"%s%d"
  1282. // Blur behind data structures
  1283. #define __EXT_DWM_BB_ENABLE 0x00000001  // fEnable has been specified
  1284. #define __EXT_DWM_BB_BLURREGION 0x00000002  // hRgnBlur has been specified
  1285. #define __EXT_DWM_BB_TRANSITIONONMAXIMIZED 0x00000004  // fTransitionOnMaximized has been specified
  1286. // Thumbnails
  1287. typedef HANDLE __EXT_HTHUMBNAIL;
  1288. typedef __EXT_HTHUMBNAIL * __EXT_PHTHUMBNAIL;
  1289. #define __EXT_DWM_TNP_RECTDESTINATION       0x00000001
  1290. #define __EXT_DWM_TNP_RECTSOURCE            0x00000002
  1291. #define __EXT_DWM_TNP_OPACITY               0x00000004
  1292. #define __EXT_DWM_TNP_VISIBLE               0x00000008
  1293. #define __EXT_DWM_TNP_SOURCECLIENTAREAONLY  0x00000010
  1294. // Video enabling api
  1295. typedef ULONGLONG __EXT_DWM_FRAME_COUNT;
  1296. typedef ULONGLONG __EXT_QPC_TIME;
  1297. #define __EXT_DWM_FRAME_DURATION_DEFAULT -1
  1298. //////////////////////////////////////////////////////////////////////////
  1299. // CExtDWM class
  1300. //////////////////////////////////////////////////////////////////////////
  1301. #include <pshpack1.h>
  1302. class __PROF_UIS_API CExtDWM
  1303. {
  1304. public:
  1305. typedef struct __PROF_UIS_API __EXT__DWM_BLURBEHIND
  1306. {
  1307. DWORD dwFlags;
  1308. BOOL fEnable;
  1309. HRGN hRgnBlur;
  1310. BOOL fTransitionOnMaximized;
  1311. } __EXT_DWM_BLURBEHIND, *__EXT_PDWM_BLURBEHIND;
  1312. // Window attributes
  1313. typedef enum __EXT_DWMWINDOWATTRIBUTE
  1314. {
  1315. __EXT_DWMWA_NCRENDERING_ENABLED = 1,   // [get] Is non-client rendering enabled/disabled
  1316. __EXT_DWMWA_NCRENDERING_POLICY,        // [set] Non-client rendering policy
  1317. __EXT_DWMWA_TRANSITIONS_FORCEDISABLED, // [set] Potentially enable/forcibly disable transitions
  1318. __EXT_DWMWA_ALLOW_NCPAINT,             // [set] Allow contents rendered in the non-client area to be visible on the DWM-drawn frame.
  1319. __EXT_DWMWA_CAPTION_BUTTON_BOUNDS,
  1320. __EXT_DWMWA_NONCLIENT_RTL_LAYOUT,
  1321. __EXT_DWMWA_FORCE_ICONIC_REPRESENTATION,
  1322. __EXT_DWMWA_FLIP3D_POLICY,
  1323. __EXT_DWMWA_LAST
  1324. };
  1325. // Non-client rendering policy attribute values
  1326. typedef enum __EXT_DWMNCRENDERINGPOLICY
  1327. {
  1328. __EXT_DWMNCRP_USEWINDOWSTYLE, // Enable/disable non-client rendering based on window style
  1329. __EXT_DWMNCRP_DISABLED,       // Disabled non-client rendering; window style is ignored
  1330. __EXT_DWMNCRP_ENABLED         // Enabled non-client rendering; window style is ignored
  1331. };
  1332. // Thumbnails
  1333. typedef struct __PROF_UIS_API __EXT__DWM_THUMBNAIL_PROPERTIES
  1334. {
  1335. DWORD dwFlags;
  1336. RECT rcDestination;
  1337. RECT rcSource;
  1338. BYTE opacity;
  1339. BOOL fVisible;
  1340. BOOL fSourceClientAreaOnly;
  1341. } __EXT_DWM_THUMBNAIL_PROPERTIES, *__EXT_PDWM_THUMBNAIL_PROPERTIES;
  1342. // Video enabling api
  1343. typedef struct __PROF_UIS_API __EXT__UNSIGNED_RATIO
  1344. {
  1345. UINT32 uiNumerator;
  1346. UINT32 uiDenominator;
  1347. } __EXT_UNSIGNED_RATIO;
  1348. typedef struct __EXT__DWM_TIMING_INFO
  1349. {
  1350. UINT32 cbSize;
  1351. __EXT_UNSIGNED_RATIO rateRefresh;        // Monitor refresh rate
  1352. __EXT_UNSIGNED_RATIO rateCompose;        // composition rate     
  1353. __EXT_QPC_TIME qpcVBlank;          // QPC time at VBlank
  1354. __EXT_DWM_FRAME_COUNT cRefresh;           // DWM refresh counter
  1355. __EXT_QPC_TIME qpcCompose;         // QPC time at a compose time
  1356. __EXT_DWM_FRAME_COUNT cFrame;             // Frame number that was composed at qpcCompose
  1357. __EXT_DWM_FRAME_COUNT cRefreshFrame;      // Refresh count of the frame that was composed at qpcCompose
  1358. __EXT_DWM_FRAME_COUNT cRefreshConfirmed;  // The target refresh count of the last frame confirmed completed by the GPU
  1359. UINT32 cFlipsOutstanding;  // the number of outstanding flips
  1360. // Feedback on previous performance only valid on 2nd and subsequent calls
  1361. __EXT_DWM_FRAME_COUNT cFrameCurrent; // Last frame displayed
  1362. __EXT_DWM_FRAME_COUNT cFramesAvailable; // number of frames available but not displayed, used or dropped
  1363. __EXT_DWM_FRAME_COUNT cFrameCleared; // Source frame number when the following statistics where last cleared
  1364. __EXT_DWM_FRAME_COUNT cFramesReceived; // number of new frames received
  1365. __EXT_DWM_FRAME_COUNT cFramesDisplayed; // number of unique frames displayed
  1366. __EXT_DWM_FRAME_COUNT cFramesDropped; // number of rendered frames that were never displayed 
  1367. // because composition occurred too late
  1368. __EXT_DWM_FRAME_COUNT cFramesMissed; // number of times an old frame was composed 
  1369. // when a new frame should have been used but was not available
  1370. } __EXT_DWM_TIMING_INFO;
  1371. typedef enum 
  1372. {
  1373. __EXT_DWM_SOURCE_FRAME_SAMPLING_POINT, // Use the first source frame that 
  1374. // includes the first refresh of the output frame
  1375. __EXT_DWM_SOURCE_FRAME_SAMPLING_COVERAGE, // use the source frame that includes the most 
  1376. // refreshes of out the output frame
  1377. // in case of multiple source frames with the 
  1378. // same coverage the last will be used
  1379. __EXT_DWM_SOURCE_FRAME_SAMPLING_LAST // Sentinel value
  1380. } __EXT_DWM_SOURCE_FRAME_SAMPLING;
  1381. const UINT m_nDwmMaxQueuedBuffers;
  1382. const UINT m_nDwmMaxMonitors;
  1383. const UINT m_nDwmMaxAdapters;
  1384. #pragma warning(push)
  1385. #pragma warning(disable:4201)
  1386. typedef struct __EXT__DWM_PRESENT_PARAMETERS
  1387. {
  1388. UINT32 cbSize;
  1389. BOOL fQueue;
  1390. __EXT_DWM_FRAME_COUNT cRefreshStart;
  1391. UINT cBuffer;
  1392. BOOL fUseSourceRate;
  1393. union
  1394. {
  1395. __EXT_UNSIGNED_RATIO rateSource;
  1396. struct 
  1397. {
  1398. UINT cRefreshesPerFrame;
  1399. __EXT_DWM_SOURCE_FRAME_SAMPLING eSampling;
  1400. };
  1401. };
  1402. } __EXT_DWM_PRESENT_PARAMETERS;
  1403. #pragma warning(pop)
  1404. CExtDWM();
  1405. virtual ~CExtDWM();
  1406. BOOL IsCompositionEnabled();
  1407. BOOL DwmDefWindowProc(
  1408. IN HWND hWnd,
  1409. IN UINT msg,
  1410. IN WPARAM wParam,
  1411. IN LPARAM lParam,
  1412. OUT LRESULT * plResult
  1413. );
  1414. HRESULT DwmEnableBlurBehindWindow(
  1415. HWND hWnd, 
  1416. const __EXT_DWM_BLURBEHIND * pBlurBehind
  1417. );
  1418. HRESULT DwmEnableComposition(
  1419. BOOL fEnable
  1420. );
  1421. HRESULT DwmEnableMMCSS(
  1422. BOOL fEnableMMCSS
  1423. );
  1424. HRESULT DwmExtendFrameIntoClientArea(
  1425. HWND hWnd,
  1426. const CExtUxTheme::__EXT_UX__MARGINS * pMarInset
  1427. );
  1428.     
  1429. HRESULT DwmGetColorizationColor(
  1430. DWORD * pcrColorization,
  1431. BOOL * pfOpaqueBlend
  1432. );
  1433. HRESULT DwmGetCompositionTimingInfo(
  1434. HWND hwnd,
  1435. __EXT_DWM_TIMING_INFO * pTimingInfo
  1436. );
  1437. HRESULT DwmGetWindowAttribute(
  1438. HWND hwnd,
  1439. DWORD dwAttribute,
  1440. PVOID pvAttribute, 
  1441. DWORD cbAttribute
  1442. );
  1443. HRESULT DwmIsCompositionEnabled(
  1444. BOOL * pfEnabled
  1445. );
  1446. HRESULT DwmModifyPreviousDxFrameDuration(
  1447. HWND hwnd, 
  1448. INT cRefreshes,
  1449. BOOL fRelative
  1450. );
  1451. HRESULT DwmQueryThumbnailSourceSize(
  1452. __EXT_HTHUMBNAIL hThumbnail, 
  1453. OUT PSIZE pSize
  1454. );
  1455. HRESULT DwmRegisterThumbnail(
  1456. HWND hwndDestination, 
  1457. HWND hwndSource, 
  1458. const SIZE * pMinimizedSize,
  1459. __EXT_PHTHUMBNAIL phThumbnailId
  1460. );
  1461. HRESULT DwmSetDxFrameDuration(
  1462. HWND hwnd, 
  1463. INT cRefreshes
  1464. );
  1465. HRESULT DwmSetPresentParameters(
  1466. HWND hwnd,
  1467. __EXT_DWM_PRESENT_PARAMETERS * pPresentParams
  1468. );
  1469. HRESULT DwmSetWindowAttribute(
  1470. HWND hwnd,
  1471. DWORD dwAttribute,
  1472. LPCVOID pvAttribute, 
  1473. DWORD cbAttribute
  1474. );
  1475. HRESULT DwmUnregisterThumbnail(
  1476. __EXT_HTHUMBNAIL hThumbnailId
  1477. );
  1478. HRESULT DwmUpdateThumbnailProperties(
  1479. __EXT_HTHUMBNAIL hThumbnailId, 
  1480. const __EXT_DWM_THUMBNAIL_PROPERTIES * ptnProperties
  1481. );
  1482. protected:
  1483. HINSTANCE m_hDWMDll;
  1484. bool m_bNeedToFreeDll:1;
  1485. __EXT_DWMAPI_(BOOL, m_pfnDwmDefWindowProc)( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT * plResult );
  1486. __EXT_DWMAPI(m_pfnDwmEnableBlurBehindWindow)( HWND hWnd, const __EXT_DWM_BLURBEHIND * pBlurBehind );
  1487. __EXT_DWMAPI(m_pfnDwmEnableComposition)( BOOL fEnable );
  1488. __EXT_DWMAPI(m_pfnDwmEnableMMCSS)( BOOL fEnableMMCSS );
  1489. __EXT_DWMAPI(m_pfnDwmExtendFrameIntoClientArea)( HWND hWnd, const CExtUxTheme::__EXT_UX__MARGINS * pMarInset );
  1490. __EXT_DWMAPI(m_pfnDwmGetColorizationColor)( DWORD * pcrColorization, BOOL * pfOpaqueBlend );
  1491. __EXT_DWMAPI(m_pfnDwmGetCompositionTimingInfo)( HWND hwnd, __EXT_DWM_TIMING_INFO * pTimingInfo );
  1492. __EXT_DWMAPI(m_pfnDwmGetWindowAttribute)( HWND hwnd, DWORD dwAttribute, PVOID pvAttribute, DWORD cbAttribute );
  1493. __EXT_DWMAPI(m_pfnDwmIsCompositionEnabled)( BOOL * pfEnabled );
  1494. __EXT_DWMAPI(m_pfnDwmModifyPreviousDxFrameDuration)( HWND hwnd, INT cRefreshes, BOOL fRelative );
  1495. __EXT_DWMAPI(m_pfnDwmQueryThumbnailSourceSize)( __EXT_HTHUMBNAIL hThumbnail, PSIZE pSize );
  1496. __EXT_DWMAPI(m_pfnDwmRegisterThumbnail)( HWND hwndDestination, HWND hwndSource, const SIZE * pMinimizedSize, __EXT_PHTHUMBNAIL phThumbnailId );
  1497. __EXT_DWMAPI(m_pfnDwmSetDxFrameDuration)( HWND hwnd, INT cRefreshes );
  1498. __EXT_DWMAPI(m_pfnDwmSetPresentParameters)( HWND hwnd, __EXT_DWM_PRESENT_PARAMETERS * pPresentParams );
  1499. __EXT_DWMAPI(m_pfnDwmSetWindowAttribute)( HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute );
  1500. __EXT_DWMAPI(m_pfnDwmUnregisterThumbnail)( __EXT_HTHUMBNAIL hThumbnailId );
  1501. __EXT_DWMAPI(m_pfnDwmUpdateThumbnailProperties)( __EXT_HTHUMBNAIL hThumbnailId, const __EXT_DWM_THUMBNAIL_PROPERTIES * ptnProperties );
  1502. }; // CExtDWM
  1503. #include <poppack.h>
  1504. // paint managers
  1505. class __PROF_UIS_API CExtImageList : public CImageList
  1506. {
  1507. public:
  1508. CExtImageList()
  1509. {
  1510. }
  1511. CExtImageList(
  1512. UINT nResourceID,
  1513. COLORREF clrTransparencyMask = RGB(255,0,255),
  1514. int nButtonWidth = 16,
  1515. HINSTANCE hInstResource = NULL,
  1516. UINT nColorFlag = ILC_COLOR24,
  1517. UINT nColorAddionalFlag = ILC_MASK
  1518. )
  1519. {
  1520. VERIFY( Load( nResourceID, clrTransparencyMask, nButtonWidth, hInstResource, nColorFlag, nColorAddionalFlag ) );
  1521. }
  1522. BOOL Load(
  1523. UINT nResourceID,
  1524. COLORREF clrTransparencyMask = RGB(255,0,255),
  1525. int nButtonWidth = 16,
  1526. HINSTANCE hInstResource = NULL,
  1527. UINT nColorFlag = ILC_COLOR24,
  1528. UINT nColorAddionalFlag = ILC_MASK
  1529. )
  1530. {
  1531. ASSERT(
  1532. nColorFlag == ILC_COLOR4
  1533. || nColorFlag == ILC_COLOR8
  1534. || nColorFlag == ILC_COLOR16
  1535. || nColorFlag == ILC_COLOR24
  1536. || nColorFlag == ILC_COLOR32
  1537. );
  1538. if( hInstResource == NULL )
  1539. {
  1540. hInstResource = ::AfxGetResourceHandle();
  1541. if( hInstResource == NULL )
  1542. {
  1543. hInstResource = ::AfxGetInstanceHandle();
  1544. if( hInstResource == NULL )
  1545. {
  1546. ASSERT( FALSE );
  1547. return FALSE;
  1548. }
  1549. }
  1550. }
  1551. CBitmap objBitmap;
  1552. if( ! objBitmap.Attach( LoadImage( hInstResource, MAKEINTRESOURCE( nResourceID ), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE|LR_CREATEDIBSECTION ) ) )
  1553. {
  1554. ASSERT( FALSE );
  1555. return FALSE;
  1556. }
  1557. BITMAP infoBitmap;
  1558. ::memset( &infoBitmap, 0, sizeof(BITMAP) );
  1559. if( ! objBitmap.GetBitmap( &infoBitmap ) )
  1560. {
  1561. ASSERT( FALSE );
  1562. return FALSE;
  1563. }
  1564. CSize sizeBitmap( infoBitmap.bmWidth, infoBitmap.bmHeight ); 
  1565. int nCountOfButtons = sizeBitmap.cx / nButtonWidth;
  1566. if( ! Create( nButtonWidth, sizeBitmap.cy, nColorFlag|nColorAddionalFlag, nCountOfButtons, 0 ) )
  1567. {
  1568. ASSERT( FALSE );
  1569. return FALSE;
  1570. }
  1571. if( Add( &objBitmap, clrTransparencyMask ) == -1 )
  1572. {
  1573. ASSERT( FALSE );
  1574. return FALSE;
  1575. }
  1576. return TRUE;
  1577. }
  1578. }; // class CExtImageList
  1579. // class __PROF_UIS_API CExtSWMR
  1580. // {
  1581. // protected:
  1582. // static __EXT_MFC_SAFE_LPCTSTR stat_GenerateObjectName(
  1583. // __EXT_MFC_SAFE_LPCTSTR strPrefix,
  1584. // __EXT_MFC_SAFE_LPCTSTR strSuffix,
  1585. // __EXT_MFC_SAFE_LPTSTR strOutNameBuffer,
  1586. // size_t nBufferSize,
  1587. // bool & bConstructed
  1588. // );
  1589. // mutable bool m_bConstructed;
  1590. // HANDLE m_hProtectWriter, m_hProtectReaders, m_hEnumReaders;
  1591. // public:
  1592. // class __PROF_UIS_API LockSection
  1593. // {
  1594. // CExtSWMR & m_SWMR;
  1595. // bool m_bRead:1, m_bLocked:1;
  1596. // public:
  1597. // LockSection(
  1598. // CExtSWMR & _SWMR,
  1599. // bool bRead,
  1600. // DWORD dwTimeout = INFINITE
  1601. // );
  1602. // ~LockSection();
  1603. // bool IsLocked() const;
  1604. // }; // class LockSection
  1605. // CExtSWMR(
  1606. // __EXT_MFC_SAFE_LPCTSTR strName = NULL
  1607. // );
  1608. // virtual ~CExtSWMR();
  1609. // bool Create(
  1610. // __EXT_MFC_SAFE_LPCTSTR strName = NULL
  1611. // );
  1612. // void Destroy();
  1613. // bool IsConstructed() const;
  1614. // DWORD WaitToWrite(
  1615. // DWORD dwTimeout = INFINITE
  1616. // );
  1617. // DWORD WaitToRead(
  1618. // DWORD dwTimeout = INFINITE
  1619. // );
  1620. // void DoneReading();
  1621. // void DoneWriting();
  1622. // }; // class CExtSWMR
  1623. class __PROF_UIS_API CExtPaintManager : public CObject
  1624. {
  1625. public:
  1626. DECLARE_SERIAL( CExtPaintManager );
  1627. enum e_ui_scaling_type_t
  1628. {
  1629. __EUIST_X           = 0,
  1630. __EUIST_Y           = 1,
  1631. __EUIST_Z           = 2,
  1632. __EUIST_MIN_VALUE   = 0,
  1633. __EUIST_MAX_VALUE   = 2,
  1634. };
  1635. virtual bool UiScalingIsEnabled(
  1636. e_ui_scaling_type_t eUIST
  1637. ) const;
  1638. virtual INT UiScalingDo(
  1639. INT nValue,
  1640. e_ui_scaling_type_t eUIST
  1641. ) const;
  1642. protected:
  1643. // color values container
  1644. typedef CArray < COLORREF, COLORREF & >
  1645. sys_colors_container;
  1646. sys_colors_container m_colors;
  1647. // system brushes container
  1648. typedef CArray < HBRUSH, HBRUSH & >
  1649. sys_brashes_container;
  1650. sys_brashes_container m_brushes;
  1651. // translated colors map
  1652. typedef
  1653. CMap < int, int, int, int >
  1654. translate_color_map;
  1655. translate_color_map m_mapColorTranslate;
  1656. public:
  1657. CPalette m_PaletteWide;
  1658. COLORREF m_clrForceSplitterBk;
  1659. CBrush m_brushLightDefault, m_brushLightSystem,
  1660. m_brushDarkDefault, m_brushDarkSystem,
  1661. m_brushLighterDefault, m_brushLighterSystem,
  1662. m_brushDarkerDefault, m_brushDarkerSystem,
  1663. m_brushLightestDefault, m_brushLightestSystem,
  1664. m_brushDarkestDefault, m_brushDarkestSystem;
  1665. #if (!defined __EXT_MFC_NO_RIBBON_BAR)
  1666. // ribbon
  1667. CFont m_FontRibbonNormal,
  1668. m_FontRibbonGroupCaption,
  1669. m_FontRibbonTabItem;
  1670. virtual void Ribbon_SyncFonts();
  1671. #endif // (!defined __EXT_MFC_NO_RIBBON_BAR)
  1672. // normal
  1673. CFont m_FontNormal, m_FontNormalVert, m_FontNormalVertX;
  1674. CFont m_FontBold, m_FontBoldVert, m_FontBoldVertX;
  1675. // generic caption
  1676. CFont m_FontCaption, m_FontCaptionVert, m_FontCaptionVertX;
  1677. CFont m_FontCaptionBold, m_FontCaptionBoldVert, m_FontCaptionBoldVertX;
  1678. // bar caption
  1679. CFont m_FontNormalBC, m_FontNormalVertBC, m_FontNormalVertXBC;
  1680. CFont m_FontBoldBC, m_FontBoldVertBC, m_FontBoldVertXBC;
  1681. // marlett symbols
  1682. CFont m_FontMarlett;
  1683. int m_DSS_DISABLED_style;
  1684. enum e_paint_manager_name_t
  1685. {
  1686. Office2000 = 29750,
  1687. OfficeXP = 29751,
  1688. Office2003 = 29752,
  1689. Office2003NoThemes = 29753,
  1690. Studio2005 = 29754,
  1691. Studio2008 = 29755,
  1692. NativeXP = 29756,
  1693. Office2007_R1 = 29757,
  1694. Office2007_R2_LunaBlue = 29758,
  1695. Office2007_R2_Obsidian = 29759,
  1696. Office2007_R2_Silver = 29760,
  1697. Office2007_R3_LunaBlue = 29761,
  1698. Office2007_R3_Obsidian = 29762,
  1699. Office2007_R3_Silver = 29763,
  1700. Office2010_R1 = 29764,
  1701. Office2010_R2_Blue = 29765,
  1702. Office2010_R2_Silver = 29766,
  1703. Office2010_R2_Black = 29767,
  1704. ProfSkinPainter = 29769,
  1705. };
  1706. enum e_system_theme_t
  1707. {
  1708. ThemeUnknown = 0,
  1709. ThemeLunaBlue = 1,
  1710. ThemeLunaOlive = 2,
  1711. ThemeLunaSilver = 3,
  1712. ThemeLunaRoyale = 4,
  1713. ThemeVistaOrLaterUX = 5,
  1714. ThemeVistaOrLaterDWM = 6,
  1715. };
  1716. virtual e_paint_manager_name_t OnQueryPaintManagerName()
  1717. {
  1718. ASSERT_VALID( this );
  1719. return Office2000;
  1720. }
  1721. virtual INT GetSeparatorHeight()
  1722. {
  1723. ASSERT_VALID( this );
  1724. return 6;
  1725. }
  1726. #ifndef __EXT_MFC_NO_TAB_ONENOTE_CTRL
  1727. virtual void TabOneNoteWnd_DrawClientArea(
  1728. CDC & dc,
  1729. CRect & rcClient,
  1730. CObject * pHelperSrc = NULL,
  1731. LPARAM lParam = 0L
  1732. );
  1733. virtual void GetTabOneNoteItemColors(
  1734. bool bSelected,
  1735. bool bHover,
  1736. bool bEnabled,
  1737. COLORREF &clrBorderLight,
  1738. COLORREF &clrBorderDark,
  1739. COLORREF &clrBkLight,
  1740. COLORREF &clrBkDark,
  1741. COLORREF &clrText
  1742. );
  1743. #endif // __EXT_MFC_NO_TAB_ONENOTE_CTRL
  1744. #ifndef __EXT_MFC_NO_TAB_WHIDBEY_CTRL
  1745. virtual void GetTabWhidbeyItemColors(
  1746. bool bSelected,
  1747. bool bHover,
  1748. bool bEnabled,
  1749. COLORREF &clrBorder,
  1750. COLORREF &clrBkLight,
  1751. COLORREF &clrBkDark,
  1752. COLORREF &clrText
  1753. );
  1754. #endif // __EXT_MFC_NO_TAB_WHIDBEY_CTRL
  1755. virtual bool OnQueryUseThemeColors() const;
  1756. virtual e_system_theme_t OnQuerySystemTheme() const;
  1757. virtual bool IsHighContrast() const;
  1758. // global auto-pointer class for CExtPaintManager
  1759. class __PROF_UIS_API CExtPaintManagerAutoPtr
  1760. : public CExtPmSynchronizeSink
  1761. {
  1762. CExtPaintManager * m_pPaintManager;
  1763. CTypedPtrList
  1764. < CPtrList, CExtPmBridge * >
  1765. m_listBridges;
  1766. bool m_bHaveScrollLines:1;
  1767. UINT m_uCachedScrollLines;
  1768. bool InitPaintManagerInstance();
  1769. public:
  1770. CExtSafeString m_strOsVer;
  1771. OSVERSIONINFO m_osVerData;
  1772. // quick boolean helpers
  1773. bool
  1774.   m_bIsWin32s:1 // old Win32s
  1775. , m_bIsWin9x:1 // any Windows 9x
  1776. , m_bIsWin95:1 // exactly Windows 95
  1777. , m_bIsWin98:1 // exactly Windows 98
  1778. , m_bIsWin98orLater:1 // Windows 98 or later
  1779. , m_bIsWinNT:1 // any NT
  1780. , m_bIsWinNT4:1 // exactly Windows NT 4
  1781. , m_bIsWin2000:1 // exactly Windows 2000
  1782. , m_bIsWinXP:1 // exactly Windows XP
  1783. , m_bIsWinNT4orLater:1 // Windows NT 4 or later
  1784. , m_bIsWin2000orLater:1 // Windows 2000 or later
  1785. , m_bIsWinXPorLater:1 // Windows XP or later
  1786. , m_bIsWinVista:1 // Windows Vista
  1787. , m_bIsWinVistaOrLater:1 // Windows Vista or later
  1788. , m_bIsWin7:1 // Windows 7
  1789. , m_bIsWin7OrLater:1 // Windows 7 or later
  1790. ;
  1791. INT m_nLPX, m_nLPY, m_nLPZ;
  1792. bool
  1793.   m_bEnableUiScalingX:1
  1794. , m_bEnableUiScalingY:1
  1795. , m_bEnableUiScalingZ:1
  1796. ;
  1797. bool m_bAutoSkinScrollBars:1;
  1798. CExtPaintManagerAutoPtr();
  1799. virtual ~CExtPaintManagerAutoPtr();
  1800. void Advise(
  1801. CExtPmBridge * pPmBridge,
  1802. bool bAddTail = true
  1803. );
  1804. void Unadvise( CExtPmBridge * pPmBridge );
  1805. void UnadviseAll();
  1806. CExtPaintManager * GetPM();
  1807. CExtPaintManager * operator -> ();
  1808. INT m_nInsallPaintManagerCounter;
  1809. const UINT m_nMsgPaintManagerChanged;
  1810. bool InstallPaintManager(
  1811. CExtPaintManager * pPaintManager
  1812. );
  1813. bool InstallPaintManager(
  1814. CRuntimeClass * pRtcPaintManager
  1815. );
  1816. e_paint_manager_name_t GetPaintManagerName()
  1817. {
  1818. ASSERT_VALID( m_pPaintManager );
  1819. return m_pPaintManager->OnQueryPaintManagerName();
  1820. }
  1821. bool PaintManagerStateLoad(
  1822. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  1823. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  1824. __EXT_MFC_SAFE_LPCTSTR sSectionNameProfile, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%%sSectionNameProfile%
  1825. HKEY hKeyRoot = HKEY_CURRENT_USER,
  1826. bool bEnableThrowExceptions = false
  1827. );
  1828. bool PaintManagerStateSave(
  1829. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  1830. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  1831. __EXT_MFC_SAFE_LPCTSTR sSectionNameProfile, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%%sSectionNameProfile%%sSectionNameProfile%
  1832. HKEY hKeyRoot = HKEY_CURRENT_USER,
  1833. bool bEnableThrowExceptions = false
  1834. );
  1835. virtual bool PaintManagerStateSerialize(
  1836. CArchive & ar,
  1837. bool bEnableThrowExceptions = false
  1838. );
  1839. UINT GetMouseWheelScrollLines();
  1840. void InitUserExApi();
  1841. bool m_bUxValidColorsExtracted:1;
  1842. COLORREF
  1843. m_clrUxTaskBandEdgeLightColor,
  1844. m_clrUxTaskBandEdgeHighLightColor,
  1845. m_clrUxTaskBandEdgeShadowColor,
  1846. m_clrUxTaskBandEdgeDkShadowColor,
  1847. m_clrUxTaskBandEdgeFillColor,
  1848. m_clrUxTaskBandFillColorHint,
  1849. m_clrUxTaskBandAccentColorHint;
  1850. CExtUxTheme m_UxTheme;
  1851. CExtDWM m_DWM;
  1852. e_system_theme_t m_eCurrentTheme;
  1853. bool m_bAllowWndUpdateSourceDetection:1;
  1854. bool IsWndUpdateSource(
  1855. CWnd * pWndNotifySrc
  1856. );
  1857. void OnSysColorChange(
  1858. CWnd * pWndNotifySrc
  1859. );
  1860. void OnSettingChange(
  1861. CWnd * pWndNotifySrc,
  1862. UINT uFlags,
  1863. __EXT_MFC_SAFE_LPCTSTR lpszSection
  1864. );
  1865. void OnDisplayChange(
  1866. CWnd * pWndNotifySrc,
  1867. INT nDepthBPP,
  1868. CPoint ptSizes
  1869. );
  1870. void OnThemeChanged(
  1871. CWnd * pWndNotifySrc,
  1872. WPARAM wParam,
  1873. LPARAM lParam
  1874. );
  1875. // layered API
  1876. struct __EXT_MFC_BLENDFUNCTION
  1877. {
  1878. BYTE BlendOp;
  1879. BYTE BlendFlags;
  1880. BYTE SourceConstantAlpha;
  1881. BYTE AlphaFormat;
  1882. };
  1883. typedef BOOL (WINAPI *PFNGRADIENTFILL)(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);
  1884. typedef BOOL (WINAPI *PFNALPHABLEND)(HDC,INT,INT,INT,INT,HDC,INT,INT,INT,INT,__EXT_MFC_BLENDFUNCTION);
  1885. typedef BOOL (WINAPI *PFNALPHADIBBLEND)(HDC,INT,INT,INT,INT,CONST VOID *,CONST BITMAPINFO *,UINT,INT,INT,INT,INT,__EXT_MFC_BLENDFUNCTION);
  1886. typedef BOOL (WINAPI *PFNTRANSPARENTBLT)(HDC,INT,INT,INT,INT,HDC,INT,INT,INT,INT,UINT);
  1887. typedef BOOL (WINAPI *PFNTRANSPARENTDIBITS)(HDC,INT,INT,INT,INT,CONST VOID *,CONST BITMAPINFO *,UINT,INT,INT,INT,INT,UINT);
  1888. HMODULE m_hDllMsImg;
  1889. PFNGRADIENTFILL m_pfnMsImgGradientFill;
  1890. PFNALPHABLEND m_pfnMsImgAlphaBlend;
  1891. PFNALPHADIBBLEND m_pfnMsImgAlphaDIBBlend;
  1892. PFNTRANSPARENTBLT m_pfnMsImgTransparentBlt;
  1893. PFNTRANSPARENTDIBITS m_pfnMsImgTransparentDIBits;
  1894. typedef BOOL (WINAPI *PFNANIMATEWINDOW)( HWND,DWORD,DWORD );
  1895. HMODULE m_hDllUser32;
  1896. PFNANIMATEWINDOW m_pfnAnimateWindow;
  1897. typedef
  1898. BOOL ( __stdcall * PFNSETLAYEREDWINDOWATTRIBUTES)(
  1899. HWND             hwnd,    // handle to the layered window
  1900. COLORREF         crKey,   // specifies the color key
  1901. BYTE             bAlpha,  // value for the blend function
  1902. DWORD            dwFlags  // action
  1903. );
  1904. typedef
  1905. BOOL ( __stdcall * PFNUPDATELAYEREDWINDOW )(
  1906. HWND             hwnd,    // handle to layered window
  1907. HDC              hdcDst,  // handle to screen DC
  1908. POINT          * pptDst,  // new screen position
  1909. SIZE           * psize,   // new size of the layered window
  1910. HDC              hdcSrc,  // handle to surface DC
  1911. POINT          * pptSrc,  // layer position
  1912. COLORREF         crKey,   // color key
  1913. __EXT_MFC_BLENDFUNCTION  * pblend,  // blend function
  1914. DWORD            dwFlags  // options
  1915. );
  1916. PFNSETLAYEREDWINDOWATTRIBUTES m_pfnSetLayeredWindowAttributes;
  1917. PFNUPDATELAYEREDWINDOW m_pfnUpdateLayeredWindow;
  1918. typedef
  1919. BOOL ( __stdcall * PFNPRINTWINDOW )(
  1920. HWND hwnd,               // Window to copy
  1921. HDC  hdcBlt,             // HDC to print into
  1922. UINT nFlags              // Optional flags
  1923. );
  1924. PFNPRINTWINDOW m_pfnPrintWindow;
  1925. public:
  1926. // CExtPmSynchronizeSink methods
  1927. virtual bool PmSynchronizeSink_PerformSynchronizationWith(
  1928. CExtPmSynchronizeSink * pPmSynchronizeSink,
  1929. bool bRegister = true,
  1930. bool bSynchronizeItNow = true
  1931. );
  1932. virtual LPSTREAM PmSynchronizeSink_GetData(
  1933. HGLOBAL hGlobal = NULL
  1934. );
  1935. virtual void PmSynchronizeSink_SynchronizeFrom(
  1936. LPSTREAM pStream
  1937. );
  1938. bool m_bLayeredHighlighting2005:1;
  1939. }; // class CExtPaintManagerAutoPtr
  1940. // construction/destruction
  1941. CExtPaintManager();
  1942. virtual ~CExtPaintManager();
  1943. virtual void SerializeSynchronizationData( CArchive & ar );
  1944. static CExtAnimationParameters g_DefAnimationParametersEmpty;
  1945. static CExtAnimationParameters g_DefAnimationParametersNormal;
  1946. static CExtAnimationParameters g_DefAnimationParametersSlow;
  1947. static CExtAnimationParameters g_DefAnimationParametersVerySlow;
  1948. static CExtAnimationParameters g_DefAnimationParametersVerySlowAndSmooth;
  1949. virtual const CExtAnimationParameters *
  1950. Animation_GetParameters(
  1951. INT eAPT, // __EAPT_*** animation type
  1952. CObject * pHelperSrc,
  1953. const CExtAnimationClient * pAC,
  1954. LPARAM lParam = 0L
  1955. ) const;
  1956. // paint session complete event - free all cached objects
  1957. virtual void OnPaintSessionComplete(
  1958. CObject * pHelperSrc,
  1959. LPARAM lParam = 0L
  1960. );
  1961. virtual bool NcFrame_IsSupported(
  1962. const CWnd * pWnd,
  1963. LPARAM lParam = 0L
  1964. ) const;
  1965. virtual HRGN NcFrame_GenerateSkinFrameRGN(
  1966. const RECT & rcWnd,
  1967. const CWnd * pWnd,
  1968. LPARAM lParam = 0L
  1969. ) const;
  1970. virtual INT NcFrame_GetCaptionHeight(
  1971. bool bActive,
  1972. const CWnd * pWnd,
  1973. LPARAM lParam = 0L
  1974. ) const;
  1975. virtual void NcFrame_GetMetrics(
  1976. RECT & rcNcBorders,
  1977. RECT & rcThemePadding,
  1978. const CWnd * pWnd,
  1979. LPARAM lParam = 0L
  1980. ) const;
  1981. enum e_nc_button_state_t
  1982. {
  1983. __ENCBS_DISABLED = 0,
  1984. __ENCBS_NORMAL = 1,
  1985. __ENCBS_HOVER = 2,
  1986. __ENCBS_PRESSED = 3,
  1987. };
  1988. virtual void NcFrame_Paint(
  1989. CDC & dc,
  1990. const CExtCmdIcon * pIcon,
  1991. __EXT_MFC_SAFE_LPCTSTR strCaption,
  1992. UINT nDrawTextAlignFlags,
  1993. const RECT & rcFrame,
  1994. const RECT & rcClient,
  1995. const RECT & rcIcon,
  1996. const RECT & rcText,
  1997. const RECT & rcHelp,
  1998. const RECT & rcMinimize,
  1999. const RECT & rcMaximizeRestore,
  2000. const RECT & rcClose,
  2001. bool bFrameActive,
  2002. bool bFrameEnabled,
  2003. bool bFrameMaximized,
  2004. e_nc_button_state_t eStateButtonHelp,
  2005. e_nc_button_state_t eStateButtonMinimize,
  2006. e_nc_button_state_t eStateButtonMaximizeRestore,
  2007. e_nc_button_state_t eStateButtonClose,
  2008. const CWnd * pWnd,
  2009. LPARAM lParam = 0L
  2010. ) const;
  2011. virtual CRect NcFrame_GetHtRect(
  2012. UINT nHT,
  2013. bool bScreenMapping,
  2014. bool bLayoutBordersH,
  2015. bool bLayoutBordersV,
  2016. const CExtCmdIcon * pIcon,
  2017. const CWnd * pWnd,
  2018. LPMINMAXINFO pMinMaxInfo = NULL,
  2019. LPARAM lParam = 0L
  2020. ) const;
  2021. virtual void NcFrame_GetRects(
  2022. CExtCmdIcon * pIcon,
  2023. __EXT_MFC_SAFE_LPCTSTR strCaption,
  2024. UINT nDrawTextAlignFlags,
  2025. RECT & rcIcon,
  2026. RECT & rcText,
  2027. RECT & rcHelp,
  2028. RECT & rcMinimize,
  2029. RECT & rcMaximizeRestore,
  2030. RECT & rcClose,
  2031. const CWnd * pWnd,
  2032. LPMINMAXINFO pMinMaxInfo = NULL,
  2033. LPARAM lParam = 0L
  2034. ) const;
  2035. virtual bool Bar_MiniDockFrameGetNcMetrics(
  2036. INT & nResizingFrameDX,
  2037. INT & nResizingFrameDY,
  2038. INT & nCaptionDY,
  2039. CExtMiniDockFrameWnd * pMiniFrameWnd,
  2040. CExtControlBar * pBar,
  2041. LPARAM lParam = 0
  2042. ) const;
  2043. virtual bool Bar_MiniDockFrameNcCalcSize(
  2044. RECT & rcAdjust,
  2045. CExtMiniDockFrameWnd * pMiniFrameWnd,
  2046. CExtControlBar * pBar,
  2047. LPARAM lParam = 0
  2048. ) const;
  2049. virtual bool Bar_MiniDockFrameCaptionCalcRect(
  2050. RECT & rcCaption,
  2051. CExtMiniDockFrameWnd * pMiniFrameWnd,
  2052. CExtControlBar * pBar,
  2053. LPARAM lParam = 0
  2054. ) const;
  2055. virtual void PaintResizableBarSeparator(
  2056. CDC & dc,
  2057. const RECT & rc,
  2058. bool bHorz,
  2059. CExtControlBar * pBar,
  2060. LPARAM lParam = 0
  2061. );
  2062. virtual bool Bar_LayoutNcAreaButton(
  2063. RECT & rcButton,
  2064. const RECT & rcCaption,
  2065. CExtBarNcAreaButton * pLayoutBtn,
  2066. CExtBarNcAreaButton * pPrevBtn,
  2067. CObject * pHelperSrc,
  2068. LPARAM lParam = 0L
  2069. ) const;
  2070. virtual CRect Bar_GetCaptionBordersForText(
  2071. CExtControlBar * pBar,
  2072. LPARAM lParam = 0
  2073. ) const;
  2074. virtual INT Bar_SeparatorWidthGet(
  2075. CExtControlBar * pBar,
  2076. LPARAM lParam = 0
  2077. ) const;
  2078. virtual INT Bar_SeparatorHeightGet(
  2079. CExtControlBar * pBar,
  2080. LPARAM lParam = 0
  2081. ) const;
  2082. virtual INT Bar_GripperWidthAtLeftGet(
  2083. CExtControlBar * pBar,
  2084. LPARAM lParam = 0
  2085. ) const;
  2086. virtual INT Bar_GripperHeightAtTopGet(
  2087. CExtControlBar * pBar,
  2088. LPARAM lParam = 0
  2089. ) const;
  2090. virtual HFONT Bar_GetCaptionFont(
  2091. bool bHorz,
  2092. CExtToolControlBar * pBar,
  2093. LPARAM lParam = 0
  2094. );
  2095. virtual CSize Toolbar_GetMinButtonSize(
  2096. CObject * pHelperSrc,
  2097. LPARAM lParam = 0
  2098. );
  2099. virtual void Toolbar_AdjustButtonSize(
  2100. CExtBarButton * pTBB,
  2101. CSize & sizePreCalc
  2102. );
  2103. virtual HFONT Toolbar_GetFont(
  2104. bool bHorz,
  2105. CExtControlBar * pBar,
  2106. LPARAM lParam = 0
  2107. );
  2108. virtual bool Toolbar_GetBGInfo(
  2109. RECT & rcBorders,
  2110. INT & nGripWidthAtLeft,
  2111. INT & nGripHeightAtTop,
  2112. CExtToolControlBar * pBar,
  2113. LPARAM lParam = 0
  2114. ) const;
  2115. virtual bool Toolbar_GetSizeOfCEB(
  2116. SIZE & sizeReal,
  2117. const SIZE & sizePreCalc,
  2118. CDC & dc,
  2119. BOOL bHorz,
  2120. CExtBarContentExpandButton * pTBB,
  2121. LPARAM lParam = 0
  2122. );
  2123. #ifndef __EXT_MFC_NO_STATUSBAR
  2124. virtual bool StatusBar_QuerySkinSupport(
  2125. const CExtStatusControlBar * pStatusBar,
  2126. LPARAM lParam = 0
  2127. ) const;
  2128. virtual bool StatusBar_EraseBackground(
  2129. CDC & dc,
  2130. const RECT & rcClient,
  2131. const CExtStatusControlBar * pStatusBar,
  2132. LPARAM lParam = 0
  2133. ) const;
  2134. virtual bool StatusBar_ErasePaneBackground(
  2135. CDC & dc,
  2136. int nPaneIdx,
  2137. const RECT & rcPane,
  2138. const CExtStatusControlBar * pStatusBar,
  2139. LPARAM lParam = 0
  2140. ) const;
  2141. virtual bool StatusBar_PaintPane(
  2142. CDC & dc,
  2143. int nPaneIdx,
  2144. const RECT & rcPane,
  2145. DWORD dwPaneStyle,
  2146. HICON hIcon,
  2147. __EXT_MFC_SAFE_LPCTSTR sPaneText,
  2148. UINT nDrawTextFlags,
  2149. COLORREF clrText,
  2150. const CExtStatusControlBar * pStatusBar,
  2151. LPARAM lParam = 0
  2152. ) const;
  2153. virtual bool StatusBar_PaintSeparator(
  2154. CDC & dc,
  2155. int nPaneIdxAfterSep,
  2156. const RECT & rcPaneBefore,
  2157. const RECT & rcPaneAfter,
  2158. const CExtStatusControlBar * pStatusBar,
  2159. LPARAM lParam = 0
  2160. ) const;
  2161. #endif // __EXT_MFC_NO_STATUSBAR
  2162. virtual bool AdjustControlFont(
  2163. HFONT & hFont,
  2164. CObject * pHelperSrc,
  2165. LPARAM lParam = 0L
  2166. );
  2167. virtual DLGTEMPLATE * AdjustDialogTemplate(
  2168. const DLGTEMPLATE * lpDialogTemplate,
  2169. CObject * pHelperSrc,
  2170. bool bWizard = false,
  2171. LPARAM lParam = 0L
  2172. );
  2173. virtual HFONT CreateDefaultFont();
  2174. virtual HFONT CreateCaptionFont();
  2175. // init part of color table and system brushes table
  2176. bool m_bUseTahomaFont:1; // uses in SyncSysColors() to re-init font
  2177. virtual void SyncSysColors();
  2178. // get any system color based brush
  2179. virtual HBRUSH GetBrush( int nColorIndex );
  2180. // get any system or translated color value
  2181. virtual COLORREF GetColor(
  2182. int nColorIndex,
  2183. CObject * pHelperSrc = NULL,
  2184. LPARAM lParam = 0L
  2185. );
  2186. COLORREF GetColor(
  2187. int nColorIndex,
  2188. CObject * pHelperSrc = NULL,
  2189. LPARAM lParam = 0L
  2190. ) const;
  2191. virtual COLORREF GetMenuFrameFillColor(
  2192. CObject * pHelperSrc,
  2193. LPARAM lParam = 0L
  2194. );
  2195. virtual COLORREF GetShadowAdjustColor();
  2196. virtual void FixedBar_AdjustClientRect(
  2197. const CExtControlBar * pBar,
  2198. CRect & rcPreCalc
  2199. );
  2200. virtual INT FixedBar_GetRowDistance(
  2201. const CExtToolControlBar * pBar
  2202. );
  2203. virtual bool FixedBar_IsPaintRowBkMode(
  2204. const CExtToolControlBar * pBar
  2205. );
  2206. // install new color
  2207. int InstallColor(
  2208. COLORREF clr,
  2209. int nColorIndex = -1
  2210. );
  2211. // install required translated color as
  2212. // described in e_translated_colors_t enumeration
  2213. virtual void InitTranslatedColors();
  2214. // init lighter/darker 3d-face-like brushes
  2215. virtual void InitHelperBrushes();
  2216. // used always by default used translated colors
  2217. enum e_translated_colors_t
  2218. {
  2219. CLR_3DFACE_OUT = __ExtMfc_COLOR_MAP_BASE + 0,
  2220. CLR_3DFACE_IN = __ExtMfc_COLOR_MAP_BASE + 1,
  2221. CLR_3DFACE_DISABLED = __ExtMfc_COLOR_MAP_BASE + 2,
  2222. CLR_3DLIGHT_OUT = __ExtMfc_COLOR_MAP_BASE + 3,
  2223. CLR_3DLIGHT_IN = __ExtMfc_COLOR_MAP_BASE + 4,
  2224. CLR_3DLIGHT_DISABLED = __ExtMfc_COLOR_MAP_BASE + 5,
  2225. CLR_3DHILIGHT_OUT = __ExtMfc_COLOR_MAP_BASE + 6,
  2226. CLR_3DHILIGHT_IN = __ExtMfc_COLOR_MAP_BASE + 7,
  2227. CLR_3DHILIGHT_DISABLED = __ExtMfc_COLOR_MAP_BASE + 8,
  2228. CLR_3DSHADOW_OUT = __ExtMfc_COLOR_MAP_BASE + 9,
  2229. CLR_3DSHADOW_IN = __ExtMfc_COLOR_MAP_BASE + 10,
  2230. CLR_3DSHADOW_DISABLED = __ExtMfc_COLOR_MAP_BASE + 11,
  2231. CLR_3DDKSHADOW_OUT = __ExtMfc_COLOR_MAP_BASE + 12,
  2232. CLR_3DDKSHADOW_IN = __ExtMfc_COLOR_MAP_BASE + 13,
  2233. CLR_3DDKSHADOW_DISABLED = __ExtMfc_COLOR_MAP_BASE + 14,
  2234. CLR_TEXT_OUT = __ExtMfc_COLOR_MAP_BASE + 15,
  2235. CLR_TEXT_IN = __ExtMfc_COLOR_MAP_BASE + 16,
  2236. CLR_TEXT_DISABLED = __ExtMfc_COLOR_MAP_BASE + 17,
  2237. // Menu text colors
  2238. CLR_MENUTEXT_OUT = __ExtMfc_COLOR_MAP_BASE + 18,
  2239. CLR_MENUTEXT_IN = __ExtMfc_COLOR_MAP_BASE + 19,
  2240. CLR_MENUTEXT_DISABLED = __ExtMfc_COLOR_MAP_BASE + 20,
  2241. // Task Pane colors
  2242. CLR_TASK_PANE_BK_TOP = __ExtMfc_COLOR_MAP_BASE + 21,
  2243. CLR_TASK_PANE_BK_BOTTOM = __ExtMfc_COLOR_MAP_BASE + 22,
  2244. CLR_TASK_PANE_GROUP_CAPTION_TEXT_NORMAL = __ExtMfc_COLOR_MAP_BASE + 23,
  2245. CLR_TASK_PANE_GROUP_CAPTION_TEXT_NORMAL_HOVERED = __ExtMfc_COLOR_MAP_BASE + 24,
  2246. CLR_TASK_PANE_GROUP_CAPTION_TEXT_HIGHLIGHTED = __ExtMfc_COLOR_MAP_BASE + 25,
  2247. CLR_TASK_PANE_GROUP_CAPTION_TEXT_HIGHLIGHTED_HOVERED= __ExtMfc_COLOR_MAP_BASE + 26,
  2248. CLR_TASK_PANE_GROUP_CAPTION_BK_LEFT_NORMAL = __ExtMfc_COLOR_MAP_BASE + 27,
  2249. CLR_TASK_PANE_GROUP_CAPTION_BK_LEFT_HIGHLIGHTED = __ExtMfc_COLOR_MAP_BASE + 28,
  2250. CLR_TASK_PANE_GROUP_CAPTION_BK_RIGHT_NORMAL = __ExtMfc_COLOR_MAP_BASE + 29,
  2251. CLR_TASK_PANE_GROUP_CAPTION_BK_RIGHT_HIGHLIGHTED = __ExtMfc_COLOR_MAP_BASE + 30,
  2252. // Page Navigator colors
  2253. CLR_PN_CAPTION_TEXT = __ExtMfc_COLOR_MAP_BASE + 31,
  2254. // Group Box colors
  2255. CLR_GROUP_BOX_FRAME = __ExtMfc_COLOR_MAP_BASE + 32,
  2256. // Resizable Bar non client area color
  2257. CLR_WRB_FRAME = __ExtMfc_COLOR_MAP_BASE + 33,
  2258. };
  2259. // align types
  2260. enum e_align_t
  2261. {
  2262. __ALIGN_HORIZ_LEFT = 0x00000000L,
  2263. __ALIGN_HORIZ_CENTER = 0x00000001L,
  2264. __ALIGN_HORIZ_RIGHT = 0x00000002L,
  2265. __ALIGN_HORIZ_MASK = 0x00000003L,
  2266. __ALIGN_VERT_TOP = 0x00000004L,
  2267. __ALIGN_VERT_CENTER = 0x00000008L,
  2268. __ALIGN_VERT_BOTTOM = 0x00000010L,
  2269. __ALIGN_VERT_MASK = 0x0000001CL,
  2270. };
  2271. enum e_ButtonFocusMode_t
  2272. {
  2273. __EBFM_CAPTION_AREA = 0x00000000L,
  2274. __EBFM_CLIENT_AREA = 0x00000001L,
  2275. };
  2276. // gets the pushed metic offset
  2277. virtual CSize GetPushedOffset();
  2278. class __PROF_UIS_API glyph_t
  2279. {
  2280. CSize m_size; // size in pixels
  2281. UINT m_nColors; // count of used indexes (including 0)
  2282. // index 0 - transparent
  2283. const UINT * m_pColorIndexes;
  2284. bool m_bDynamicData;
  2285. public:
  2286. glyph_t();
  2287. glyph_t(
  2288. const SIZE & _size,
  2289. UINT nColors,
  2290. const UINT * pColorIndexes
  2291. );
  2292. glyph_t(
  2293. int cx,
  2294. int cy,
  2295. UINT nColors,
  2296. const UINT * pColorIndexes
  2297. );
  2298. glyph_t(
  2299. const glyph_t & other,
  2300. UINT nRotateAngle = 0
  2301. );
  2302. ~glyph_t();
  2303. const glyph_t & operator = ( const glyph_t & other )
  2304. {
  2305. _CopyFromOther(other);
  2306. #ifdef _DEBUG
  2307. if( other.m_pColorIndexes != NULL )
  2308. {
  2309. ASSERT( m_pColorIndexes != NULL );
  2310. ASSERT( m_pColorIndexes != other.m_pColorIndexes );
  2311. ASSERT( m_bDynamicData );
  2312. }
  2313. #endif // _DEBUG
  2314. return *this;
  2315. }
  2316. UINT GetColorPixel(
  2317. int x,
  2318. int y
  2319. ) const;
  2320. void Rotate(UINT nRotateAngle);
  2321. CSize Size() const;
  2322. operator CSize() const
  2323. {
  2324. return Size();
  2325. }
  2326. const UINT * GetSurface() const;
  2327. UINT GetColorsCount() const;
  2328. private:
  2329. void _Init();
  2330. void _Done();
  2331. bool _CopyFromOther( const glyph_t & other );
  2332. void _SetColorPixel(
  2333. int x,
  2334. int y,
  2335. UINT nValue
  2336. );
  2337. public:
  2338. static bool stat_DefGlyphRgnTransparencyFunc(
  2339. const glyph_t & _glyph,
  2340. int x,
  2341. int y,
  2342. UINT nColor,
  2343. LPVOID lpCookie
  2344. );
  2345. CRgn & GenerateRgn(
  2346. CRgn & rgn,
  2347. bool (*pGlyphRgnTransparencyFunc)(
  2348. const glyph_t & _glyph,
  2349. int x,
  2350. int y,
  2351. UINT nColor,
  2352. LPVOID lpCookie
  2353. ) = stat_DefGlyphRgnTransparencyFunc,
  2354. LPVOID lpCallbackCookie = NULL,
  2355. LPLONG pMinNonTransparentX = NULL,
  2356. LPLONG pMinNonTransparentY = NULL,
  2357. LPLONG pMaxNonTransparentX = NULL,
  2358. LPLONG pMaxNonTransparentY = NULL,
  2359. LPLONG pMinTransparentX = NULL,
  2360. LPLONG pMinTransparentY = NULL,
  2361. LPLONG pMaxTransparentX = NULL,
  2362. LPLONG pMaxTransparentY = NULL
  2363. ) const;
  2364. }; // class glyph_t
  2365. static const glyph_t g_glyph_btn_expand_left;
  2366. static const glyph_t g_glyph_btn_expand_right;
  2367. static const glyph_t g_glyph_btn_expand_right2;
  2368. static const glyph_t g_glyph_btn_expand_bottom;
  2369. static const glyph_t g_glyph_btn_expand_bottom2;
  2370. static const glyph_t g_glyph_btn_expand_left_2003;
  2371. static const glyph_t g_glyph_btn_expand_right_2003;
  2372. static const glyph_t g_glyph_btn_expand_right2_2003;
  2373. static const glyph_t g_glyph_btn_expand_bottom_2003;
  2374. static const glyph_t g_glyph_btn_expand_bottom2_2003;
  2375. static const glyph_t g_glyph_customize_popup_src;
  2376. static const glyph_t g_glyph_customize_dropdown_src;
  2377. static const glyph_t g_glyph_task_pane_btn_expand_up;
  2378. static const glyph_t g_glyph_task_pane_btn_expand_down;
  2379. static const BYTE g_arrWinXpTreeBoxCollapsedBmpData_small[];
  2380. static const BYTE g_arrWinXpTreeBoxExpandedBmpData_small[];
  2381. static const BYTE g_arrWinXpTreeBoxCollapsedBmpData_big[];
  2382. static const BYTE g_arrWinXpTreeBoxExpandedBmpData_big[];
  2383. virtual void LoadWinXpTreeBox(
  2384. CExtCmdIcon & _icon,
  2385. bool bExpanded,
  2386. bool bBig = false
  2387. );
  2388. virtual void PaintGlyph(
  2389. CDC & dc,
  2390. POINT ptDest,
  2391. const glyph_t & glyph,
  2392. COLORREF * pColorValues
  2393. );
  2394. virtual void PaintGlyphCentered(
  2395. CDC & dc,
  2396. const RECT & rect,
  2397. const glyph_t & glyph,
  2398. COLORREF * pColorValues
  2399. );
  2400. virtual void PaintFloatToolbarRowBk(
  2401. CDC & dc,
  2402. const CExtToolControlBar * pBar,
  2403. int nLastReviewBtnIdx,
  2404. CRect & rcRowBk
  2405. );
  2406. virtual void PaintToolbarExpandButton(
  2407. CDC & dc,
  2408. const RECT & rcButtonArea,
  2409. bool bHorz, // if false - down
  2410. bool bBarIsCompletelyVisible,
  2411. bool bEnabled,
  2412. bool bPushed,
  2413. bool bHover,
  2414. CObject * pHelperSrc,
  2415. LPARAM lParam = 0L,
  2416. bool bTransparentBackground = false
  2417. );
  2418. virtual void PaintMenuExpandButton(
  2419. CDC & dc,
  2420. const RECT & rectButton,
  2421. bool bPushed,
  2422. bool bHover,
  2423. CObject * pHelperSrc,
  2424. LPARAM lParam = 0L
  2425. );
  2426. virtual void PaintMenuScrollButton(
  2427. CDC & dc,
  2428. bool bHover,
  2429. bool bPushed,
  2430. bool bTopButton,
  2431. const RECT & rcScrollButton,
  2432. CObject * pHelperSrc,
  2433. LPARAM lParam = 0L
  2434. );
  2435. virtual void PaintMenuTearOffButton(
  2436. CDC & dc,
  2437. const RECT & rectButton,
  2438. bool bPushed,
  2439. bool bHover,
  2440. CObject * pHelperSrc,
  2441. LPARAM lParam = 0L
  2442. );
  2443. virtual int GetMenuExpandButtonHeight();
  2444. // statically implemented paint/helper algorithms
  2445. static DWORD stat_DllGetVersion( __EXT_MFC_SAFE_LPCTSTR lpszDllName );
  2446. static HBITMAP stat_GetScreenSurfacePart(
  2447. const RECT & rcScreenSurfacePart,
  2448. COLORREF ** ppClrSurface = NULL
  2449. );
  2450. static HBITMAP stat_PrintWnd(
  2451. HWND hWnd,
  2452. UINT nMessage = WM_PRINTCLIENT,
  2453. LPARAM lParamPrint = PRF_NONCLIENT|PRF_CLIENT|PRF_ERASEBKGND|PRF_CHILDREN,
  2454. HDC hSrcDC = NULL,
  2455. const RECT * pRectFillSrc = NULL
  2456. );
  2457. static void stat_PrintChildren(
  2458. HWND hWndStart,
  2459. UINT nMessage,
  2460. HDC hDC,
  2461. LPARAM lParamPrint,
  2462. bool bDeepTreeWalk = true,
  2463. CObject * pHelperSrc = NULL,
  2464. LPARAM lParam = 0L
  2465. );
  2466. static LONG stat_PassPaintMessages(
  2467. HWND hWnd,
  2468. bool bPassNcPaint = true,
  2469. bool bPassEraseBkgnd = true,
  2470. bool bPassPaint = true
  2471. );
  2472. static LONG stat_PassPaintMessages(
  2473. bool bPassNcPaint = true,
  2474. bool bPassEraseBkgnd = true,
  2475. bool bPassPaint = true
  2476. );
  2477. #if (defined __EXT_PM_BACK_COMPATIBILITY_BITMAP_API)
  2478. static bool stat_ResizeBitmap(
  2479. CBitmap & bmpSrc,
  2480. CSize _size,
  2481. CBrush & brushFill
  2482. );
  2483. static HICON stat_HBITMAPtoHICON(
  2484. HBITMAP hBmpSrc,
  2485. COLORREF clrTransparent,
  2486. const RECT * pRcPart = NULL,
  2487. bool bReplaceSysColors = true
  2488. );
  2489. static bool stat_CloneBitmap(
  2490. CBitmap & bmpDst,
  2491. const CBitmap & bmpSrc,
  2492. const RECT * pRcPart = NULL,
  2493. COLORREF ** ppSurface = NULL // if not NULL - create 32 bit surface
  2494. );
  2495. static HBITMAP stat_CloneBitmap(
  2496. HBITMAP hBmpSrc,
  2497. const RECT * pRcPart = NULL,
  2498. COLORREF ** ppSurface = NULL // if not NULL - create 32 bit surface
  2499. );
  2500. static INT stat_GetBitmapColorMap( // returns bitmap's color bit count or zero if error
  2501. HBITMAP hBmpSrc,
  2502. CMap < COLORREF, COLORREF, DWORD, DWORD > & _map // key is color, value is count of color entries in bitmap
  2503. );
  2504. static INT stat_GetBitmapColorArray( // returns bitmap's color bit count or zero if error
  2505. HBITMAP hBmpSrc,
  2506. CArray < COLORREF, COLORREF > & arr,
  2507. bool bMakeUniqueColors = true // used only if bit count <= 8
  2508. );
  2509. static HGLOBAL stat_HBITMAPtoHGLOBAL(
  2510. HBITMAP hBmpSrc,
  2511. HPALETTE hPalDst = NULL
  2512. );
  2513. static HBITMAP stat_LoadBitmapFromMemoryData(
  2514. const BYTE * pDataBmp,
  2515. DWORD dwSizeDataBmp
  2516. );
  2517. static bool stat_SerializeBitmap(
  2518. CArchive & ar,
  2519. HBITMAP * p_hBmp,
  2520. DWORD dwResourceSize = 0L // not 0 only if loaded from resources
  2521. );
  2522. static bool stat_SerializeBitmap(
  2523. __EXT_MFC_SAFE_LPCTSTR strFileName,
  2524. bool bRead,
  2525. HBITMAP * p_hBmp
  2526. );
  2527. static HBITMAP stat_LoadBitmapResource(
  2528. HINSTANCE hInst,
  2529. HRSRC hRsrc
  2530. );
  2531. static HBITMAP stat_LoadBitmapResource(
  2532. __EXT_MFC_SAFE_LPCTSTR sResourceID,
  2533. __EXT_MFC_SAFE_LPCTSTR sResourceType = RT_BITMAP, // default bitmap section
  2534. HINSTANCE hInst = NULL // find it automatically
  2535. );
  2536. #endif // (defined __EXT_PM_BACK_COMPATIBILITY_BITMAP_API)
  2537. struct monitor_parms_t
  2538. {
  2539. CRect m_rcMonitor, m_rcWorkArea;
  2540. bool m_bPrimaryMonitor:1;
  2541. monitor_parms_t()
  2542. : m_rcMonitor( 0, 0, 0, 0 )
  2543. , m_rcWorkArea( 0, 0, 0, 0 )
  2544. , m_bPrimaryMonitor( true )
  2545. {
  2546. }
  2547. }; // struct monitor_parms_t
  2548. static void stat_GetMonitorParms(
  2549. monitor_parms_t & _mp
  2550. );
  2551. static void stat_GetMonitorParms(
  2552. monitor_parms_t & _mp,
  2553. const POINT & _ptScreenFrom
  2554. );
  2555. static void stat_GetMonitorParms(
  2556. monitor_parms_t & _mp,
  2557. const RECT & _rcScreenFrom
  2558. );
  2559. static void stat_GetMonitorParms(
  2560. monitor_parms_t & _mp,
  2561. HWND hWndFrom
  2562. );
  2563. static void stat_GetMonitorParms(
  2564. monitor_parms_t & _mp,
  2565. CWnd * pWndFrom
  2566. );
  2567. static CRect stat_AlignWndRectToMonitor(
  2568. CRect rcInitial,
  2569. bool bUseWorkArea = true, // if false - use all monitor area
  2570. bool bNoPartialVisibility = false
  2571. );
  2572. static void stat_DrawDotLineH(
  2573. CDC & dc,
  2574. int x1,
  2575. int x2,
  2576. int y,
  2577. COLORREF clrDots
  2578. );
  2579. static void stat_DrawDotLineV(
  2580. CDC & dc,
  2581. int x,
  2582. int y1,
  2583. int y2,
  2584. COLORREF clrDots
  2585. );
  2586. #if (defined __EXT_PM_BACK_COMPATIBILITY_COLOR_API)
  2587. static COLORREF stat_RGBtoCMY( COLORREF clr );
  2588. static COLORREF stat_CMYtoRGB( COLORREF clr );
  2589. //----------------------------------------------------------------------
  2590. // Conversion between the HSL (Hue, Saturation, and Luminosity) 
  2591. // and RBG color model.
  2592. //----------------------------------------------------------------------
  2593. // The conversion algorithms presented here come from the book by 
  2594. // Fundamentals of Interactive Computer Graphics by Foley and van Dam. 
  2595. // In the example code, HSL values are represented as floating point 
  2596. // number in the range 0 to 1. RGB tridrants use the Windows convention 
  2597. // of 0 to 255 of each element. 
  2598. //----------------------------------------------------------------------
  2599. static double stat_HuetoRGB(double m1, double m2, double h );
  2600. static COLORREF stat_HLStoRGB( double H, double L, double S );
  2601. static void stat_RGBtoHSL( COLORREF rgb, double *H, double *S, double *L );
  2602. static BYTE stat_GetRGBFromHue(float rm1, float rm2, float rh);
  2603. static COLORREF stat_GetRGBFromHLSExtend( double H, double L, double S );
  2604. static COLORREF stat_HLS_Adjust(
  2605. COLORREF clr,
  2606. double percentH = 0.0,
  2607. double percentL = 0.0,
  2608. double percentS = 0.0
  2609. );
  2610. static COLORREF stat_RGB_Enlight( 
  2611. COLORREF clrLight, 
  2612. COLORREF clrDark, 
  2613. INT nEnlighten
  2614. );
  2615. static COLORREF stat_RGB_Blend( 
  2616. COLORREF clrFrom, 
  2617. COLORREF clrTo, 
  2618. INT nAlpha
  2619. );
  2620. #endif // (defined __EXT_PM_BACK_COMPATIBILITY_COLOR_API)
  2621. static BOOL stat_PaintParentBk(
  2622. HWND hWnd,
  2623. HDC hDC,
  2624. LPCRECT rectClip = NULL
  2625. );
  2626. typedef bool (*pfnExcludeChildAreaCallback)(
  2627. HDC hDC,
  2628. HWND hWnd,
  2629. HWND hWndChild,
  2630. LPVOID pCookie
  2631. );
  2632. static void stat_ExcludeChildAreas(
  2633. HDC hDC,
  2634. HWND hWnd,
  2635. pfnExcludeChildAreaCallback pCallback = NULL,
  2636. LPVOID pCallbackCookie = NULL
  2637. );
  2638. static void stat_TransparentBlt(
  2639. HDC hdcDest,        // handle to destination DC
  2640. int nXOriginDest,   // x-coord of destination upper-left corner
  2641. int nYOriginDest,   // y-coord of destination upper-left corner
  2642. int nWidthDest,     // width of destination rectangle
  2643. int hHeightDest,    // height of destination rectangle
  2644. HDC hdcSrc,         // handle to source DC
  2645. int nXOriginSrc,    // x-coord of source upper-left corner
  2646. int nYOriginSrc,    // y-coord of source upper-left corner
  2647. int nWidthSrc,      // width of source rectangle
  2648. int nHeightSrc,     // height of source rectangle
  2649. UINT crTransparent  // color to make transparent
  2650. );
  2651. // generate DIB for UI light brush (when BPP <=8)
  2652. static HBITMAP stat_GenLBDIB(
  2653. COLORREF clrDarker = COLORREF(-1), // by default COLORREF(-1) is changed to ::GetSysColor(COLOR_BTNFACE)
  2654. COLORREF clrLighter = COLORREF(-1), // by default COLORREF(-1) is changed to ::GetSysColor(COLOR_BTNHIGHLIGHT)
  2655. int nColorMaskHorz = 1,
  2656. int nColorMaskVert = 1,
  2657. int nSkipMaskHorz = 0,
  2658. int nSkipMaskVert = 0,
  2659. COLORREF clrSkip = COLORREF(-1L) // // default COLORREF(-1) is changed to clrDarker
  2660. );
  2661. static void stat_PaintGradientRect(
  2662. CDC & dc,
  2663. const CRect & rcPaintGradient,
  2664. COLORREF clrLeft,
  2665. COLORREF clrRight,
  2666. bool bHorz = false,
  2667. UINT nCountOfSteps = 256
  2668. );
  2669. static void stat_PaintGradientRect2steps(
  2670. CDC & dc,
  2671. const CRect & rcPaintGradient,
  2672. COLORREF clrLeft,
  2673. COLORREF clrMiddle,
  2674. COLORREF clrRight,
  2675. bool bHorz = false,
  2676. INT nNumerator = 2,
  2677. INT nDenominator = 5,
  2678. UINT nCountOfSteps = 256
  2679. );
  2680. static void stat_PaintDotNet3dRect(
  2681. CDC & dc,
  2682. LPCRECT lpRect,
  2683. COLORREF clrTopLeft,
  2684. COLORREF clrBottomRight
  2685. );
  2686. static void stat_PaintDotNet3dRect(
  2687. CDC & dc,
  2688. int x,
  2689. int y,
  2690. int cx,
  2691. int cy,
  2692. COLORREF clrTopLeft,
  2693. COLORREF clrBottomRight
  2694. );
  2695. static void stat_PaintRadioDot( CDC & dc, int x, int y, COLORREF color );
  2696. static void stat_PaintIndeterminatedSquare( CDC & dc, int x, int y, COLORREF color );
  2697. static void stat_PaintCheckMark( CDC & dc, int x, int y, COLORREF color );
  2698. #if (!defined __EXT_MFC_NO_TAB_CTRL)
  2699. static void stat_PaintTabItemImpl(
  2700. CDC & dc,
  2701. CRect & rcTabItemsArea,
  2702. bool bTopLeft,
  2703. bool bHorz,
  2704. bool bSelected,
  2705. bool bEnabled,
  2706. bool bCenteredText,
  2707. bool bGroupedMode,
  2708. bool bInGroupActive,
  2709. bool bInvertedVerticalMode,
  2710. bool bDrawIcon,
  2711. const CRect & rcEntireItem,
  2712. CSize sizeTextMeasured,
  2713. CFont * pFont,
  2714. __EXT_MFC_SAFE_LPCTSTR sText,
  2715. bool bNoPrefix,
  2716. CExtCmdIcon * pIcon,
  2717. CExtCmdIcon * pIconTabItemCloseButton,
  2718. INT nPaintStateITICB,
  2719. CRect & rcTabItemCloseButton,
  2720. COLORREF clrText,
  2721. COLORREF clrTabBk,
  2722. COLORREF clrTabBorderLT,
  2723. COLORREF clrTabBorderRB,
  2724. COLORREF clrTabSeparator,
  2725. bool bEnableEndEllipsis = true,
  2726. CObject * pHelperSrc = NULL,
  2727. bool bDwmMode = false
  2728. );
  2729. static void stat_PaintTabButtonImpl(
  2730. CDC & dc,
  2731. CRect & rcButton,
  2732. LONG nHitTest,
  2733. bool bTopLeft,
  2734. bool bHorz,
  2735. bool bEnabled,
  2736. bool bHover,
  2737. bool bPushed,
  2738. bool bGroupedMode,
  2739. COLORREF clrGlyph,
  2740. COLORREF clrTL,
  2741. COLORREF clrBR,
  2742. bool bFlat = false
  2743. );
  2744. static void stat_PaintTabClientAreaImpl(
  2745. CDC & dc,
  2746. CRect & rcClient,
  2747. CRect & rcTabItemsArea,
  2748. CRect & rcTabNearBorderArea,
  2749. DWORD dwOrientation,
  2750. bool bGroupedMode,
  2751. COLORREF clrTabItemsAreaBk,
  2752. COLORREF clrTabNearBorderAreaBk,
  2753. COLORREF clrTabNearMargin
  2754. );
  2755. virtual void GetThemeAccentTabColors(
  2756. COLORREF * pClrSetectedTabItemText,
  2757. COLORREF * pClrSetectedTabItemFace = NULL,
  2758. COLORREF * pClrSetectedTabItemBorderLight = NULL,
  2759. COLORREF * pClrSetectedTabItemBorderDark = NULL,
  2760. CObject * pHelperSrc = NULL,
  2761. LPARAM lParam = 0L
  2762. );
  2763. virtual void PaintTabItem(
  2764. CDC & dc,
  2765. CRect & rcTabItemsArea,
  2766. bool bTopLeft,
  2767. bool bHorz,
  2768. bool bSelected,
  2769. bool bCenteredText,
  2770. bool bGroupedMode,
  2771. bool bInGroupActive,
  2772. bool bInvertedVerticalMode,
  2773. const CRect & rcEntireItem,
  2774. CSize sizeTextMeasured,
  2775. CFont * pFont,
  2776. __EXT_MFC_SAFE_LPCTSTR sText,
  2777. CExtCmdIcon * pIcon,
  2778. CObject * pHelperSrc,
  2779. LPARAM lParam = 0L,
  2780. COLORREF clrForceText = COLORREF(-1L),
  2781. COLORREF clrForceTabBk = COLORREF(-1L),
  2782. COLORREF clrForceTabBorderLT = COLORREF(-1L),
  2783. COLORREF clrForceTabBorderRB = COLORREF(-1L),
  2784. COLORREF clrForceTabSeparator = COLORREF(-1L),
  2785. bool bDwmMode = false
  2786. );
  2787. virtual bool QueryTabWndHoverChangingRedraw(
  2788. const CExtTabWnd * pWndTab,
  2789. LPARAM lParam = 0L
  2790. );
  2791. virtual void PaintTabClientArea(
  2792. CDC & dc,
  2793. CRect & rcClient,
  2794. CRect & rcTabItemsArea,
  2795. CRect & rcTabNearBorderArea,
  2796. DWORD dwOrientation,
  2797. bool bGroupedMode,
  2798. CObject * pHelperSrc,