www.pudn.com > bxt.zip > 2DPushGraph.h


/* =================================================================== 
 
C2DPushGraph Control (2DPushGraph.h and 2DPushGraph.cpp) 
 
Author:  Stuart Konen 
Contact: skonen@gmail.com (Job information welcome) 
 
Description: A push graph control similiar to the graph control located 
in Microsoft's Task Manager. 
 
====================================================================*/ 
 
 
#if !defined(AFX_2DPUSHGRAPH_H_INCLUDED) 
#define AFX_2DPUSHGRAPH_H_INCLUDED 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
 
#include  
#include "afxtempl.h" 
 
///////////////////////////////////////////////////////////////////////////// 
// C2DPushGraph window 
 
 
// =================================================================== 
 
struct GraphColor 
{	 
	GraphColor() { bRed = bGreen = bBlue = 0; } 
 
	operator COLORREF() { return RGB(bRed, bGreen, bBlue); } 
	BYTE bRed, bGreen, bBlue; 
}; 
 
 
// =================================================================== 
 
struct PushGraphLine 
{ 
	PushGraphLine(UINT uiLineID) 
	{ 
		crLine     = RGB(0, 255, 0); 
		uiID       = uiLineID; 
		bShowAsBar = false; 
	} 
 
	COLORREF crLine; 
	UINT     uiID; 
	bool     bShowAsBar; 
 
	CArray aMagnitudes;	 
}; 
 
 
// =================================================================== 
 
class C2DPushGraph : public CWnd 
{ 
public: 
 
	C2DPushGraph(); 
	virtual ~C2DPushGraph(); 
	 
	bool CreateFromStatic( UINT nStaticID, CWnd* pParent ); 
 
 
	/* Functions that retrieve attributes */ 
	 
	LPCTSTR   GetLabelForMax() const; 
	LPCTSTR   GetLabelForMin() const; 
 
 
	COLORREF  GetBGColor()   const;	 
	COLORREF  GetGridColor() const; 
	COLORREF  GetLineColor( UINT uiLineID ); 
	COLORREF  GetTextColor() const;	 
 
	int       GetGridSize()  const; 
	int       GetMaxPeek()   const; 
	int       GetMinPeek()   const; 
 
	unsigned short GetInterval() const;	 
 
 
	/* Functions that set attributes */ 
 
	void SetBGColor(COLORREF crColor); 
	void SetGridColor(COLORREF crColor); 
	void SetTextColor(COLORREF crColor); 
	void SetGridSize( unsigned short usWidthAndHeight ); 
	void SetMaxPeek(int nMax); 
	void SetMinPeek(int nMin); 
	void SetPeekRange(int nMin, int nMax); 
	void SetLabelForMax( LPCTSTR lpszLabel ); 
	void SetLabelForMin( LPCTSTR lpszLabel ); 
	 
	 
	void SetInterval( unsigned short usInterval ); 
	bool SetLineColor( COLORREF crColor, UINT uiLineID ); 
 
	 
	/* Line control functions */ 
	 
	bool    AddLine( UINT uiLineID, COLORREF crColor ); 
	void    RemoveLine( UINT uiLineID ); 
	bool    Push( int nMagnitude, UINT uiLineID ); 
	void    ShowAsBar( UINT uiLineID, bool bAsBar ); 
	void    Update();	 
 
 
	/* Visibility Functions */ 
 
	inline void ShowGrid( bool bShow = true) 
	{ m_bShowGrid = bShow; } 
 
	inline void ShowLabels( bool bShow = true) 
	{ m_bShowMinMax = bShow; } 
 
 
	CRect& getClientRect(); 
 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(C2DPushGraph) 
	//}}AFX_VIRTUAL 
 
	// Generated message map functions 
protected: 
	//{{AFX_MSG(C2DPushGraph) 
	afx_msg BOOL OnEraseBkgnd(CDC* pDC); 
	afx_msg void OnPaint(); 
	afx_msg void OnSizing(UINT fwSide, LPRECT pRect); 
	afx_msg void OnSize(UINT nType, int cx, int cy); 
	//}}AFX_MSG 
 
	static BOOL m_bRegistered; 
	static BOOL RegisterClass(); 
 
	DECLARE_MESSAGE_MAP() 
 
private: 
 
	virtual void   internal_DrawGrid( CDC &dc, CRect &rect ); 
	virtual void   internal_DrawLines( CDC &dc, CRect &rect ); 
	virtual void   internal_DrawBar( CDC &dc, CRect &rect,  
	                                 PushGraphLine& rLine ); 
	virtual void   internal_DrawMinMax( CDC &dc, CRect& rect); 
 
	CDC&           internal_InitBackBuffer( CPaintDC &dc ); 
	void           internal_FreeBackBuffer( CPaintDC &dc ); 
	PushGraphLine* internal_LineFromID( UINT uiLineID ); 
	 
	 
	/* Internal data members */ 
 
 
	COLORREF m_crTextColor; 
	COLORREF m_crBGColor; 
	COLORREF m_crGridColor; 
 
	CString  m_strMaxLabel; 
	CString  m_strMinLabel; 
 
	bool   m_bShowMinMax; 
	bool   m_bShowGrid; 
	bool   m_bStylesModified; 
 
	int    m_nMoveOffset; 
	int    m_nMaxCoords; 
	int    m_nMaxPeek; 
	int    m_nMinPeek; 
	int    m_nGridSize; 
	int    m_nPeekOffset; 
	 
 
	CBitmap  *m_pOldBitmap; // Original bitmap 
	CBitmap  m_bmBack;      // Bitmap for backbuffering	 
    CDC      m_dcBack;	 
 
	unsigned short m_usLineInterval; 
	CArray m_aLines; 
 
}; 
 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_2DPUSHGRAPH_H_INCLUDED)