/********************************************
** 工作室:S&P工作室
** 作者 :张东斌
** 日期 :2007年6月
*********************************************/
#if !defined(_SPPROPERTYGRIDPAINTMANAGER_H__)
#define _SPPROPERTYGRIDPAINTMANAGER_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CSPPropertyGrid;
class CSPPropertyGridInplaceButton;
class CSPPropertyGridItem;
//-----------------------------------------------------------------------
// Summary:
// Visual theme enumeration
// Example:
// m_wndPropertyGrid.SetTheme(SPGridThemeWhidbey);
// See Also: CSPPropertyGrid::SetTheme, CSPPropertyGrid::GetCurrentTheme
//
//
//-----------------------------------------------------------------------
enum SPPropertyGridPaintTheme
{
SPGridThemeDefault , // Default theme.
SPGridThemeNativeWinXP , // WinXP style theme.
SPGridThemeOffice2003 , // Office 2003 style theme.
SPGridThemeCool , // Cool theme.
SPGridThemeSimple , // Visual Basic style theme.
SPGridThemeDelphi , // Delphi style theme.
SPGridThemeWhidbey // Visual Studio 2005 "Whidbey" style theme.
};
//===========================================================================
// Summary:
// Standalone class used by CSPPropertyGrid as the paint manager.
//===========================================================================
class CSPPropertyGridPaintManager
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CSPPropertyGridPaintManager object.
// Parameters:
// pGrid - Points to a CSPPropertyGrid object
//-----------------------------------------------------------------------
CSPPropertyGridPaintManager( CSPPropertyGrid * pGrid );
//-----------------------------------------------------------------------
// Summary:
// Destroys a CSPPropertyGridPaintManager object, handles cleanup
// and deallocation.
//-----------------------------------------------------------------------
virtual ~CSPPropertyGridPaintManager();
public:
//-----------------------------------------------------------------------
// Summary:
// This method is called to draw property grid background.
// Parameters:
// pDC - Pointer to a valid device context
//-----------------------------------------------------------------------
virtual void FillPropertyGrid( CDC * pDC );
//-----------------------------------------------------------------------
// Summary:
// This method is called to draw view background.
// Parameters:
// pDC - Pointer to a valid device context
// bClient - TRUE to draw client area; FALSE to draw frame.
//-----------------------------------------------------------------------
virtual void FillPropertyGridView( CDC * pDC , BOOL bClient );
//-----------------------------------------------------------------------
// Summary:
// This method is called to draw single item of the grid.
// Parameters:
// lpDrawItemStruct - A long pointer to a DRAWITEMSTRUCT structure
// that contains information about the type of drawing required.
//-----------------------------------------------------------------------
virtual void DrawItem( PDRAWITEMSTRUCT lpDrawItemStruct );
//-----------------------------------------------------------------------
// Summary:
// Override this method and fill in the MEASUREITEMSTRUCT structure
// to inform Windows of the list-box dimensions.
// Parameters:
// lpMeasureItemStruct - Specifies a long pointer to a MEASUREITEMSTRUCT
// structure.
//-----------------------------------------------------------------------
virtual void MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct );
//-----------------------------------------------------------------------
// Summary:
// This method is called to draw in-place button of the grid.
// Parameters:
// pDC - Pointer to a valid device context
// pButton - Points to a CSPPropertyGridInplaceButton object
//-----------------------------------------------------------------------
virtual void FillInplaceButton( CDC * pDC , CSPPropertyGridInplaceButton * pButton );
//-----------------------------------------------------------------------
// Summary:
// This method is called to refresh the visual metrics of manager.
//-----------------------------------------------------------------------
virtual void RefreshMetrics();
//-----------------------------------------------------------------------
// Summary:
// Call this member to determine if a verb is at a specific point.
// Parameters:
// pDC - Reference to a valid device context
// rcVerbs - Bounding rectangle of all verbs.
// pt - Point to test.
// Returns:
// Index of verb within collection if the point was on a verb,
// otherwise -1.
//-----------------------------------------------------------------------
int HitTestVerbs( CDC * pDC , CRect rcVerbs , CPoint pt );
protected:
//-----------------------------------------------------------------------
// Summary:
// This method is called to draw expand buttons of the grid.
// Parameters:
// dc - Reference to a valid device context
// pItem - Points to a CSPPropertyGridItem object
// rcCaption - Caption button rectangle.
//-----------------------------------------------------------------------
virtual void DrawExpandButton( CDC & dc , CSPPropertyGridItem * pItem , CRect rcCaption );
//-----------------------------------------------------------------------
// Summary:
// This member is called to draw the bounding rectangle for a
// category caption.
// Parameters:
// pDC - Reference to a valid device context
// rc - Bounding rectangle of Category抯 caption.
//-----------------------------------------------------------------------
virtual void DrawCategoryCaptionBackground( CDC * pDC , CRect rc );
protected:
CSPPropertyGrid * m_pGrid; // Parent grid class.
BOOL m_bThemed; // TRUE to use WinXP themes.
CFont m_fntVerbUnderline; // Font used to display the caption of verbs with underline
CFont m_fntVerbNormal; // Font used to display the caption of verbs without underline
//CSPWinThemeWrapper m_themeTree; // Themes for Tree controls.
//CSPWinThemeWrapper m_themeButton; // Themes for button controls
//CSPWinThemeWrapper m_themeCombo; // Themes for combo button.
COLORREF m_clrFace; // Face color.
COLORREF m_clrShadow; // Shadow color.
COLORREF m_clrVerbFace; // Text color of verbs.
};
namespace SPPropertyGridPaintThemes
{
//===========================================================================
// Summary:
// CSPPropertyGridOffice2003Theme is a CSPPropertyGridPaintManager derived
// class. This represents an Office 2003 style theme.
//===========================================================================
class CSPPropertyGridOffice2003Theme : public CSPPropertyGridPaintManager
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CSPPropertyGridOffice2003Theme object.
// Parameters:
// pGrid - Points to a CSPPropertyGrid object
//-----------------------------------------------------------------------
CSPPropertyGridOffice2003Theme( CSPPropertyGrid * pGrid );
//-------------------------------------------------------------------------
// Summary:
// This method is called to refresh the visual metrics of the
// property grid.
//-------------------------------------------------------------------------
virtual void RefreshMetrics();
protected:
BOOL m_bLunaTheme; // TRUE to use luna colors, FALSE otherwise
};
//===========================================================================
// Summary:
// CSPPropertyGridNativeXPTheme is a CSPPropertyGridPaintManager derived
// class. This represents a Native Windows XP style theme.
//===========================================================================
class CSPPropertyGridNativeXPTheme : public CSPPropertyGridPaintManager
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CSPPropertyGridNativeXPTheme object.
// Parameters:
// pGrid - Points to a CSPPropertyGrid object
//-----------------------------------------------------------------------
CSPPropertyGridNativeXPTheme( CSPPropertyGrid * pGrid );
//-------------------------------------------------------------------------
// Summary:
// This method is called to refresh the visual metrics of the
// property grid.
//-------------------------------------------------------------------------
virtual void RefreshMetrics();
};
//===========================================================================
// Summary:
// CSPPropertyGridCoolTheme is a CSPPropertyGridPaintManager derived
// class. This represents a Cool style theme.
//===========================================================================
class CSPPropertyGridCoolTheme : public CSPPropertyGridPaintManager
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CSPPropertyGridCoolTheme object.
// Parameters:
// pGrid - Points to a CSPPropertyGrid object
//-----------------------------------------------------------------------
CSPPropertyGridCoolTheme( CSPPropertyGrid * pGrid );
//-----------------------------------------------------------------------
// Summary:
// This method is called to draw single item of the grid.
// Parameters:
// lpDrawItemStruct - A long pointer to a DRAWITEMSTRUCT structure
// that contains information about the type of drawing required.
//-----------------------------------------------------------------------
virtual void DrawItem( PDRAWITEMSTRUCT lpDrawItemStruct );
//-------------------------------------------------------------------------
// Summary:
// This method is called to refresh the visual metrics of the
// property grid.
//-------------------------------------------------------------------------
void RefreshMetrics();
};
//===========================================================================
// Summary:
// CSPPropertyGridSimpleTheme is a CSPPropertyGridPaintManager derived
// class. This represents a Simple style theme.
//===========================================================================
class CSPPropertyGridSimpleTheme : public CSPPropertyGridPaintManager
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CSPPropertyGridSimpleTheme object.
// Parameters:
// pGrid - Points to a CSPPropertyGrid object
//-----------------------------------------------------------------------
CSPPropertyGridSimpleTheme( CSPPropertyGrid * pGrid );
//-----------------------------------------------------------------------
// Summary:
// This method is called to draw single item of the grid.
// Parameters:
// lpDrawItemStruct - A long pointer to a DRAWITEMSTRUCT structure
// that contains information about the type of drawing required.
//-----------------------------------------------------------------------
virtual void DrawItem( PDRAWITEMSTRUCT lpDrawItemStruct );
//-------------------------------------------------------------------------
// Summary:
// This method is called to refresh the visual metrics of the
// property grid.
//-------------------------------------------------------------------------
void RefreshMetrics();
};
//===========================================================================
// Summary:
// CSPPropertyGridDelphiTheme is a CSPPropertyGridPaintManager derived
// class. This represents a Delphi style theme.
//===========================================================================
class CSPPropertyGridDelphiTheme : public CSPPropertyGridPaintManager
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CSPPropertyGridDelphiTheme object.
// Parameters:
// pGrid - Points to a CSPPropertyGrid object
//-----------------------------------------------------------------------
CSPPropertyGridDelphiTheme( CSPPropertyGrid * pGrid );
//-----------------------------------------------------------------------
// Summary:
// This method is called to draw single item of the grid.
// Parameters:
// lpDrawItemStruct - A long pointer to a DRAWITEMSTRUCT structure
// that contains information about the type of drawing required.
//-----------------------------------------------------------------------
virtual void DrawItem( PDRAWITEMSTRUCT lpDrawItemStruct );
//-------------------------------------------------------------------------
// Summary:
// This method is called to refresh the visual metrics of the
// property grid.
//-------------------------------------------------------------------------
virtual void RefreshMetrics();
};
//===========================================================================
// Summary:
// CSPPropertyGridWhidbeyTheme is a CSPPropertyGridPaintManager derived
// class. This represents a Visual Studio 2005 "Whidbey" style theme.
//===========================================================================
class CSPPropertyGridWhidbeyTheme : public CSPPropertyGridPaintManager
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CSPPropertyGridWhidbeyTheme object.
// Parameters:
// pGrid - Points to a CSPPropertyGrid object
//-----------------------------------------------------------------------
CSPPropertyGridWhidbeyTheme( CSPPropertyGrid * pGrid );
protected:
//-----------------------------------------------------------------------
// Summary:
// This member is called to draw the bounding rectangle for a
// category caption.
// Parameters:
// pDC - Reference to a valid device context
// rc - Bounding rectangle of Category抯 caption.
//-----------------------------------------------------------------------
void DrawCategoryCaptionBackground( CDC * pDC , CRect rc );
//-------------------------------------------------------------------------
// Summary:
// This method is called to refresh the visual metrics of the
// property grid.
//-------------------------------------------------------------------------
void RefreshMetrics();
//-----------------------------------------------------------------------
// Summary:
// This method is called to draw expand buttons of the grid.
// Parameters:
// dc - Reference to a valid device context
// pItem - Points to a CSPPropertyGridItem object
// rcCaption - Caption button rectangle.
//-----------------------------------------------------------------------
void DrawExpandButton( CDC & dc , CSPPropertyGridItem * pItem , CRect rcCaption );
};
}
using namespace SPPropertyGridPaintThemes;
#endif // !defined(_SPPROPERTYGRIDPAINTMANAGER_H__)