www.pudn.com > CDrawLine.zip > Graph.h


#if !defined(AFX_GRAPH_H__9DB68B4D_3C7C_47E2_9F72_EEDA5D2CDBB0__INCLUDED_) 
#define AFX_GRAPH_H__9DB68B4D_3C7C_47E2_9F72_EEDA5D2CDBB0__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
// Graph.h : header file 
////本控件已增加汉语说明并修改了一定的代码,实现更优秀的界面,更强大的功能 
//注意查看说明,如在使用过程中有更好的想法和创意,请把改写后的代码发送到如下 
//email地址:daishaozhong@china.com,本人不胜感激! 
//以下为定义坐标轴的映射模式 
#define DEFAULTMODE     0    //原版本的绘图模式,y轴以像素为单位 
#define RELATIVEMODE    1    //自定义的绘图模式,以设置的tickrange/tickspace为y轴全体再设置单位大小 
///////////////////////////////////////////////////////////////////////////// 
// CGraph window 
 
#include "GraphSeries.h" 
#include "GraphLegend.h" 
 
class CGraph : public CStatic 
{ 
// Construction 
public: 
	CGraph(); 
	CGraph(int type,int drawmode=DEFAULTMODE); 
 
// Attributes 
public: 
 
 
private: 
	int tickSpace;	//number of pixels between "y" axis ticks,y轴单元格大小(单位为像素) 
	CObList* graphSeries; 
	int graphType;	//0 - bar graph, 1 - line graph, 2 - pie 
	int graphAlignment;	//0 - horizontal, 1 - vertical 
	int maxHeight; 
	int maxWidth; 
	CString axisYLabel;//x轴名字 
	CString axisXLabel;//y轴名字 
	int yApexPoint;//y轴顶点坐标 
	int xApexPoint; 
	int yAxisHeight;//y轴能够到达的最大高度(RELATIVEMODE下的可见高度)(tickrange为DEFAULTMODE视图中可见高度) 
	int xAxisWidth; 
	int yTickFontSize;//y轴的单元格字体 
	int xTickFontSize; 
	int legendFontSize;//图例中的字体大小 
	int tickRange;//y轴最大值(单位为像素) 
	int seriesSize;	//number of data elements to map per series(对应最多的一个系列) 
	CGraphLegend graphLegend; 
	BOOL graphHasLegend;//设置图例的标志 
	int legendWidth; 
	COLORREF dataColor[10]; 
	int xAxisAlign;	//0 - horizontal, # - degree rotation 
	int xAxisLabelLength;//所有x轴标签的最大长度 
	CString graphTitle;//所绘图形的标题 
 
	//print settings 
	int topMargin; 
	int bottomMargin; 
	int leftMargin; 
	int rightMargin; 
	int pGraphL, pGraphT, pGraphB, pGraphR; 
 
 
// Operations 
public: 
	void SetTickSpace(int yDist);//设置单元格逻辑大小(RELATIVEMODE模式下)||(或者DEFAULTE模式下的单元格像素数) 
	void SetTickRange(int maxTick);//设置y轴逻辑大小(RELATIVEMODE模式下)||(或者DEFAULTE模式下的y轴像素数) 
	void SetXTickFontSize(int size); 
	void SetYTickFontSize(int size); 
	void SetLegendFontSize(int size); 
	void DrawGraph(CDC* pDC);//使用时调用的主要函数 
	void AddSeries(CGraphSeries* dataSet); 
	void SetXAxisLabel(CString label); 
	void SetYAxisLabel(CString label); 
	void SetLegend(int datagroup, CString label); 
	void SetColor(int group, COLORREF groupColor); 
	void SetXAxisAlignment(int alignValue); 
	void SetGraphType(int gType); 
	void SetGraphTitle(CString title); 
	int PrintGraph(CDC *pDC, CPrintInfo* pInfo); 
	void SetMargins(int top, int bottom, int left, int right, int graphTop); 
 
 
private: 
	float m_nUnits;//在relativemode下每个逻辑单位的像素数 
	UINT m_DrawMode;//对应DEFAULTMODE或者RELATIVEMODE; 
	COLORREF m_background;//窗体的背景颜色 
	void DrawAxis(CDC* pDC); 
	void DrawSeries(CDC* pDC); 
	void DrawLegend(CDC* pDC); 
	COLORREF GetColor(int group); 
	int GetXAxisAlignment(); 
	void PrintLegend(CDC *pDC); 
	void PrintAxis(CDC *pDC); 
	void PrintSeries(CDC *pDC); 
 
 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CGraph) 
	//}}AFX_VIRTUAL 
 
// Implementation 
public: 
	virtual ~CGraph(); 
 
	// Generated message map functions 
protected: 
	//{{AFX_MSG(CGraph) 
		// NOTE - the ClassWizard will add and remove member functions here. 
	//}}AFX_MSG 
 
	DECLARE_MESSAGE_MAP() 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_GRAPH_H__9DB68B4D_3C7C_47E2_9F72_EEDA5D2CDBB0__INCLUDED_)