PE安装不再介绍,看前面的博客。PE下载链接
1、新建单文档程序,名称“000SimpleGraph”。
2.、配置库文件目录
当前工程下新建一\Lib\ProEssentials目录,放置PEGRP32E.lib。
新建\Inc\ProEssentials目录,放置Pegrpapi.h头文件。
新建\bin 目录,放置exe文件。
3.view初始化和析构函数
//view.cpp添加头文件
#include Pegrpapi.h;
//view类成员变量
HWND m_hPE;
构造函数初始化
CMy000SimpleGraphView::CMy000SimpleGraphView()
{
m_hPE=NULL;
}
CMy000SimpleGraphView::~CMy000SimpleGraphView()
{
if (m_hPE)
{
PEdestroy(m_hPE);
m_hPE = 0;
}
}
4、添加绘制图表函数
void CMy000SimpleGraphView::CreateSimpleGraph()
{
//! Right button click to show popup menu. //
//! Double Click to show customization dialog. //
//! Left-Click and drag to draw zoom box. Use popup memu or 'z' to undo zoom. //
// Simple example show the basics of a graph object. //
// Graph's generally only contain YData because we assume
// data is plotted equally spaced left to right.
RECT rect;
GetClientRect( &rect );
m_hPE = PEcreate(PECONTROL_GRAPH, WS_VISIBLE, &rect, m_hWnd, 1001);
if (m_hPE)
{
// Enable middle mouse dragging //
PEnset(m_hPE, PEP_bMOUSEDRAGGINGX, TRUE);
PEnset(m_hPE, PEP_bMOUSEDRAGGINGY, TRUE);
// Enable Bar Glass Effect //
PEnset(m_hPE, PEP_bBARGLASSEFFECT, TRUE);
// Enable Plotting style gradient and bevel features //
PEnset(m_hPE, PEP_nAREAGRADIENTSTYLE, PEPGS_RADIAL_BOTTOM_RIGHT);
PEnset(m_hPE, PEP_nAREABEVELSTYLE, PEBS_MEDIUM_SMOOTH);
PEnset(m_hPE, PEP_nSPLINEGRADIENTSTYLE, PEPGS_RADIAL_BOTTOM_RIGHT);
PEnset(m_hPE, PEP_nSPLINEBEVELSTYLE, PESBS_MEDIUM_SMOOTH);
// Prepare images in memory //
PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
// Pass Data //
PEnset(m_hPE, PEP_nSUBSETS, 4);
PEnset(m_hPE, PEP_nPOINTS, 12);
float fY;
for (int s=0; s<=3; s++)
{
for (int p=0; p<=11; p++)
{
fY = (((float) (p + 1)) * 50.0F) + ((float) rand()/RAND_MAX*250) + 700.0F - ((float) (s * 140.0F)) + ((float) rand()/RAND_MAX);
PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &fY);
}
}
// Set DataShadows to show 3D //
PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS);
PEszset(m_hPE, PEP_szMAINTITLE, TEXT("Units Sold per Month"));
PEszset(m_hPE, PEP_szSUBTITLE, TEXT(""));
PEszset(m_hPE, PEP_szYAXISLABEL, TEXT("Units Sold"));
PEszset(m_hPE, PEP_szXAXISLABEL, TEXT("Month"));
PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_AREA);
PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_BOTH);
PEnset(m_hPE, PEP_bALLOWRIBBON, TRUE);
PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT);
PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT);
// subset labels //
PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 0, TEXT("Texas"));
PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, TEXT("Florida" ));
PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 2, TEXT("Washington" ));
PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 3, TEXT("California" ));
// point labels //
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 0, TEXT("January" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 1, TEXT("February" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 2, TEXT("March" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 3, TEXT("April" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 4, TEXT("May" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 5, TEXT("June" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 6, TEXT("July" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 7, TEXT("August" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 8, TEXT("September" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 9, TEXT("October" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 10, TEXT("November" ));
PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 11, TEXT("December" ));
// subset colors //
DWORD dwArray[4] = { PERGB(128,198,0,0), PERGB(128,0, 198, 198 ), PERGB(128,198,198,0 ), PERGB(128,0,198,0 ) };
PEvsetEx(m_hPE, PEP_dwaSUBSETCOLORS, 0, 4, dwArray, 0);
// subset line types //
int nLineTypes[] = { PELT_MEDIUMSOLID, PELT_MEDIUMSOLID,
PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, PELT_MEDIUMSOLID,
PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, PELT_MEDIUMSOLID};
PEvset(m_hPE, PEP_naSUBSETLINETYPES, nLineTypes, 8);
// subset point types //
int nPointTypes[] = { PEPT_DOTSOLID, PEPT_UPTRIANGLESOLID,
PEPT_SQUARESOLID, PEPT_DOWNTRIANGLESOLID, PEPT_DOT,
PEPT_UPTRIANGLE, PEPT_SQUARE, PEPT_DOWNTRIANGLE };
PEvset(m_hPE, PEP_naSUBSETPOINTTYPES, nPointTypes, 8);
// Allow stacked type graphs //
PEnset(m_hPE, PEP_bNOSTACKEDDATA, FALSE);
// Various other features //
PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_LINE);
PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE);
PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE);
PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE);
PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
PEnset(m_hPE, PEP_nDATAPRECISION, 1);
PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH);
PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE);
PEnset(m_hPE, PEP_nGRIDSTYLE, PEGS_DOT);
// Improves metafile export //
PEnset(m_hPE, PEP_nDPIX, 600);
PEnset(m_hPE, PEP_nDPIY, 600);
PEnset(m_hPE, PEP_nRENDERENGINE, PERE_GDI);//GDI+为PERE_GDIPLUS
// Set Demo's RenderEngine to Gdi Plus VC6.0注释掉下面两句GDI+
// CMDIFrameWnd* pWnd = (CMDIFrameWnd*) AfxGetApp()->GetMainWnd();
// pWnd->SendMessage(WM_CHANGE_METAFILE, PEPLAYMETAFILEGDIPLUS );
}
}
5、OnDraw中调用绘图函数
void CMy000SimpleGraphView::OnDraw(CDC* pDC)
{
CMy000SimpleGraphDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CreateSimpleGraph();
}
最后结果