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

对话框与窗口

开发平台:

Visual C++

  1. // XTPSkinManager.h: interface for the CXTPSkinManager class.
  2. //
  3. // This file is a part of the XTREME SKINFRAMEWORK MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPSKINMANAGER_H__)
  22. #define __XTPSKINMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "Common/XTPWinThemeWrapper.h"
  28. #include "Common/XTPColorManager.h"
  29. #include "XTPSkinManagerSchema.h"
  30. #include "XTPSkinObject.h"
  31. #include "XTPSkinManagerColorFilter.h"
  32. //-----------------------------------------------------------------------
  33. // Summary:
  34. //     Apply options of selected skin
  35. // Example:
  36. // <code>
  37. // XTPSkinManager()->SetApplyOptions(xtpSkinApplyMetrics | xtpSkinApplyFrame | xtpSkinApplyColors);
  38. // </code>
  39. // See Also:
  40. //     CXTPSkinManager, CXTPSkinManager::SetApplyOptions
  41. //
  42. // <KEYWORDS xtpSkinApplyMetrics, xtpSkinApplyFrame, xtpSkinApplyColors>
  43. //-----------------------------------------------------------------------
  44. enum XTPSkinApplyOptions
  45. {
  46. xtpSkinApplyMetrics     = 1,    // TRUE to apply frame metrics (Caption height/font, scrollbars width/with, etc)
  47. xtpSkinApplyFrame       = 2,    // TRUE to apply frame skins.
  48. xtpSkinApplyColors      = 4     // TRUE to use skin colors.
  49. };
  50. class CXTPSkinManager;
  51. class CXTPSkinManagerSchema;
  52. class CXTPSkinImages;
  53. class CXTPSkinObject;
  54. //===========================================================================
  55. // Summary:
  56. //     CXTPSkinManagerClass is a standalone class that represents a
  57. //     single visual class of skin manager.
  58. //===========================================================================
  59. class _XTP_EXT_CLASS CXTPSkinManagerClass
  60. {
  61. protected:
  62. //-----------------------------------------------------------------------
  63. // Summary:
  64. //     Constructs a CXTPSkinManagerClass object.
  65. // Parameters:
  66. //     pManager - Parent skin manager class.
  67. //-----------------------------------------------------------------------
  68. CXTPSkinManagerClass(CXTPSkinManager* pManager);
  69. //-----------------------------------------------------------------------
  70. // Summary:
  71. //     Destroys a CXTPSkinManagerClass object, handles cleanup and deallocation.
  72. //-----------------------------------------------------------------------
  73. virtual ~CXTPSkinManagerClass();
  74. public:
  75. //-----------------------------------------------------------------------
  76. // Summary:
  77. //     Get the value for the specified string property
  78. // Parameters:
  79. //     iPartId     - Part number
  80. //     iStateId    - State number of part
  81. //     iPropId     - The property number to get the value for
  82. //     lpszDefault - Default value
  83. // Returns:
  84. //     CString value for the specified string property
  85. //-----------------------------------------------------------------------
  86. CString GetThemeString(int iPartId, int iStateId, int iPropId, LPCTSTR lpszDefault = NULL);
  87. //-----------------------------------------------------------------------
  88. // Summary:
  89. //     Get the value for the specified RECT property
  90. // Parameters:
  91. //     iPartId    - Part number
  92. //     iStateId   - State number of part
  93. //     iPropId    - The property number to get the value for
  94. //     rcDefault  - Default value
  95. // Returns:
  96. //     CRect value for the specified RECT property
  97. //-----------------------------------------------------------------------
  98. CRect GetThemeRect(int iPartId, int iStateId, int iPropId, CRect rcDefault = CRect(0, 0, 0, 0));
  99. //-----------------------------------------------------------------------
  100. // Summary:
  101. //     Get the value for the specified int property
  102. // Parameters:
  103. //     iPartId    - Part number
  104. //     iStateId   - State number of part
  105. //     iPropId    - The property number to get the value for
  106. //     nDefault   - Default value
  107. // Returns:
  108. //     int value for the specified property
  109. //-----------------------------------------------------------------------
  110. int GetThemeInt(int iPartId, int iStateId, int iPropId, int nDefault = 0);
  111. //-----------------------------------------------------------------------
  112. // Summary:
  113. //     Get the value for the specified Size property
  114. // Parameters:
  115. //     iPartId    - Part number
  116. //     iStateId   - State number of part
  117. //     iPropId    - The property number to get the value for
  118. //     szDefault  - Default value
  119. // Returns:
  120. //     CSize value for the specified property
  121. //-----------------------------------------------------------------------
  122. CSize GetThemeSize(int iPartId, int iStateId, int iPropId, CSize szDefault = CSize(0));
  123. //-----------------------------------------------------------------------
  124. // Summary:
  125. //     Get the value for the specified BOOL property
  126. // Parameters:
  127. //     iPartId    - Part number
  128. //     iStateId   - State number of part
  129. //     iPropId    - The property number to get the value for
  130. //     bDefault  - Default value
  131. // Returns:
  132. //     BOOL value for the specified property
  133. //-----------------------------------------------------------------------
  134. BOOL GetThemeBool(int iPartId, int iStateId, int iPropId, BOOL bDefault = FALSE);
  135. //-----------------------------------------------------------------------
  136. // Summary:
  137. //     Get the value for the specified color property
  138. // Parameters:
  139. //     iPartId    - Part number
  140. //     iStateId   - State number of part
  141. //     iPropId    - The property number to get the value for
  142. //     clrDefault - Default value
  143. // Returns:
  144. //     COLORREF value for the specified property
  145. //-----------------------------------------------------------------------
  146. COLORREF GetThemeColor(int iPartId, int iStateId, int iPropId, COLORREF clrDefault = COLORREF_NULL);
  147. //-----------------------------------------------------------------------
  148. // Summary:
  149. //     Get the value for the specified ENUM property
  150. // Parameters:
  151. //     iPartId    - Part number
  152. //     iStateId   - State number of part
  153. //     iPropId    - The property number to get the value for
  154. //     nDefault - Default value
  155. // Returns:
  156. //     int value for the specified property
  157. //-----------------------------------------------------------------------
  158. int GetThemeEnumValue(int iPartId, int iStateId, int iPropId, int nDefault = 0);
  159. //-----------------------------------------------------------------------
  160. // Summary:
  161. //     Returns the specified size of the theme part
  162. // Parameters:
  163. //     iPartId    - Part number to retrieve size for
  164. //     iStateId   - State number of part
  165. //     pRect      - rect for part drawing destination
  166. //     eSize      - the type of size to be retrieved
  167. //     pSize      - receives the specified size of the part
  168. // Returns:
  169. //     TRUE if successful, otherwise returns FALSE.
  170. //-----------------------------------------------------------------------
  171. BOOL GetThemePartSize(int iPartId, int iStateId, RECT *pRect, THEMESIZE eSize, SIZE* pSize);
  172. public:
  173. //-----------------------------------------------------------------------
  174. // Summary:
  175. //     Draws the background image defined by the visual style for the specified control part.
  176. // Parameters:
  177. //     pDC      - Pointer to valid device context
  178. //     iPartId  - Value of type int that specifies the part to draw
  179. //     iStateId - Value of type int that specifies the state of the part to draw.
  180. //     pRect    - Pointer to a RECT structure that contains the rectangle,
  181. //                in logical coordinates, in which the background image is drawn.
  182. // Returns:
  183. //     Returns TRUE if successful, FALSE otherwise.
  184. //-----------------------------------------------------------------------
  185. BOOL DrawThemeBackground(CDC* pDC, int iPartId, int iStateId, const RECT *pRect);
  186. //-----------------------------------------------------------------------
  187. // Summary:
  188. //     Draws text using the color and font defined by the visual style.
  189. // Parameters:
  190. //     pDC      - Pointer to valid device context
  191. //     iPartId  - Value of type int that specifies the part that contains the text.
  192. //     iStateId - Value of type int that specifies the state of the part to draw.
  193. //     strText  - String that contains the text to draw.
  194. //     dwFormat - DWORD that contains one or more values that specify the string's formatting.
  195. //     pRect    - Pointer to a RECT structure that contains the rectangle,
  196. //                in logical coordinates, in which the text is to be drawn.
  197. // Returns:
  198. //     Returns TRUE if successful, FALSE otherwise.
  199. //-----------------------------------------------------------------------
  200. BOOL DrawThemeText(CDC* pDC, int iPartId, int iStateId, const CString& strText, DWORD dwFormat, const RECT *pRect);
  201. //-----------------------------------------------------------------------
  202. // Summary:
  203. //     Retrieves image collection of the class
  204. // Returns:
  205. //     Pointer to image collection of the class.
  206. //-----------------------------------------------------------------------
  207. CXTPSkinImages* GetImages() const;
  208. //-----------------------------------------------------------------------
  209. // Summary:
  210. //     Retrieves hash value of class name
  211. // Returns:
  212. //     Hash value of class name
  213. //-----------------------------------------------------------------------
  214. int GetClassCode() const;
  215. //-----------------------------------------------------------------------
  216. // Summary:
  217. //     Retrieves class name
  218. // Returns:
  219. //     CString value contained class name
  220. //-----------------------------------------------------------------------
  221. CString GetClassName() const;
  222. protected:
  223. //-----------------------------------------------------------------------
  224. // Summary:
  225. //     Returns property value for specified part and state
  226. // Parameters:
  227. //     propType   - Property type
  228. //     iPartId    - Part number to retrieve size for
  229. //     iStateId   - State number of part
  230. //     iPropId    - The property number to get the value for
  231. // Returns:
  232. //     Returns CXTPSkinManagerSchemaProperty class contained value of the property
  233. // See Also:
  234. //     XTPSkinManagerProperty, CXTPSkinManagerSchemaProperty
  235. //-----------------------------------------------------------------------
  236. CXTPSkinManagerSchemaProperty* GetProperty(XTPSkinManagerProperty propType, int iPartId, int iStateId, int iPropId);
  237. protected:
  238. CXTPSkinManager* m_pManager;    // Parent CXTPSkinManager object.
  239. CString m_strClass;             // Class name
  240. UINT m_nClassCode;              // Hashed value of class name
  241. CXTPSkinImages* m_pImages;      // Image collection
  242. CMap<UINT, UINT, CXTPSkinManagerSchemaProperty*, CXTPSkinManagerSchemaProperty*> m_mapCachedProperties; // Cached collection of class properties
  243. friend class CXTPSkinManager;
  244. };
  245. #define XTP_SKINMETRICS_COLORTABLESIZE 31
  246. //===========================================================================
  247. // Summary:
  248. //     CXTPSkinManagerMetrics is a standalone class that represents a
  249. //     collection of metrics of the current skin
  250. //===========================================================================
  251. class _XTP_EXT_CLASS CXTPSkinManagerMetrics
  252. {
  253. public:
  254. //-----------------------------------------------------------------------
  255. // Summary:
  256. //     Constructs a CXTPSkinManagerMetrics object.
  257. // Parameters:
  258. //     pManager - Parent skin manager class.
  259. //-----------------------------------------------------------------------
  260. CXTPSkinManagerMetrics(CXTPSkinManager* pManager);
  261. //-----------------------------------------------------------------------
  262. // Summary:
  263. //     Destroys a CXTPSkinManagerMetrics object, handles cleanup and deallocation.
  264. //-----------------------------------------------------------------------
  265. virtual ~CXTPSkinManagerMetrics();
  266. public:
  267. //-----------------------------------------------------------------------
  268. // Summary:
  269. //     This method is called to refresh visual metrics.
  270. //-----------------------------------------------------------------------
  271. virtual void RefreshMetrics();
  272. BOOL IsMetricObject(HGDIOBJ hObject) const;
  273. void DestroyMetrics();
  274. COLORREF GetColor(int nIndex) const;
  275. public:
  276. CFont m_fntCaption;             // Caption font
  277. CFont m_fntMenu;                // Menu font
  278. CFont m_fntSmCaption;           // Small caption font
  279. CXTPSkinManager* m_pManager;    // Parent CXTPSkinManager object
  280. HBRUSH m_brushDialog;           // Dialog brush
  281. HBRUSH m_brushTabControl;       // Tab Control brush;
  282. COLORREF m_clrEdgeLight;        // Light edge color
  283. COLORREF m_clrEdgeHighLight;    // HighLight edge color
  284. COLORREF m_clrEdgeShadow;       // Shadow edge color
  285. COLORREF m_clrEdgeDkShadow;     // Dark shadow edge color
  286. COLORREF m_clrTheme[XTP_SKINMETRICS_COLORTABLESIZE];        // Colors of the theme
  287. HBRUSH m_brTheme[XTP_SKINMETRICS_COLORTABLESIZE];           // Brushes of the theme
  288. int m_nBorderSize;              // Border size
  289. int m_cxBorder;                 // SM_CXBORDER system metric
  290. int m_cyBorder;                 // SM_CYBORDER system metric
  291. int m_cxEdge;                   // SM_CXEDGE system metric
  292. int m_cyEdge;                   // SM_CYEDGE system metric
  293. int m_cxHScroll;                // SM_CXHSCROLL system metric
  294. int m_cyHScroll;                // SM_CYHSCROLL system metric
  295. int m_cxVScroll;                // SM_CXVSCROLL system metric
  296. int m_cyVScroll;                // SM_CYVSCROLL system metric
  297. int m_cyCaption;                // Height of captions
  298. int m_cySmallCaption;           // Height of small captions
  299. int m_cyOsCaption;              // System caption height
  300. int m_cyOsSmallCaption;         // System small caption height
  301. };
  302. //===========================================================================
  303. // Summary:
  304. //     CXTPSkinManager is a standalone class that represents a
  305. //     global object managing skins.
  306. //===========================================================================
  307. class _XTP_EXT_CLASS CXTPSkinManager
  308. {
  309. private:
  310. DECLARE_HANDLE(HWINEVENTHOOK);
  311. typedef void (CALLBACK* WINEVENTPROC) ( HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD idEventThread, DWORD dwmsEventTime);
  312. typedef HWINEVENTHOOK (WINAPI* LPFNSETWINEVENTHOOK)(UINT eventMin, UINT eventMax, HMODULE hmodWinEventProc,
  313. WINEVENTPROC lpfnWinEventProc, DWORD idProcess, DWORD idThread, UINT dwflags);
  314. typedef BOOL (WINAPI* LPFNUNHOOKWINEVENT)(HWINEVENTHOOK hWinEventHook);
  315. protected:
  316. //-----------------------------------------------------------------------
  317. // Summary:
  318. //     Constructs a CXTPSkinManager object.
  319. //-----------------------------------------------------------------------
  320. CXTPSkinManager();
  321. public:
  322. //-----------------------------------------------------------------------
  323. // Summary:
  324. //     Destroys a CXTPSkinManager object, handles cleanup and deallocation.
  325. //-----------------------------------------------------------------------
  326. virtual ~CXTPSkinManager();
  327. public:
  328. //-----------------------------------------------------------------------
  329. // Summary:
  330. //     Loads skin from cjstyles or msstyles file.
  331. // Parameters:
  332. //     lpszResourcePath - Path to skin file
  333. //     lpszIniFileName - Ini file of skin to load
  334. // Returns:
  335. //     TRUE if successful; otherwise returns FALSE
  336. //-----------------------------------------------------------------------
  337. BOOL LoadSkin(LPCTSTR lpszResourcePath, LPCTSTR lpszIniFileName = NULL);
  338. public:
  339. //-----------------------------------------------------------------------
  340. // Summary:
  341. //     Retrieves what parts of application skin must apply.
  342. // Returns:
  343. //     One or more of XTPSkinApplyOptions values
  344. // See Also: XTPSkinApplyOptions, SetApplyOptions
  345. //-----------------------------------------------------------------------
  346. DWORD GetApplyOptions() const;
  347. //-----------------------------------------------------------------------
  348. // Summary:
  349. //     Call this method to set what parts of application skin must apply.
  350. // Parameters:
  351. //     dwOptions - combined by using the bitwise OR (|) operator of following:
  352. //         * <b>xtpSkinApplyMetrics</b> To apply skin metrics (caption height, scroll bar with, etc)
  353. //         * <b>xtpSkinApplyFrame</b> To apply window frames.
  354. // See Also: XTPSkinApplyOptions, GetApplyOptions
  355. //-----------------------------------------------------------------------
  356. void SetApplyOptions(DWORD dwOptions);
  357. //-----------------------------------------------------------------------
  358. // Summary:
  359. //     Call this method to manually set window which appearance must be skinned.
  360. // Parameters:
  361. //     hWnd - Handle of window which appearance must be skinned.
  362. //-----------------------------------------------------------------------
  363. void ApplyWindow(HWND hWnd);
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //     Call this method to enable/disable automatically apply each new window with current skin
  367. // Parameters:
  368. //     bAutoApply - TRUE to automatically apply each new window.
  369. //-----------------------------------------------------------------------
  370. void SetAutoApplyNewWindows(BOOL bAutoApply);
  371. //-----------------------------------------------------------------------
  372. // Summary:
  373. //     Determines if all new windows will be automatically skinned
  374. //-----------------------------------------------------------------------
  375. BOOL GetAutoApplyNewWindows() const;
  376. //-----------------------------------------------------------------------
  377. // Summary:
  378. //     Call this method to set custom skin manager class
  379. // Parameters:
  380. //     pSkinManager - new skin manager to be set
  381. // Example:
  382. // <code>CXTPSkinManager::SetSkinManager(new CMySkinManager());</code>
  383. //-----------------------------------------------------------------------
  384. static void AFX_CDECL SetSkinManager(CXTPSkinManager* pSkinManager);
  385. //-----------------------------------------------------------------------
  386. // Summary:
  387. //     Exclude some dll from API hooking
  388. // Parameters:
  389. //     lpszModule - File name to exclude
  390. //-----------------------------------------------------------------------
  391. void ExcludeModule(LPCTSTR lpszModule);
  392. public:
  393. //-----------------------------------------------------------------------
  394. // Summary:
  395. //     Retrieves skin class by its name
  396. // Parameters:
  397. //     strClassList - Name of the class
  398. // Returns:
  399. //     Pointer to CXTPSkinManagerClass class object.
  400. //-----------------------------------------------------------------------
  401. virtual CXTPSkinManagerClass* GetSkinClass(CString strClassList);
  402. //-----------------------------------------------------------------------
  403. // Summary:
  404. //     Call this method to find CXTPSkinObject by its handle
  405. // Parameters:
  406. //     hWnd - Handle of skinned window
  407. // Returns:
  408. //     Pointer to CXTPSkinObject that used to draw the window
  409. //-----------------------------------------------------------------------
  410. CXTPSkinObject* Lookup(HWND hWnd);
  411. public:
  412. //-----------------------------------------------------------------------
  413. // Summary:
  414. //     Call this method to get pointer to skin metrics
  415. // Returns:
  416. //     Pointer to CXTPSkinManagerMetrics class contained metrics of the skin
  417. //-----------------------------------------------------------------------
  418. CXTPSkinManagerMetrics* GetMetrics() const;
  419. //-----------------------------------------------------------------------
  420. // Summary:
  421. //     Determines if skinning is currently enabled.
  422. // Returns:
  423. //     TRUE if skinning is enabled.
  424. //-----------------------------------------------------------------------
  425. BOOL IsEnabled() const;
  426. //-----------------------------------------------------------------------
  427. // Summary:
  428. //     Call this method to get pointer to skin schema
  429. // Returns:
  430. //     Pointer to CXTPSkinManagerSchema class used to draw window parts.
  431. //-----------------------------------------------------------------------
  432. CXTPSkinManagerSchema* GetSchema() const;
  433. //-----------------------------------------------------------------------
  434. // Summary:
  435. //     Call this method to get pointer to resource file
  436. // Returns:
  437. //     Pointer to CXTPSkinManagerResourceFile that managed resources of skins.
  438. // See Also:
  439. //     SetResourceFile
  440. //-----------------------------------------------------------------------
  441. CXTPSkinManagerResourceFile* GetResourceFile() const;
  442. //-----------------------------------------------------------------------
  443. // Summary:
  444. //     Call this method to set custom resource file
  445. // Parameters:
  446. //     pResourceFile - new resource file
  447. // See Also:
  448. //     GetResourceFile
  449. // Example:
  450. //     <code>XTPSkinManager()->SetResourceFile(new CMySkinManagerResourceFile);</code>
  451. //-----------------------------------------------------------------------
  452. void SetResourceFile(CXTPSkinManagerResourceFile* pResourceFile);
  453. public:
  454. //-----------------------------------------------------------------------
  455. // Summary:
  456. //     Enables/disables dialog background theme.  This method can be used to
  457. //     tailor dialog compatibility with child windows and controls that
  458. //     may or may not coordinate the rendering of their client area backgrounds
  459. //     with that of their parent dialog in a manner that supports seamless
  460. //     background texturing.
  461. // Parameters:
  462. //     hWnd    - The window handle of the target dialog
  463. //     dwFlags - One of the following
  464. ///              * ETDT_ENABLE to enable the theme-defined dialog background texturing,
  465. //               * ETDT_DISABLE to disable background texturing,
  466. //               * ETDT_ENABLETAB to enable the theme-defined background
  467. //                                texturing using the Tab texture
  468. // Returns:
  469. //     S_OK if successful
  470. //-----------------------------------------------------------------------
  471. HRESULT EnableThemeDialogTexture(HWND hWnd, DWORD dwFlags);
  472. //-----------------------------------------------------------------------
  473. // Summary:
  474. //     Get the value of the specified System color.
  475. // Parameters:
  476. //     iColorId -  the system color index defined in winuser.h
  477. // Returns:
  478. //     COLORREF value if specified system color
  479. //-----------------------------------------------------------------------
  480. COLORREF GetThemeSysColor(int iColorId);
  481. //-----------------------------------------------------------------------
  482. // Summary:
  483. //     Get the LOGFONT for the specified System font.
  484. // Parameters:
  485. //     iFontId - The TMT_XXX font number (first font
  486. //               is TMT_CAPTIONFONT)
  487. //     plf     - Pointer to LOGFONT to receive the font value.
  488. //               (scaled for the current logical screen dpi)
  489. // Returns:
  490. //     S_OK if successful
  491. //-----------------------------------------------------------------------
  492. HRESULT GetThemeSysFont(int iFontId, LOGFONT *plf);
  493. //-----------------------------------------------------------------------
  494. // Summary:
  495. //     Get the value of the specified System size metric.
  496. //     (scaled for the current logical screen dpi)
  497. // Parameters:
  498. //     iSizeId  - The TMT_XXX size value.
  499. // Returns:
  500. //     Size value of the property
  501. //-----------------------------------------------------------------------
  502. int GetThemeSysSize(int iSizeId);
  503. //-----------------------------------------------------------------------
  504. // Summary:
  505. //     Get the boolean value of specified System metric.
  506. // Parameters:
  507. //     iBoolId - the TMT_XXX BOOL number (first BOOL
  508. //               is TMT_FLATMENUS)
  509. // Returns:
  510. //     BOOL value of specified System metric
  511. //-----------------------------------------------------------------------
  512. BOOL GetThemeSysBool(int iBoolId);
  513. //-----------------------------------------------------------------------
  514. // Summary:
  515. //     Get the name of the current theme in-use.
  516. // Parameters:
  517. //     strThemeFileName - receives the theme path & filename
  518. //     strColorBuff     - receives the canonical color scheme name
  519. //-----------------------------------------------------------------------
  520. void GetCurrentThemeName(CString& strThemeFileName, CString& strColorBuff);
  521. //-----------------------------------------------------------------------
  522. // Summary:
  523. //     Returns CXTPSkinManagerClass class from specified HTHEME handle
  524. // Parameters:
  525. //     hTheme - Theme identifier
  526. // Returns:
  527. //     CXTPSkinManagerClass class if found.
  528. //-----------------------------------------------------------------------
  529. CXTPSkinManagerClass* FromHandle(HTHEME hTheme);
  530. //-----------------------------------------------------------------------
  531. // Summary:
  532. //     Determines of ComCtl32.dll version 6.0 found
  533. // Returns:
  534. //     TRUE if ComCtl32.dll has version 6.0 and above
  535. // See Also: IsWin9x
  536. //-----------------------------------------------------------------------
  537. BOOL IsComCtlV6() const;
  538. //-----------------------------------------------------------------------
  539. // Summary:
  540. //      Call this member function to check whether or not the
  541. //      operating system is of the Windows 9x family, and if it is
  542. //      Windows 95 or a later version.
  543. // Returns:
  544. //      TRUE if the OS is of the Windows 9x family, and is Windows 95
  545. ///     or a later version, otherwise returns false.
  546. // See Also: IsComCtlV6
  547. //-----------------------------------------------------------------------
  548. BOOL IsWin9x() const;
  549. //-----------------------------------------------------------------------
  550. // Summary:
  551. //     Call this method to redraw all controls currently skinned
  552. //-----------------------------------------------------------------------
  553. void RedrawAllControls();
  554. //-----------------------------------------------------------------------
  555. // Summary:
  556. //     Call this method for each thread in multi threaded application to enable skin framework for all threads
  557. //-----------------------------------------------------------------------
  558. void EnableCurrentThread();
  559. //-----------------------------------------------------------------------
  560. // Summary:
  561. //     Call this method to enable/disable automatically apply each new thread with current skin
  562. // Parameters:
  563. //     bAutoApply - TRUE to automatically apply each new thread.
  564. //-----------------------------------------------------------------------
  565. void SetAutoApplyNewThreads(BOOL bAutoApply);
  566. //-----------------------------------------------------------------------
  567. // Summary:
  568. //     Determines if all new threads will be automatically skinned
  569. //-----------------------------------------------------------------------
  570. BOOL GetAutoApplyNewThreads() const;
  571. //-----------------------------------------------------------------------
  572. // Summary:
  573. //     Retrieves class map object that porpoise to map window classes to skin framework classes
  574. //-----------------------------------------------------------------------
  575. CXTPSkinObjectClassMap* GetClassMap() const;
  576. //-----------------------------------------------------------------------
  577. // Summary:
  578. //     Removed hook for specified window
  579. // Parameters:
  580. //     hWnd - Window handle to remove
  581. // See Also:
  582. //     RemoveAll
  583. //-----------------------------------------------------------------------
  584. void Remove(HWND hWnd);
  585. //-------------------------------------------------------------------------
  586. // Summary:
  587. //     Removes all hooks
  588. // Parameters:
  589. //     bDetach - TRUE to detach hooks before remove.
  590. // See Also:
  591. //     Remove
  592. //-------------------------------------------------------------------------
  593. void RemoveAll(BOOL bDetach = TRUE);
  594. public:
  595. //-------------------------------------------------------------------------
  596. // Summary:
  597. //     Determines if any color filter installed
  598. //-------------------------------------------------------------------------
  599. BOOL IsColorFilterExists() const;
  600. //-------------------------------------------------------------------------
  601. // Summary:
  602. //     This method is called internally to transform color using installed color filters
  603. // Parameters:
  604. //     clr - Color to transform
  605. //-------------------------------------------------------------------------
  606. void ApplyColorFilter(COLORREF& clr);
  607. //-------------------------------------------------------------------------
  608. // Summary:
  609. //     Adds new color filters
  610. // Parameters:
  611. //     pFilter - New filter to add
  612. //-------------------------------------------------------------------------
  613. void AddColorFilter(CXTPSkinManagerColorFilter* pFilter);
  614. //-------------------------------------------------------------------------
  615. // Summary:
  616. //     Destroys all added color filters
  617. //-------------------------------------------------------------------------
  618. void RemoveColorFilters();
  619. protected:
  620. //-----------------------------------------------------------------------
  621. // Summary:
  622. //     This method is called when skin is changed
  623. // Parameters:
  624. //     bPrevState - TRUE if previously skin was installed
  625. //     bNewState - TRUE if skin is installed
  626. //-----------------------------------------------------------------------
  627. virtual void OnSkinChanged(BOOL bPrevState, BOOL bNewState);
  628. protected:
  629. //-----------------------------------------------------------------------
  630. // Summary:
  631. //     This method is called to parse visual styles ini file
  632. // Parameters:
  633. //     lpszResourcePath - Resource file name
  634. //     lpszIniFileName - Ini file name
  635. // Returns:
  636. //     TRUE if successful, otherwise returns FALSE.
  637. // See Also: FreeSkinData
  638. //-----------------------------------------------------------------------
  639. BOOL ReadSkinData(LPCTSTR lpszResourcePath, LPCTSTR lpszIniFileName);
  640. //-------------------------------------------------------------------------
  641. // Summary:
  642. //     This method is called to free skin resources
  643. // See Also:
  644. //     ReadSkinData
  645. //-------------------------------------------------------------------------
  646. void FreeSkinData();
  647. protected:
  648. //-----------------------------------------------------------------------
  649. // Summary:
  650. //     This method is called to create hook class for specified window
  651. // Parameters:
  652. //     hWnd - Window to hook
  653. //     lpszClassName - Class name of specified window
  654. //     style - Window style
  655. // Returns:
  656. //     New CXTPSkinObject file hooked specified window
  657. // See Also: CXTPSkinObject
  658. //-----------------------------------------------------------------------
  659. virtual CXTPSkinObject* SetHook(HWND hWnd, LPCTSTR lpszClassName, LPCREATESTRUCT lpcs, BOOL bAuto);
  660. protected:
  661. static LRESULT CALLBACK HookWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
  662. static LRESULT CALLBACK CbtFilterHook(int code, WPARAM wParam, LPARAM lParam);
  663. static void CALLBACK WinEventProc(HWINEVENTHOOK hWinEventHook,
  664. DWORD event, HWND hWnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime);
  665. static LRESULT CALLBACK DoCallWindowProc(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
  666. static BOOL CALLBACK EnumWindowsProcNetBroadcast(HWND hwnd, LPARAM lParam);
  667. void Remove(HWND hWnd, BOOL bAuto);
  668. protected:
  669. DWORD m_dwComCtrl;      // Version of ComCtl.dll
  670. BOOL m_bWin9x;          // TRUE if OS is Win9x
  671. BOOL m_bEnabled;        // TRIE if skinning is enabled
  672. BOOL m_bAutoApplyWindows;      // TRUE to auto skin all new windows
  673. BOOL m_bAutoApplyThreads;      // TRUE to auto skin all new windows
  674. CMapStringToPtr m_mapClasses;       // Classes collection
  675. CXTPSkinManagerSchema* m_pSchema;   // Current schema
  676. CXTPSkinManagerMetrics* m_pMetrics; // Skin metrics
  677. CXTPSkinManagerResourceFile* m_pResourceFile;   // Resource file
  678. BOOL m_dwApplyOptions;  // Apply options.
  679. HWINEVENTHOOK m_hWinEventHook;      // HWINEVENTHOOK value that identifies event hook instance
  680. CMap<HWND, HWND, CXTPSkinObject*, CXTPSkinObject*> m_mapObjects;  // Collection of CXTPSkinObject classes
  681. CXTPCriticalSection m_csObjects;
  682. LPFNSETWINEVENTHOOK m_pSetWinEventHook;
  683. LPFNUNHOOKWINEVENT m_pUnhookWinEvent;
  684. CArray<CXTPSkinManagerColorFilter*, CXTPSkinManagerColorFilter*> m_arrFilters;          // Array of filters to apply
  685. CXTPSkinObjectClassMap* m_pClassMap;            // Class map helper
  686. static CXTPSkinManager* s_pInstance;            // Instance of SkinManager
  687. private:
  688. class CDestructor;
  689. friend _XTP_EXT_CLASS CXTPSkinManager* AFX_CDECL XTPSkinManager();
  690. friend class CXTPSkinObject;
  691. friend class CDestructor;
  692. friend class CXTPSkinManagerApiHook;
  693. };
  694. AFX_INLINE CXTPSkinImages* CXTPSkinManagerClass::GetImages() const {
  695. return m_pImages;
  696. }
  697. AFX_INLINE int CXTPSkinManagerClass::GetClassCode() const {
  698. return m_nClassCode;
  699. }
  700. AFX_INLINE CString CXTPSkinManagerClass::GetClassName() const {
  701. return m_strClass;
  702. }
  703. AFX_INLINE CXTPSkinManagerMetrics* CXTPSkinManager::GetMetrics() const {
  704. return m_pMetrics;
  705. }
  706. AFX_INLINE BOOL CXTPSkinManager::IsEnabled() const {
  707. return m_bEnabled;
  708. }
  709. AFX_INLINE CXTPSkinManagerResourceFile* CXTPSkinManager::GetResourceFile() const {
  710. return m_pResourceFile;
  711. }
  712. AFX_INLINE CXTPSkinManagerSchema* CXTPSkinManager::GetSchema() const {
  713. return m_pSchema;
  714. }
  715. AFX_INLINE DWORD CXTPSkinManager::GetApplyOptions() const {
  716. return m_dwApplyOptions;
  717. }
  718. AFX_INLINE BOOL CXTPSkinManager::IsComCtlV6() const {
  719. return m_dwComCtrl >= MAKELONG(0, 6);
  720. }
  721. AFX_INLINE BOOL CXTPSkinManager::IsWin9x() const {
  722. return m_bWin9x;
  723. }
  724. AFX_INLINE CXTPSkinObjectClassMap* CXTPSkinManager::GetClassMap() const {
  725. return m_pClassMap;
  726. }
  727. AFX_INLINE BOOL CXTPSkinManager::GetAutoApplyNewWindows() const {
  728. return m_bAutoApplyWindows;
  729. }
  730. AFX_INLINE BOOL CXTPSkinManager::GetAutoApplyNewThreads()const {
  731. return m_bAutoApplyThreads;
  732. }
  733. AFX_INLINE void CXTPSkinManager::SetAutoApplyNewWindows(BOOL bAutoApply) {
  734. m_bAutoApplyWindows = bAutoApply;
  735. }
  736. AFX_INLINE void CXTPSkinManager::SetAutoApplyNewThreads(BOOL bAutoApply) {
  737. m_bAutoApplyThreads = bAutoApply;
  738. }
  739. //---------------------------------------------------------------------------
  740. // Summary:
  741. //     Call this function to access CXTPSkinManager members.
  742. //     Since this class is designed as a single instance object you can
  743. //     only access version info through this method. You <b>cannot</b>
  744. //     directly instantiate an object of type CXTPSkinManager.
  745. // Example:
  746. // <code>
  747. // XTPSkinManager()->SetApplyOptions(xtpSkinApplyMetrics | xtpSkinApplyFrame | xtpSkinApplyColors);
  748. // </code>
  749. //---------------------------------------------------------------------------
  750. _XTP_EXT_CLASS CXTPSkinManager* AFX_CDECL XTPSkinManager();
  751. #endif // !defined(__XTPSKINMANAGER_H__)