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

对话框与窗口

开发平台:

Visual C++

  1. // XTPSkinManagerSchema.h: interface for the CXTPSkinManagerSchema 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(_XTPSKINMANAGERSCHEMA_H__)
  22. #define _XTPSKINMANAGERSCHEMA_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPSkinManagerResourceFile;
  28. class CXTPSkinManagerClass;
  29. class CXTPSkinManager;
  30. class CXTPSkinObjectFrame;
  31. class CXTPSkinImage;
  32. struct XTP_SKINSCROLLBARPOSINFO;
  33. #include "Common/XTPSystemHelpers.h"
  34. //-----------------------------------------------------------------------
  35. // Summary:
  36. //     Available property for CXTPSkinManagerSchemaProperty class
  37. // Example:
  38. // <code>
  39. // XTPSkinManager()->GetProperty(XTP_SKINPROPERTY_BOOL, iPartId, iStateId, TMT_TRANSPARENT);
  40. // </code>
  41. // See Also:
  42. //     CXTPSkinManagerSchemaProperty
  43. //-----------------------------------------------------------------------
  44. enum XTPSkinManagerProperty
  45. {
  46. XTP_SKINPROPERTY_UNKNOWN,       // Not defined
  47. XTP_SKINPROPERTY_STRING,        // CString property
  48. XTP_SKINPROPERTY_INT,           // int property
  49. XTP_SKINPROPERTY_BOOL,          // BOOL property
  50. XTP_SKINPROPERTY_COLOR,         // COLORREF property
  51. XTP_SKINPROPERTY_RECT,          // CRect property
  52. XTP_SKINPROPERTY_FONT,          // LOGFONT property
  53. XTP_SKINPROPERTY_INTLIST,       // CIntArray property
  54. XTP_SKINPROPERTY_ENUM,          // enum property
  55. XTP_SKINPROPERTY_POSITION,      // int property
  56. XTP_SKINPROPERTY_FILENAME = XTP_SKINPROPERTY_STRING,    // FileName property
  57. XTP_SKINPROPERTY_MARGINS = XTP_SKINPROPERTY_RECT,       // Margins property
  58. XTP_SKINPROPERTY_SIZE = XTP_SKINPROPERTY_INT            // Size property
  59. };
  60. class CXTPSkinManagerSchema;
  61. //===========================================================================
  62. // Summary:
  63. //     CXTPSkinManagerSchemaProperty is standalone class represented single property of visual styles ini file
  64. //===========================================================================
  65. class _XTP_EXT_CLASS CXTPSkinManagerSchemaProperty
  66. {
  67. public:
  68. //-------------------------------------------------------------------------
  69. // Summary:
  70. //     Constructs a CXTPSkinManagerSchemaProperty object.
  71. //-------------------------------------------------------------------------
  72. CXTPSkinManagerSchemaProperty();
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     Destroys a CXTPSkinManagerSchemaProperty object, handles cleanup and deallocation.
  76. //-----------------------------------------------------------------------
  77. ~CXTPSkinManagerSchemaProperty();
  78. public:
  79. //-----------------------------------------------------------------------
  80. // Summary:
  81. //     This method is called to convert string to Color property
  82. // Parameters:
  83. //     lpszValue - String to convert property from
  84. //-----------------------------------------------------------------------
  85. void SetPropertyColor(LPCTSTR lpszValue);
  86. //-----------------------------------------------------------------------
  87. // Summary:
  88. //     This method is called to set string property
  89. // Parameters:
  90. //     lpszValue - String to convert property from
  91. //-----------------------------------------------------------------------
  92. void SetPropertyString(LPCTSTR lpszValue);
  93. //-----------------------------------------------------------------------
  94. // Summary:
  95. //     This method is called to convert string to BOOL property
  96. // Parameters:
  97. //     lpszValue - String to convert property from
  98. //-----------------------------------------------------------------------
  99. void SetPropertyBool(LPCTSTR lpszValue);
  100. //-----------------------------------------------------------------------
  101. // Summary:
  102. //     This method is called to convert string to int property
  103. // Parameters:
  104. //     lpszValue - String to convert property from
  105. //-----------------------------------------------------------------------
  106. void SetPropertyInt(LPCTSTR lpszValue);
  107. //-----------------------------------------------------------------------
  108. // Summary:
  109. //     This method is called to set enum property
  110. // Parameters:
  111. //     nEnumValue - Enumerator to set
  112. //-----------------------------------------------------------------------
  113. void SetPropertyEnum(int nEnumValue);
  114. //-----------------------------------------------------------------------
  115. // Summary:
  116. //     This method is called to convert string to size property
  117. // Parameters:
  118. //     lpszValue - String to convert property from
  119. //-----------------------------------------------------------------------
  120. void SetPropertySize(LPCTSTR lpszValue);
  121. //-----------------------------------------------------------------------
  122. // Summary:
  123. //     This method is called to convert string to CRect property
  124. // Parameters:
  125. //     lpszValue - String to convert property from
  126. //-----------------------------------------------------------------------
  127. void SetPropertyRect(LPCTSTR lpszValue);
  128. //-----------------------------------------------------------------------
  129. // Summary:
  130. //     This method is called to convert string to LOGFONT property
  131. // Parameters:
  132. //     lpszValue - String to convert property from
  133. //-----------------------------------------------------------------------
  134. void SetPropertyFont(LPCTSTR lpszValue);
  135. void ClearProperty();
  136. BOOL operator==(const CXTPSkinManagerSchemaProperty& obj) const;
  137. public:
  138. XTPSkinManagerProperty propType;    // Property type
  139. int nPropertyCode;                  // Property code
  140. union
  141. {
  142. COLORREF clrVal;    // Color value of the property
  143. LPTSTR lpszVal;     // LPCTSTR value of the property
  144. BOOL bVal;          // BOOL value of the property
  145. int iVal;           // Integer value of the property
  146. RECT rcVal;         // Rect value of the property
  147. SIZE szVal;         // SIZE value of the property
  148. PLOGFONT lfVal;     // LOGFONT value
  149. };
  150. };
  151. //===========================================================================
  152. // Summary:
  153. //     CXTPSkinManagerSchema is standalone class used to read visual styles schema file
  154. //===========================================================================
  155. class _XTP_EXT_CLASS CXTPSkinManagerSchema
  156. {
  157. public:
  158. //-----------------------------------------------------------------------
  159. // Summary:
  160. //     Constructs a CXTPSkinManagerSchema object.
  161. // Parameters:
  162. //     pManager - Parent skin manager class.
  163. //-----------------------------------------------------------------------
  164. CXTPSkinManagerSchema(CXTPSkinManager* pManager);
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     Destroys a CXTPSkinManagerSchema object, handles cleanup and deallocation.
  168. //-----------------------------------------------------------------------
  169. virtual ~CXTPSkinManagerSchema();
  170. public:
  171. //-----------------------------------------------------------------------
  172. // Summary:
  173. //     This method is called to read all properties from resource file
  174. // Parameters:
  175. //     pResourceFile - Resource file to read
  176. // Returns:
  177. //     S_OK if successful
  178. //-----------------------------------------------------------------------
  179. HRESULT ReadProperties(CXTPSkinManagerResourceFile* pResourceFile);
  180. //-----------------------------------------------------------------------
  181. // Summary:
  182. //     Returns class hash code
  183. // Parameters:
  184. //     strClass - Class name
  185. // Returns:
  186. //     UINT class hash code
  187. //-----------------------------------------------------------------------
  188. static UINT AFX_CDECL GetClassCode(LPCTSTR strClass);
  189. public:
  190. //-----------------------------------------------------------------------
  191. // Summary:
  192. //     Get the value for the specified string property
  193. // Parameters:
  194. //     iClassId    - Class hash code
  195. //     iPartId     - Part number
  196. //     iStateId    - State number of part
  197. //     iPropId     - The property number to get the value for
  198. //     strVal      - receives the string property value
  199. // Returns:
  200. //     S_OK if successful
  201. //-----------------------------------------------------------------------
  202. HRESULT GetStringProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, CString& strVal);
  203. //-----------------------------------------------------------------------
  204. // Summary:
  205. //     Get the value for the specified rect property
  206. // Parameters:
  207. //     iClassId    - Class hash code
  208. //     iPartId     - Part number
  209. //     iStateId    - State number of part
  210. //     iPropId     - The property number to get the value for
  211. //     rcVal       - receives the rect property value
  212. // Returns:
  213. //     S_OK if successful
  214. //-----------------------------------------------------------------------
  215. HRESULT GetRectProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, CRect& rcVal);
  216. //-----------------------------------------------------------------------
  217. // Summary:
  218. //     Get the value for the specified int property
  219. // Parameters:
  220. //     iClassId    - Class hash code
  221. //     iPartId     - Part number
  222. //     iStateId    - State number of part
  223. //     iPropId     - The property number to get the value for
  224. //     iVal        - receives the int property value
  225. // Returns:
  226. //     S_OK if successful
  227. //-----------------------------------------------------------------------
  228. HRESULT GetIntProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, int& iVal);
  229. //-----------------------------------------------------------------------
  230. // Summary:
  231. //     Get the value for the specified BOOL property
  232. // Parameters:
  233. //     iClassId    - Class hash code
  234. //     iPartId     - Part number
  235. //     iStateId    - State number of part
  236. //     iPropId     - The property number to get the value for
  237. //     bVal        - receives the BOOL property value
  238. // Returns:
  239. //     S_OK if successful
  240. //-----------------------------------------------------------------------
  241. HRESULT GetBoolProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, BOOL& bVal);
  242. //-----------------------------------------------------------------------
  243. // Summary:
  244. //     Get the value for the specified COLORREF property
  245. // Parameters:
  246. //     iClassId    - Class hash code
  247. //     iPartId     - Part number
  248. //     iStateId    - State number of part
  249. //     iPropId     - The property number to get the value for
  250. //     clrVal      - receives the COLORREF property value
  251. // Returns:
  252. //     S_OK if successful
  253. //-----------------------------------------------------------------------
  254. HRESULT GetColorProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, COLORREF& clrVal);
  255. //-----------------------------------------------------------------------
  256. // Summary:
  257. //     Get the value for the specified enum property
  258. // Parameters:
  259. //     iClassId    - Class hash code
  260. //     iPartId     - Part number
  261. //     iStateId    - State number of part
  262. //     iPropId     - The property number to get the value for
  263. //     nVal        - receives the enum property value
  264. // Returns:
  265. //     S_OK if successful
  266. //-----------------------------------------------------------------------
  267. HRESULT GetEnumProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, int& nVal);
  268. //-----------------------------------------------------------------------
  269. // Summary:
  270. //     Get the value for the specified LOGFONT property
  271. // Parameters:
  272. //     iClassId    - Class hash code
  273. //     iPartId     - Part number
  274. //     iStateId    - State number of part
  275. //     iPropId     - The property number to get the value for
  276. //     lfVal       - receives the LOGFONT property value
  277. // Returns:
  278. //     S_OK if successful
  279. //-----------------------------------------------------------------------
  280. HRESULT GetFontProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, LOGFONT& lfVal);
  281. //-----------------------------------------------------------------------
  282. // Summary:
  283. //     Get the value for the specified CSize property
  284. // Parameters:
  285. //     iClassId    - Class hash code
  286. //     iPartId     - Part number
  287. //     iStateId    - State number of part
  288. //     iPropId     - The property number to get the value for
  289. //     szVal       - Receives the CSize property value
  290. // Returns:
  291. //     S_OK if successful
  292. //-----------------------------------------------------------------------
  293. HRESULT GetSizeProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, CSize& szVal);
  294. //-----------------------------------------------------------------------
  295. // Summary:
  296. //     Returns schema name
  297. // Returns:
  298. //     Selected schema name
  299. //-----------------------------------------------------------------------
  300. CString GetSchemaName() const;
  301. //-----------------------------------------------------------------------
  302. // Summary:
  303. //     Retrieves parent skin manager object
  304. // Returns:
  305. //     Pointer to CXTPSkinManager object
  306. //-----------------------------------------------------------------------
  307. CXTPSkinManager* GetSkinManager() const;
  308. //{{AFX_CODEJOCK_PRIVATE
  309. public:
  310. static UINT AFX_CDECL GetSchemaPartCode(CString strSchemaPart);
  311. static UINT AFX_CDECL GetClassPartCode(LPCTSTR lpszClass, LPCTSTR lpszClassPart);
  312. static UINT AFX_CDECL GetStateCode(LPCTSTR lpszClassPart, LPCTSTR lpszState);
  313. static int AFX_CDECL GetEnumCode(LPCTSTR lpszProperty, LPCTSTR lpszValue);
  314. static UINT AFX_CDECL GetPropertyCode(LPCTSTR lpszProperty, XTPSkinManagerProperty& nPropertyType);
  315. static CXTPSkinManagerSchemaProperty* AFX_CDECL CreateProperty(LPCTSTR lpszProperty, XTPSkinManagerProperty nPropertyType, LPCTSTR lpszValue);
  316. static UINT AFX_CDECL CalculatePropertyCode(UINT iClassId, int iPartId, int iStateId, int iPropId);
  317. protected:
  318. void RemoveAllProperties();
  319. CXTPSkinManagerSchemaProperty* GetProperty(UINT iClassId, int iPartId, int iStateId, int iPropId);
  320. COLORREF GetColor(int nIndex) const;
  321. //}}AFX_CODEJOCK_PRIVATE
  322. public:
  323. //{{AFX_CODEJOCK_PRIVATE
  324. virtual BOOL DrawThemeBackground(CDC* pDC, CXTPSkinManagerClass* pClass, int iPartId, int iStateId, const RECT *pRect) = 0;
  325. virtual void DrawThemeFrame(CDC* pDC, CXTPSkinObjectFrame* pFrame) = 0;
  326. virtual CRect CalcFrameBorders(CXTPSkinObjectFrame* pFrame) = 0;
  327. virtual CRect CalcFrameBorders(DWORD dwStyle, DWORD dwExStyle) = 0;
  328. virtual HRGN CalcFrameRegion(CXTPSkinObjectFrame* pFrame, CSize sz) = 0;
  329. virtual void RefreshMetrcis() = 0;
  330. void DrawNonClientRect(CDC* pDC, CRect rcFrame, CXTPSkinObjectFrame* pFrame);
  331. void DrawClientEdge(CDC* pDC, const CRect& rcFrame, CXTPSkinObjectFrame* pFrame);
  332. virtual void DrawThemeScrollBar(CDC* pDC, CXTPSkinObjectFrame* pFrame, XTP_SKINSCROLLBARPOSINFO* pSBInfo) = 0;
  333. virtual COLORREF GetScrollBarSizeBoxColor(CXTPSkinObjectFrame* pFrame);
  334. //}}AFX_CODEJOCK_PRIVATE
  335. protected:
  336. //{{AFX_CODEJOCK_PRIVATE
  337. BOOL DrawThemeBackgroundGlyph(CDC* pDC, CXTPSkinManagerClass* pClass, int iPartId, int iStateId, const RECT *pRect);
  338. BOOL DrawThemeBackgroundBorder(CDC* pDC, CXTPSkinManagerClass* pClass, int iPartId, int iStateId, const RECT *pRect);
  339. int FindBestImageGlyphSize(CXTPSkinManagerClass* pClass, int iPartId, int iStateId, const CRect& rcDest, int nImageCount, BOOL bHorizontalImageLayout);
  340. //}}AFX_CODEJOCK_PRIVATE
  341. public:
  342. BOOL m_bPreMultiplyImages;
  343. protected:
  344. CMap<UINT, UINT, CXTPSkinManagerSchemaProperty*, CXTPSkinManagerSchemaProperty*> m_mapProperties;   // Properties collection
  345. CXTPSkinManager* m_pManager;        // Parent CXTPSkinManager class
  346. CString m_strSchemaName;            // Schema name
  347. CXTPCriticalSection m_csDraw;
  348. protected:
  349. int m_nGlobalClassId;
  350. int m_nWindowClassId;
  351. friend class CXTPSkinManagerClass;
  352. };
  353. //===========================================================================
  354. // Summary:
  355. //     CXTPSkinManagerSchemaDefault is CXTPSkinManagerSchema derived class is used to
  356. //     implement standard visual style.
  357. //===========================================================================
  358. class _XTP_EXT_CLASS CXTPSkinManagerSchemaDefault : public CXTPSkinManagerSchema
  359. {
  360. struct FRAMEREGION
  361. {
  362. int nCaptionHeight;
  363. BOOL bToolWindow;
  364. CRgn rgnFrameLeft;
  365. CRgn rgnFrameRight;
  366. CRect rcFrameSizingMargins;
  367. int nRgnFrameCenter;
  368. BOOL bAutoDelete;
  369. };
  370. public:
  371. //-----------------------------------------------------------------------
  372. // Summary:
  373. //     Constructs a CXTPSkinManagerSchemaDefault object.
  374. // Parameters:
  375. //     pManager - Parent skin manager class.
  376. //-----------------------------------------------------------------------
  377. CXTPSkinManagerSchemaDefault(CXTPSkinManager* pManager);
  378. //-------------------------------------------------------------------------
  379. //-----------------------------------------------------------------------
  380. // Summary:
  381. //     Destroys a CXTPSkinManagerSchemaDefault object, handles cleanup and deallocation.
  382. //-----------------------------------------------------------------------
  383. ~CXTPSkinManagerSchemaDefault();
  384. protected:
  385. //{{AFX_CODEJOCK_PRIVATE
  386. virtual BOOL DrawThemeBackground(CDC* pDC, CXTPSkinManagerClass* pClass, int iPartId, int iStateId, const RECT *pRect);
  387. virtual void DrawThemeFrame(CDC* pDC, CXTPSkinObjectFrame* pFrame);
  388. virtual int DrawThemeFrameButtons(CDC* pDC, CXTPSkinObjectFrame* pFrame);
  389. virtual CRect CalcFrameBorders(CXTPSkinObjectFrame* pFrame);
  390. virtual CRect CalcFrameBorders(DWORD dwStyle, DWORD dwExStyle);
  391. virtual HRGN CalcFrameRegion(CXTPSkinObjectFrame* pFrame, CSize sz);
  392. virtual void RefreshMetrcis();
  393. virtual void DrawThemeScrollBar(CDC* pDC, CXTPSkinObjectFrame* pFrame, XTP_SKINSCROLLBARPOSINFO* pSBInfo);
  394. //}}AFX_CODEJOCK_PRIVATE
  395. private:
  396. int GetWindowBorders(LONG lStyle, DWORD dwExStyle, BOOL fWindow, BOOL fClient);
  397. void FreeFrameRegions();
  398. static void AFX_CDECL RegionFromBitmap(CDC* pDC, CRgn* pRgnLeft, CRgn* pRgnRight, int& nRgnFrameCenter, const CRect& rc, const CRect& rcSizingMargins, COLORREF clrTransparent);
  399. FRAMEREGION* CreateFrameRegion(CXTPSkinObjectFrame* pFrame, CSize sz);
  400. CSize GetCaptionButtonSize(CXTPSkinManagerClass* pClass, int yButton);
  401. protected:
  402. int m_nFrameButtonOffset;           // Frame Button offset
  403. CArray<FRAMEREGION*, FRAMEREGION*> m_arrFrameRegions;   // Frame region
  404. };
  405. AFX_INLINE CString CXTPSkinManagerSchema::GetSchemaName() const {
  406. return m_strSchemaName;
  407. }
  408. AFX_INLINE CXTPSkinManager* CXTPSkinManagerSchema::GetSkinManager() const {
  409. return m_pManager;
  410. }
  411. #endif // !defined(AFX_SKINMANAGERSCHEMA_H__44A8B96F_B15B_43F7_A734_39C649784B29__INCLUDED_)