// XTPSkinManagerSchema.h: interface for the CXTPSkinManagerSchema class. // // This file is a part of the XTREME SKINFRAMEWORK MFC class library. // (c)1998-2012 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// //{{AFX_CODEJOCK_PRIVATE #if !defined(_XTPSKINMANAGERSCHEMA_H__) #define _XTPSKINMANAGERSCHEMA_H__ //}}AFX_CODEJOCK_PRIVATE #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CXTPSkinManagerResourceFile; class CXTPSkinManagerClass; class CXTPSkinManager; class CXTPSkinObjectFrame; class CXTPSkinImage; class CXTPSkinManagerMetrics; struct XTP_SKINSCROLLBARPOSINFO; class CXTPSkinManagerSchema; //=========================================================================== // Summary: // CXTPSkinManagerSchemaProperty is standalone class represented single property of visual styles ini file //=========================================================================== class _XTP_EXT_CLASS CXTPSkinManagerSchemaProperty { public: //------------------------------------------------------------------------- // Summary: // Constructs a CXTPSkinManagerSchemaProperty object. //------------------------------------------------------------------------- CXTPSkinManagerSchemaProperty(); //----------------------------------------------------------------------- // Summary: // Destroys a CXTPSkinManagerSchemaProperty object, handles cleanup and deallocation. //----------------------------------------------------------------------- ~CXTPSkinManagerSchemaProperty(); public: //----------------------------------------------------------------------- // Summary: // This method is called to convert string to Color property // Parameters: // lpszValue - String to convert property from //----------------------------------------------------------------------- void SetPropertyColor(LPCTSTR lpszValue); //----------------------------------------------------------------------- // Summary: // This method is called to set string property // Parameters: // lpszValue - String to convert property from //----------------------------------------------------------------------- void SetPropertyString(LPCTSTR lpszValue); //----------------------------------------------------------------------- // Summary: // This method is called to convert string to BOOL property // Parameters: // lpszValue - String to convert property from //----------------------------------------------------------------------- void SetPropertyBool(LPCTSTR lpszValue); //----------------------------------------------------------------------- // Summary: // This method is called to convert string to int property // Parameters: // lpszValue - String to convert property from //----------------------------------------------------------------------- void SetPropertyInt(LPCTSTR lpszValue); //----------------------------------------------------------------------- // Summary: // This method is called to set enum property // Parameters: // nEnumValue - Enumerator to set //----------------------------------------------------------------------- void SetPropertyEnum(int nEnumValue); //----------------------------------------------------------------------- // Summary: // This method is called to convert string to size property // Parameters: // lpszValue - String to convert property from //----------------------------------------------------------------------- void SetPropertySize(LPCTSTR lpszValue); //----------------------------------------------------------------------- // Summary: // This method is called to convert string to CRect property // Parameters: // lpszValue - String to convert property from //----------------------------------------------------------------------- void SetPropertyRect(LPCTSTR lpszValue); //----------------------------------------------------------------------- // Summary: // This method is called to convert string to LOGFONT property // Parameters: // lpszValue - String to convert property from //----------------------------------------------------------------------- void SetPropertyFont(LPCTSTR lpszValue); void ClearProperty(); BOOL operator==(const CXTPSkinManagerSchemaProperty& obj) const; public: XTPSkinManagerProperty propType; // Property type int nPropertyCode; // Property code union { COLORREF clrVal; // Color value of the property LPTSTR lpszVal; // LPCTSTR value of the property BOOL bVal; // BOOL value of the property int iVal; // Integer value of the property RECT rcVal; // Rect value of the property SIZE szVal; // SIZE value of the property PLOGFONT lfVal; // LOGFONT value }; }; //=========================================================================== // Summary: // CXTPSkinManagerSchema is standalone class used to read visual styles schema file //=========================================================================== class _XTP_EXT_CLASS CXTPSkinManagerSchema : public CXTPCmdTarget { public: //----------------------------------------------------------------------- // Summary: // Constructs a CXTPSkinManagerSchema object. // Parameters: // pResourceFile - Resource file to read //----------------------------------------------------------------------- CXTPSkinManagerSchema(CXTPSkinManagerResourceFile* pResourceFile); protected: //----------------------------------------------------------------------- // Summary: // Destroys a CXTPSkinManagerSchema object, handles cleanup and deallocation. //----------------------------------------------------------------------- virtual ~CXTPSkinManagerSchema(); public: //----------------------------------------------------------------------- // Summary: // This method is called to read all properties from resource file // Parameters: // pResourceFile - Resource file to read // Returns: // S_OK if successful //----------------------------------------------------------------------- HRESULT ReadProperties(); //----------------------------------------------------------------------- // Summary: // Returns class hash code // Parameters: // strClass - Class name // Returns: // UINT class hash code //----------------------------------------------------------------------- static UINT AFX_CDECL GetClassCode(LPCTSTR strClass); public: //----------------------------------------------------------------------- // Summary: // Get the value for the specified string property // Parameters: // iClassId - Class hash code // iPartId - Part number // iStateId - State number of part // iPropId - The property number to get the value for // strVal - receives the string property value // Returns: // S_OK if successful //----------------------------------------------------------------------- HRESULT GetStringProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, CString& strVal); //----------------------------------------------------------------------- // Summary: // Get the value for the specified rect property // Parameters: // iClassId - Class hash code // iPartId - Part number // iStateId - State number of part // iPropId - The property number to get the value for // rcVal - receives the rect property value // Returns: // S_OK if successful //----------------------------------------------------------------------- HRESULT GetRectProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, CRect& rcVal); //----------------------------------------------------------------------- // Summary: // Get the value for the specified int property // Parameters: // iClassId - Class hash code // iPartId - Part number // iStateId - State number of part // iPropId - The property number to get the value for // iVal - receives the int property value // Returns: // S_OK if successful //----------------------------------------------------------------------- HRESULT GetIntProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, int& iVal); //----------------------------------------------------------------------- // Summary: // Get the value for the specified BOOL property // Parameters: // iClassId - Class hash code // iPartId - Part number // iStateId - State number of part // iPropId - The property number to get the value for // bVal - receives the BOOL property value // Returns: // S_OK if successful //----------------------------------------------------------------------- HRESULT GetBoolProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, BOOL& bVal); //----------------------------------------------------------------------- // Summary: // Get the value for the specified COLORREF property // Parameters: // iClassId - Class hash code // iPartId - Part number // iStateId - State number of part // iPropId - The property number to get the value for // clrVal - receives the COLORREF property value // Returns: // S_OK if successful //----------------------------------------------------------------------- HRESULT GetColorProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, COLORREF& clrVal); //----------------------------------------------------------------------- // Summary: // Get the value for the specified enum property // Parameters: // iClassId - Class hash code // iPartId - Part number // iStateId - State number of part // iPropId - The property number to get the value for // nVal - receives the enum property value // Returns: // S_OK if successful //----------------------------------------------------------------------- HRESULT GetEnumProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, int& nVal); //----------------------------------------------------------------------- // Summary: // Get the value for the specified LOGFONT property // Parameters: // iClassId - Class hash code // iPartId - Part number // iStateId - State number of part // iPropId - The property number to get the value for // lfVal - receives the LOGFONT property value // Returns: // S_OK if successful //----------------------------------------------------------------------- HRESULT GetFontProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, LOGFONT& lfVal); //----------------------------------------------------------------------- // Summary: // Get the value for the specified CSize property // Parameters: // iClassId - Class hash code // iPartId - Part number // iStateId - State number of part // iPropId - The property number to get the value for // szVal - Receives the CSize property value // Returns: // S_OK if successful //----------------------------------------------------------------------- HRESULT GetSizeProperty(UINT iClassId, int iPartId, int iStateId, int iPropId, CSize& szVal); //----------------------------------------------------------------------- // Summary: // Returns schema name // Returns: // Selected schema name //----------------------------------------------------------------------- CString GetSchemaName() const; //----------------------------------------------------------------------- // Summary: // Retrieves parent skin manager object // Returns: // Pointer to CXTPSkinManager object //----------------------------------------------------------------------- CXTPSkinManager* GetSkinManager() const; CXTPSkinManagerResourceFile* GetResourceFile() const; CXTPSkinManagerMetrics* GetMetrics() const; //{{AFX_CODEJOCK_PRIVATE protected: enum FRAMEPART { frameLeft, frameTop, frameRight, frameBottom }; struct FRAMEREGIONPART { FRAMEREGIONPART() { nCenter = 0; rcSizingMargins.SetRectEmpty(); } CRgn rgnLeft; CRgn rgnRight; CRect rcSizingMargins; int nCenter; }; struct FRAMEREGION { int nCaptionHeight; int nBorderHeight; BOOL bToolWindow; BOOL bAutoDelete; FRAMEREGIONPART Part[4]; }; public: HICON GetFrameSmIcon(HWND hWnd, BOOL bCheckStyle = TRUE) const; public: static UINT AFX_CDECL GetSchemaPartCode(CString strSchemaPart); static UINT AFX_CDECL GetClassPartCode(LPCTSTR lpszClass, LPCTSTR lpszClassPart); static UINT AFX_CDECL GetStateCode(LPCTSTR lpszClassPart, LPCTSTR lpszState); static int AFX_CDECL GetEnumCode(LPCTSTR lpszProperty, LPCTSTR lpszValue); static UINT AFX_CDECL GetPropertyCode(LPCTSTR lpszProperty, XTPSkinManagerProperty& nPropertyType); static CXTPSkinManagerSchemaProperty* AFX_CDECL CreateProperty(LPCTSTR lpszProperty, XTPSkinManagerProperty nPropertyType, LPCTSTR lpszValue); static UINT AFX_CDECL CalculatePropertyCode(UINT iClassId, int iPartId, int iStateId, int iPropId); protected: void RemoveAllProperties(); CXTPSkinManagerSchemaProperty* GetProperty(UINT iClassId, int iPartId, int iStateId, int iPropId); COLORREF GetColor(int nIndex) const; //}}AFX_CODEJOCK_PRIVATE public: //{{AFX_CODEJOCK_PRIVATE virtual BOOL DrawThemeBackground(CDC* pDC, CXTPSkinManagerClass* pClass, int iPartId, int iStateId, const RECT *pRect); virtual void DrawThemeFrame(CDC* pDC, CXTPSkinObjectFrame* pFrame); virtual CRect CalcFrameBorders(CXTPSkinObjectFrame* pFrame); virtual CRect CalcFrameBorders(DWORD dwStyle, DWORD dwExStyle); virtual HRGN CalcFrameRegion(CXTPSkinObjectFrame* pFrame, CSize sz); virtual void RefreshMetrcis(); void DrawNonClientRect(CDC* pDC, CRect rcFrame, CXTPSkinObjectFrame* pFrame); void DrawClientEdge(CDC* pDC, const CRect& rcFrame, CXTPSkinObjectFrame* pFrame); virtual void DrawThemeScrollBar(CDC* pDC, CXTPSkinObjectFrame* pFrame, XTP_SKINSCROLLBARPOSINFO* pSBInfo); virtual COLORREF GetScrollBarSizeBoxColor(CXTPSkinObjectFrame* pFrame); //}}AFX_CODEJOCK_PRIVATE protected: //{{AFX_CODEJOCK_PRIVATE BOOL DrawThemeBackgroundGlyph(CDC* pDC, CXTPSkinManagerClass* pClass, int iPartId, int iStateId, const RECT *pRect); BOOL DrawThemeBackgroundBorder(CDC* pDC, CXTPSkinManagerClass* pClass, int iPartId, int iStateId, const RECT *pRect); int FindBestImageGlyphSize(CXTPSkinManagerClass* pClass, int iPartId, int iStateId, const CRect& rcDest, int nImageCount, BOOL bHorizontalImageLayout); //}}AFX_CODEJOCK_PRIVATE private: int GetWindowBorders(LONG lStyle, DWORD dwExStyle, BOOL fWindow, BOOL fClient); void FreeFrameRegions(); void RegionFromBitmap(CBitmap* pBitmap, FRAMEPART nAlign, FRAMEREGIONPART* pPart, const CRect& rc, COLORREF clrTransparent); FRAMEREGION* CreateFrameRegion(CXTPSkinObjectFrame* pFrame, CSize sz); CSize GetCaptionButtonSize(CXTPSkinManagerClass* pClass, int yButton); BOOL DrawWindowPart(CXTPSkinObjectFrame* pFrame, CBitmap& bmp, int iPartId, BOOL bVertical, int nBorderHeight, CRect& rcDest, CRect& rcSizingMargins, COLORREF& clrTransparent); int DrawThemeFrameButtons(CDC* pDC, CXTPSkinObjectFrame* pFrame); public: BOOL m_bPreMultiplyImages; protected: CMap m_mapProperties; // Properties collection CXTPSkinManager* m_pManager; // Parent CXTPSkinManager class CXTPSkinManagerResourceFile* m_pResourceFile; // Resources. CXTPSkinManagerMetrics* m_pMetrics; // Skin metrics. CString m_strSchemaName; // Schema name CRITICAL_SECTION m_csDraw; CArray m_arrFrameRegions; // Frame region protected: int m_nGlobalClassId; int m_nWindowClassId; CMapStringToPtr m_mapClasses; // Classes collection friend class CXTPSkinManagerClass; friend class CXTPSkinManager; }; AFX_INLINE CString CXTPSkinManagerSchema::GetSchemaName() const { return m_strSchemaName; } AFX_INLINE CXTPSkinManager* CXTPSkinManagerSchema::GetSkinManager() const { return m_pManager; } AFX_INLINE CXTPSkinManagerResourceFile* CXTPSkinManagerSchema::GetResourceFile() const { return m_pResourceFile; } AFX_INLINE CXTPSkinManagerMetrics* CXTPSkinManagerSchema::GetMetrics() const { return m_pMetrics; } #endif // !defined(AFX_SKINMANAGERSCHEMA_H__44A8B96F_B15B_43F7_A734_39C649784B29__INCLUDED_)