www.gusucode.com > C++完美工业曲线控件源程序源码程序 > C++完美工业曲线控件源程序源码程序/code/GraphicView.cpp
//Download by http://www.NewXing.com // GraphicView.cpp : implementation of the CGraphicView class // #include "stdafx.h" #include "Graphic.h" #include "Pegrpapi.h" #include "GraphicDoc.h" #include "GraphicView.h" #include "math.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #include "CoolControlsManager.h" #define GetRandom(min,max) ((rand()%(int)(((max)+1)-(min)))+(min)) ///////////////////////////////////////////////////////////////////////////// // CGraphicView IMPLEMENT_DYNCREATE(CGraphicView, CView) BEGIN_MESSAGE_MAP(CGraphicView, CView) //{{AFX_MSG_MAP(CGraphicView) ON_COMMAND(ID_DRAW_BAR, OnDrawBar) ON_WM_ERASEBKGND() ON_COMMAND(ID_DRAW_LINE, OnDrawLine) ON_COMMAND(ID_DRAW_PIE, OnDrawPie) ON_COMMAND(ID_DRAW_SCATTER, OnDrawScatter) ON_COMMAND(ID_DRAW_WHISKER, OnDrawWhisker) ON_COMMAND(ID_DRAW_STACKED_BAR, OnDrawStackedBar) ON_COMMAND(ID_DRAW_XY_LINE, OnDrawXyLine) ON_WM_TIMER() ON_COMMAND(ID_DRAW_3D_BAR, OnDraw3dBar) ON_COMMAND(ID_DRAW_3D_STACKED_BAR, OnDraw3dStackedBar) ON_COMMAND(ID_DRAW_3D_LINE, OnDraw3dLine) ON_COMMAND(ID_DRAW_3D_PIE, OnDraw3dPie) ON_COMMAND(ID_BK_LINE, OnBkLine) ON_COMMAND(ID_BK_XY, OnBkXy) ON_COMMAND(ID_BK_AREA, OnBkArea) ON_COMMAND(ID_BK_BAR, OnBkBar) ON_COMMAND(ID_BK_BAR_GROUP, OnBkBarGroup) ON_COMMAND(ID_BK_PIE, OnBkPie) ON_COMMAND(ID_BUTTON32781, OnButton32781) ON_WM_SIZE() ON_COMMAND(ID_DRAW_NEW, OnDrawNew) ON_COMMAND(ID_DRAW_SILE, OnDrawSile) ON_COMMAND(ID_REAL, OnReal) ON_COMMAND(ID_DRAWGRAPH, OnDrawgraph) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CGraphicView construction/destruction CGraphicView::CGraphicView() { // TODO: add construction code here m_nRealTimeCounter = 0; m_nSinCounter = 0; } CGraphicView::~CGraphicView() { } BOOL CGraphicView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CGraphicView drawing void CGraphicView::OnDraw(CDC* pDC) { CGraphicDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } ///////////////////////////////////////////////////////////////////////////// // CGraphicView printing BOOL CGraphicView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CGraphicView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CGraphicView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CGraphicView diagnostics #ifdef _DEBUG void CGraphicView::AssertValid() const { CView::AssertValid(); } void CGraphicView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CGraphicDoc* CGraphicView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGraphicDoc))); return (CGraphicDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CGraphicView message handlers void CGraphicView::OnInitialUpdate() { CView::OnInitialUpdate(); AfxGetApp()->GetMainWnd()->SetWindowText(_T("曲线显示完整版 V1.0")); GetCtrlManager().InstallHook();//使所有控件浮动 // OnDraw3dStackedBar(); // TODO: Add your specialized code here and/or call the base class } void CGraphicView::OnDrawBar() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } if(m_hPE) m_hPE=NULL; //! Right button click to show popup menu. // //! Double Click to show customization dialog. // // This example builds upon the basic CreateSimpleGraph '000' example chart // CreateSimpleGraph(); // Below tells object to automatically generate statistical // comparison subsets, object will actually have // 6 subsets when finished initializing. int nArray[2]; nArray[0] = PEAS_AVGAP; nArray[1] = PEAS_AVGPP; PEvset (m_hPE, PEP_naAUTOSTATSUBSETS, nArray, 2); // Other various properties // PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_LINE); PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE_INSIDE_AXIS); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR); PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE); } void CGraphicView::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. m_canReal=FALSE; CRect rect; GetClientRect( rect ); m_hPE = PEcreate(PECONTROL_GRAPH, WS_CHILD|WS_VISIBLE, &rect, m_hWnd, 1001); if (m_hPE) { // 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) + GetRandom(2, 250); PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &fY); } } // Set DataShadows to show 3D // PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS); PEnset(m_hPE, PEP_nBORDERTYPES, PETAB_DROP_SHADOW); PEszset(m_hPE, PEP_szMAINTITLE, "历史线性统计曲线"); PEszset(m_hPE, PEP_szSUBTITLE, "程序设计与实现--戚高"); PEszset(m_hPE, PEP_szYAXISLABEL, "最大应用量"); PEszset(m_hPE, PEP_szXAXISLABEL, "月份"); PEnset(m_hPE, PEP_bFOCALRECT, FALSE); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);//现实类型 PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_NONE);//是否有X,Y 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, "长沙" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, "上海" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 2, "北京" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 3, "广州" ); // point labels // PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 0, "一月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 1, "二月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 2, "三月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 3, "四月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 4, "五月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 5, "六月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 6, "七月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 7, "八月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 8, "九月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 9, "十月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 10, "十一月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 11, "十二月" ); // subset colors // DWORD dwArray[4] = { RGB(198,0,0), RGB( 0, 198, 198 ), RGB( 198,198,0 ), RGB( 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_nGRAPHPLUSTABLE, PEGPT_BOTH); 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); } } BOOL CGraphicView::OnEraseBkgnd(CDC* pDC) { return TRUE; } void CGraphicView::OnDrawLine() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } if(m_hPE) m_hPE=NULL; CreateSimpleGraph(); int nArray[2]; nArray[0] = PEAS_AVGAP; nArray[1] = PEAS_AVGPP; PEvset (m_hPE, PEP_naAUTOSTATSUBSETS, nArray, 2); nArray[0] = 4; // fourth subset nArray[1] = 5; // fifth subset PEvset(m_hPE, PEP_naRANDOMSUBSETSTOGRAPH, nArray, 2); PEnset(m_hPE, PEP_nSCROLLINGSUBSETS, 1); PEnset(m_hPE, PEP_nTABLEWHAT, PETW_ALLSUBSETS); PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH); PEnset(m_hPE, PEP_nDATAPRECISION, 0); PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE); PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER); PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE_INSIDE_AXIS); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR); PEnset(m_hPE, PEP_nBESTFITDEGREE, PEBFD_4TH); PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE); PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE); } void CGraphicView::OnDrawPie() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } // This example builds upon the basic CreateSimpleGraph '000' example chart // CreateSimpleGraph(); // Disable default scale // PEnset(m_hPE, PEP_nSHOWYAXIS, PESA_EMPTY); // Generally, a custom y axis will need manual range control // PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX); double manminY = 0.0F; PEvset(m_hPE, PEP_fMANUALMINY, &manminY, 1); double manmaxY = 1000.0F; PEvset(m_hPE, PEP_fMANUALMAXY, &manmaxY, 1); // Create custom grid lines with HorzLineAnnotations // // Note that GridLineControl will control these annotations // double horzlineannot = 200.0F; PEvsetcell(m_hPE, PEP_faHORZLINEANNOTATION, 0, &horzlineannot); int horzlinetyp = PELAT_GRIDLINE; PEvsetcell(m_hPE, PEP_naHORZLINEANNOTATIONTYPE, 0, &horzlinetyp); PEvsetcell(m_hPE, PEP_szaHORZLINEANNOTATIONTEXT, 0, "|LLow Value"); horzlineannot = 500.0F; PEvsetcell(m_hPE, PEP_faHORZLINEANNOTATION, 1, &horzlineannot); horzlinetyp = PELAT_GRIDLINE; PEvsetcell(m_hPE, PEP_naHORZLINEANNOTATIONTYPE, 1, &horzlinetyp); PEvsetcell(m_hPE, PEP_szaHORZLINEANNOTATIONTEXT, 1, "|LMedium Value"); horzlineannot = 800.0F; PEvsetcell(m_hPE, PEP_faHORZLINEANNOTATION, 2, &horzlineannot); horzlinetyp = PELAT_GRIDLINE; PEvsetcell(m_hPE, PEP_naHORZLINEANNOTATIONTYPE, 2, &horzlinetyp); PEvsetcell(m_hPE, PEP_szaHORZLINEANNOTATIONTEXT, 2, "|LHigh Value"); horzlineannot = 350.0F; PEvsetcell(m_hPE, PEP_faHORZLINEANNOTATION, 3, &horzlineannot); horzlinetyp = PELAT_GRIDTICK; PEvsetcell(m_hPE, PEP_naHORZLINEANNOTATIONTYPE, 3, &horzlinetyp); PEvsetcell(m_hPE, PEP_szaHORZLINEANNOTATIONTEXT, 3, ""); horzlineannot = 650.0F; PEvsetcell(m_hPE, PEP_faHORZLINEANNOTATION, 4, &horzlineannot); horzlinetyp = PELAT_GRIDTICK; PEvsetcell(m_hPE, PEP_naHORZLINEANNOTATIONTYPE, 4, &horzlinetyp); PEvsetcell(m_hPE, PEP_szaHORZLINEANNOTATIONTEXT, 4, ""); // Set LeftMargin to allocate space for line annotation text // // Use the longest string used in annotations. PEszset(m_hPE, PEP_szLEFTMARGIN, "Medium Value "); // Set this to see annotations // PEnset(m_hPE, PEP_bSHOWANNOTATIONS, TRUE); // Increase line annotation text size // PEnset(m_hPE, PEP_nLINEANNOTATIONTEXTSIZE, 100); // Put Grid In Front of Bars // PEnset(m_hPE, PEP_bGRIDINFRONT, TRUE); // Other various properties // PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_LIGHT_INSET); } void CGraphicView::OnDrawScatter() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } CreateSimpleGraph(); DWORD color; for (int s=0;s<=3;s++) //4-1 { for (int p=0;p<=11;p++) { switch(s) { case 0: color = RGB(15 + ((p + 1) * 20), 0, 0); PEvsetcellEx(m_hPE, PEP_dwaPOINTCOLORS, s, p, &color); break; case 1: color = RGB(0, 15 + ((p + 1) * 20), 0); PEvsetcellEx(m_hPE, PEP_dwaPOINTCOLORS, s, p, &color); break; case 2: color = RGB(0, 0, 15 + ((p + 1) * 20)); PEvsetcellEx(m_hPE, PEP_dwaPOINTCOLORS, s, p, &color); break; case 3: color = RGB(0, 15 + ((p + 1) * 20), 15 + ((p + 1) * 20)); PEvsetcellEx(m_hPE, PEP_dwaPOINTCOLORS, s, p, &color); break; default: break; } } } color = RGB(198, 0, 0); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 0, &color); color = RGB(0, 198, 0); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 1, &color); color = RGB(0, 0, 198); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 2, &color); color = RGB(0, 198, 198); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 3, &color); PEnset(m_hPE, PEP_nSCROLLINGSUBSETS, 1); PEnset(m_hPE, PEP_nTABLEWHAT, PETW_ALLSUBSETS); PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE); PEnset(m_hPE, PEP_dwGRAPHBACKCOLOR, 1); PEnset(m_hPE, PEP_nGRAPHGRADIENTSTYLE, 0); PEnset(m_hPE, PEP_dwSHADOWCOLOR, RGB(0, 0, 0)); PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH); PEnset(m_hPE, PEP_nDATAPRECISION, 0); PEnset(m_hPE, PEP_nFORCEVERTICALPOINTS, PEFVP_SLANTED); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR); PEnset(m_hPE, PEP_nBORDERTYPES, PETAB_NO_BORDER); } void CGraphicView::OnDrawWhisker() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } //! Try this... Right Click chart and change the Plotting Method to Horizontal Bar Stacked. // // This example builds upon the basic CreateSimpleGraph '000' example chart // CreateSimpleGraph(); // Enable Stacked type charts // PEnset(m_hPE, PEP_bNOSTACKEDDATA, FALSE); // Set plotting method // PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BARSTACKED); // Add a table // PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH); PEnset(m_hPE, PEP_nDATAPRECISION, 2); PEnset(m_hPE, PEP_bALLOWHORZBARSTACKED, TRUE); } void CGraphicView::OnDrawStackedBar() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } //! 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. // // This example builds upon the basic CreateSimpleGraph '000' example chart // CreateSimpleGraph(); // Now sub-divide subsets into 4 individual axes // // Each axis with one subset in each // int nArray[4] = {1,1,1,1}; PEvset (m_hPE, PEP_naMULTIAXESSUBSETS, nArray, 4); // Set first axis parameters // PEnset(m_hPE, PEP_nWORKINGAXIS, 0); PEszset(m_hPE, PEP_szYAXISLABEL, "标度1"); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR); // Set second axis parameters // PEnset(m_hPE, PEP_nWORKINGAXIS, 1); PEszset(m_hPE, PEP_szYAXISLABEL, "标度2"); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR); // Set third axis parameters // PEnset(m_hPE, PEP_nWORKINGAXIS, 2); PEszset(m_hPE, PEP_szYAXISLABEL, "标度3"); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR); // Set fourth axis parameters // PEnset(m_hPE, PEP_nWORKINGAXIS, 3); PEszset(m_hPE, PEP_szYAXISLABEL, "标度4"); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR); // Reset WorkingAxis when done // PEnset(m_hPE, PEP_nWORKINGAXIS, 0); // Add Axis Separator // PEnset(m_hPE, PEP_nMULTIAXESSEPARATORS, PEMAS_THICKPLUSTICK); // Axis Sizing // PEnset(m_hPE, PEP_nMULTIAXESSIZING, TRUE); // Get rid of 3d stuff // PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_NONE); // Other various properties // PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_NO_BORDER); PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE); } void CGraphicView::OnDrawXyLine() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } RECT rect; GetClientRect( &rect ); m_canReal=TRUE; m_Real=TRUE; char szSubsets[] = "电流\t电压\t频率\t"; PEvset (m_hPE, PEP_szaSUBSETLABELS, szSubsets, 3); // Set Various Other Properties /// PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_INSET); m_hPE = PEcreate(PECONTROL_GRAPH, WS_VISIBLE, &rect, m_hWnd, 1001); PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE); PEnset(m_hPE, PEP_bCACHEBMP, TRUE); PEnset(m_hPE, PEP_nSUBSETS, 2); // set number of subsets PEnset(m_hPE, PEP_nPOINTS, 200); // number of data points PEnset(m_hPE, PEP_nPOINTSTOGRAPH, 20); PEnset(m_hPE, PEP_nPOINTSTOGRAPHINIT, PEPTGI_LASTPOINTS); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSLINE); PEszset(m_hPE, PEP_szMAINTITLE, "实时曲线示例"); PEszset(m_hPE, PEP_szSUBTITLE, "编程设计实现-戚高"); // no subtitle PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX); double manminY = 1.0F; PEvset(m_hPE, PEP_fMANUALMINY, &manminY, 1); double manmaxY = 100.0F; PEvset(m_hPE, PEP_fMANUALMAXY, &manmaxY, 1); PEszset(m_hPE, PEP_szMANUALMAXPOINTLABEL, "000.000" ); PEszset(m_hPE, PEP_szMANUALMAXDATASTRING, "00:00:00xx"); PEnset(m_hPE, PEP_bNOSTACKEDDATA, TRUE); PEnset(m_hPE, PEP_bNORANDOMPOINTSTOGRAPH, TRUE); PEnset(m_hPE, PEP_bALLOWHISTOGRAM, FALSE); PEnset(m_hPE, PEP_bFOCALRECT, FALSE); PEnset(m_hPE, PEP_nGRIDLINECONTROL, FALSE); PEnset(m_hPE, PEP_nDATAPRECISION, 1); PEszset(m_hPE, PEP_szaPOINTLABELS, ""); float f1 = 0.0F; PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 0, &f1); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 1, &f1); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 2, &f1); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 3, &f1); PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, FALSE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_LIGHT_SHADOW); PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); 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_nFONTSIZE, PEFS_LARGE); } void CGraphicView::OnTimer(UINT nIDEvent) { CString ttext; double newx2; float YData[250]; double XData[250]; double dx; CTime t; TM petm; if(m_canReal) { if(nIDEvent==2) { if(m_Real) { float newy = 50.0F + float(sin((double) m_nSinCounter * 0.075F) * 30.0F) + GetRandom(1, 15); float newy1,newy2; newy1 = 50.0F - float(sin((double) m_nSinCounter * 0.075F) * 30.0F) + GetRandom(1, 15); newy2 = 50.0F + float(sin((double) m_nSinCounter * 0.075F) * 30.0F) - GetRandom(1, 15); // Determine newx2 as current date and time in VB format // t = CTime::GetCurrentTime(); petm.nDay = t.GetDay(); petm.nMonth = t.GetMonth(); petm.nYear = t.GetYear() - 1900; petm.nHour = t.GetHour(); petm.nMinute = t.GetMinute(); petm.nSecond = t.GetSecond(); PEcreateserialdate(&newx2, &petm, PEDTM_VB); // Shift data when counter reaches end of data // if(m_nRealTimeCounter >= 1999) { memset(YData, 0, 250 * sizeof(float)); memset(XData, 0, 250 * sizeof(double)); // Shift Data by 250 data points, oldest 250 will be lost. m_nRealTimeCounter = m_nRealTimeCounter - 250; PEvset(m_hPE, PEP_faAPPENDYDATA, YData, 250); PEvset(m_hPE, PEP_faAPPENDXDATAII, XData, 250); } // Store new values at current index // PEvsetcellEx(m_hPE, PEP_faXDATAII, 0, m_nRealTimeCounter, &newx2); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, m_nRealTimeCounter, &newy); // Store new values at current index // PEvsetcellEx(m_hPE, PEP_faXDATAII, 1, m_nRealTimeCounter, &newx2); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, m_nRealTimeCounter, &newy1); // Store new values at current index // PEvsetcellEx(m_hPE, PEP_faXDATAII, 2, m_nRealTimeCounter, &newx2); PEvsetcellEx(m_hPE, PEP_faYDATA, 2, m_nRealTimeCounter, &newy2); // Increment index counter // m_nRealTimeCounter += 1; // SinCounter is only to produce sin wave data // m_nSinCounter += 1; if (m_nSinCounter > 30000) m_nSinCounter = 1; // If current time is beyond zoom max, the re-adjust zoom max // if (newx2 > ZoomEnd) { ZoomEnd = ZoomEnd + ZoomSmallInterval; ZoomStart = ZoomEnd - ZoomInterval; PEvset(m_hPE, PEP_fZOOMMINX, &ZoomStart, 1); PEvset(m_hPE, PEP_fZOOMMAXX, &ZoomEnd, 1); PEvgetcellEx(m_hPE, PEP_faXDATAII, 0, 1, &dx); PEvset(m_hPE, PEP_fMANUALMINX, &dx, 1); PEvset(m_hPE, PEP_fMANUALMAXX, &ZoomEnd, 1); } // Update image and force paint // PEreinitialize( m_hPE ); PEresetimage( m_hPE, 0, 0 ); ::InvalidateRect(m_hPE, NULL, FALSE); } } else { if(m_Real) { /*PEvset(m_hPE, PEP_szaAPPENDPOINTLABELDATA, NULL, 1); // make some random data // float r1,r2,fNew[2]; r1 = (float) GetRandom(1, 20); r2 = (float) GetRandom(1, 100); fNew[0] = r1 + (r2 * .0001F); fNew[1] = fNew[0] * 4; PEvset(m_hPE, PEP_faAPPENDYDATA, &fNew[0], 1);*/ /////////////////////////////////// float newy = 50.0F + float(sin((double) m_nSinCounter * 0.075F) * 30.0F) + GetRandom(1, 15); float newx = (float)m_nRealTimeCounter; // Append new values // PEvset(m_hPE, PEP_faAPPENDYDATA, &newy, 1); PEvset(m_hPE, PEP_faAPPENDXDATA, &newx, 1); m_nRealTimeCounter = m_nRealTimeCounter + 1; // Switch to AutoScaling x axis after receiving 100 data points // if (m_nRealTimeCounter == 100) PEnset(m_hPE, PEP_nMANUALSCALECONTROLX, PEMSC_NONE); // SinCounter is only to produce sin wave data // m_nSinCounter = m_nSinCounter + 1; if (m_nSinCounter > 30000) m_nSinCounter = 1; // Update image and force paint // PEreinitialize( m_hPE ); PEresetimage( m_hPE, 0, 0 ); ::InvalidateRect(m_hPE, NULL, FALSE); } else { ////********************************************** float newy,newx; newy = 50.0F + float(sin((double) m_nSinCounter * 0.075F) * 30.0F) + GetRandom(1, 15); newx = float(m_nRealTimeCounter); // Update new data at current index // PEvsetcellEx(m_hPE, PEP_faYDATA, 0, m_nRealTimeCounter, &newy); PEvsetcellEx(m_hPE, PEP_faXDATA, 0, m_nRealTimeCounter, &newx); newy = 50.0F - float(sin((double) m_nSinCounter * 0.075F) * 30.0F) + GetRandom(1, 15); newx = float(m_nRealTimeCounter); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, m_nRealTimeCounter, &newy); PEvsetcellEx(m_hPE, PEP_faXDATA, 1, m_nRealTimeCounter, &newx); newy = 50.0F + float(sin((double) m_nSinCounter * 0.075F) * 12.0F) - GetRandom(1, 15); newx = float(m_nRealTimeCounter); PEvsetcellEx(m_hPE, PEP_faYDATA, 2, m_nRealTimeCounter, &newy); PEvsetcellEx(m_hPE, PEP_faXDATA, 2, m_nRealTimeCounter, &newx); double dx; dx = (double) newx; PEvsetcell(m_hPE, PEP_faVERTLINEANNOTATION, 0, &dx); PEvsetcell(m_hPE, PEP_faVERTLINEANNOTATION, 2, &dx); PEvsetcell(m_hPE, PEP_faVERTLINEANNOTATION, 3, &dx); int lt = PELT_MEDIUMSOLID; PEvsetcell(m_hPE, PEP_naVERTLINEANNOTATIONTYPE, 0, <); COLORREF col; col = RGB(0,0,198); PEvsetcell(m_hPE, PEP_dwaVERTLINEANNOTATIONCOLOR, 0, &col); col = RGB(0,198,0); PEvsetcell(m_hPE, PEP_dwaVERTLINEANNOTATIONCOLOR, 1, &col); col = RGB(255,198,0); PEvsetcell(m_hPE, PEP_dwaVERTLINEANNOTATIONCOLOR, 2, &col); // Increment counter // m_nRealTimeCounter = m_nRealTimeCounter + 1; // Reset counter at end of data // if (m_nRealTimeCounter == 100) m_nRealTimeCounter = 0; // SinCounter is only to produce sin wave data // m_nSinCounter = m_nSinCounter + 1; if (m_nSinCounter > 30000) m_nSinCounter = 1; // Update image and force paint // PEreinitialize( m_hPE ); // PEresetimage( m_hPE, 0, 0 ); // PEresetimage( m_hPE, 1, 0 ); PEresetimage( m_hPE, 2, 0 ); ::InvalidateRect(m_hPE, NULL, FALSE); } } } CView::OnTimer(nIDEvent); } void CGraphicView::OnDraw3dBar() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } //! This shows how to place extra text inside table and within an axis. // //! Maximize to allow room for textual data which is drawn as fixed font size. // // This example builds upon the basic CreateSimpleGraph '000' example chart // CreateSimpleGraph(); // Create two y axes // int nMAS[] = {2, 2}; PEvset(m_hPE, PEP_naMULTIAXESSUBSETS, nMAS, 2); // Construct a simple table annotation // PEnset(m_hPE, PEP_nWORKINGTABLE, 0); PEnset(m_hPE, PEP_nTAROWS, 6); PEnset(m_hPE, PEP_nTACOLUMNS, 12); // 12 is same number as PEP_nPOINTS // Pass the table text // char szTmp[48]; float fp; int r, c; DWORD dwColor; BOOL b = TRUE; for (r=0; r<6; r++) { if (b) dwColor = RGB(175,175,175); else dwColor = RGB(255,255,255); b = !b; for (c=0; c<12; c++) { fp = float(sin(0.03F * (double) c + 1.0F + r) * 500.0F) + (float) GetRandom(2, 50); sprintf(szTmp, "%.3f ", fp); PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, c, szTmp); PEvsetcellEx(m_hPE, PEP_dwaTACOLOR, r, c, &dwColor); } } // Set Table Location // PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_AXIS_1); PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_BOTTOM_TABLE_SPACED); // Other Table Related Properties /// PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE); PEnset(m_hPE, PEP_nTABORDER, PETAB_NO_BORDER); PEnset(m_hPE, PEP_dwTABACKCOLOR, 1); PEnset(m_hPE, PEP_dwTAFORECOLOR, 1); // Construct a second simple table annotation // PEnset(m_hPE, PEP_nWORKINGTABLE, 1); PEnset(m_hPE, PEP_nTAROWS, 6); PEnset(m_hPE, PEP_nTACOLUMNS, 12); // Pass the table text // b = TRUE; for (r=0; r<6; r++) { if (b) dwColor = RGB(175,175,175); else dwColor = RGB(255,255,255); b = !b; for (c=0; c<12; c++) { fp = float(sin(0.03F * (double) c + 1.0F + (2 * r)) * 500.0F) + (float) GetRandom(2, 50); sprintf(szTmp, "%.3f ", fp); PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, c, szTmp); PEvsetcellEx(m_hPE, PEP_dwaTACOLOR, r, c, &dwColor); } } // Set Table Location // PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_AXIS); PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_BOTTOM_TABLE_SPACED); // Other Table Related Properties /// PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE); PEnset(m_hPE, PEP_nTABORDER, PETAB_NO_BORDER); PEnset(m_hPE, PEP_dwTABACKCOLOR, 1); PEnset(m_hPE, PEP_dwTAFORECOLOR, 1); // Construct a third simple table annotation // PEnset(m_hPE, PEP_nWORKINGTABLE, 2); PEnset(m_hPE, PEP_nTAROWS, 2); PEnset(m_hPE, PEP_nTACOLUMNS, 13); // Pass the table text // for (r=0; r<2; r++) { for (c=1; c<13; c++) { fp = float(sin(0.03F * (double) c + 1.0F) * 500.0F) + (float) GetRandom(2, 50); sprintf(szTmp, "%.3f ", fp); PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, c, szTmp); } } // Set Table Location // PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_TABLE); PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_TOP_TABLE_SPACED); // Other Table Related Properties /// PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE); PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(0,198,198)); PEnset(m_hPE, PEP_bTAHEADERCOLUMN, TRUE); // Set Text for Header Column // strcpy(szTmp, "Table Annotation Line 1"); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 0, szTmp); strcpy(szTmp, "Table Annotation Line 2"); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 1, 0, szTmp); // Done setting Table Annotations /// // Set Various Other Properties /// PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_SHADOW); PEnset(m_hPE, PEP_nDATAPRECISION, 0); PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH); PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE_INSIDE_AXIS); PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_YAXIS); PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE); PEnset(m_hPE, PEP_nFONTSIZE, PEFS_SMALL); PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS); PEnset(m_hPE, PEP_bSHOWLEGEND, FALSE); PEnset(m_hPE, PEP_nWORKINGAXIS, 0); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR); PEnset(m_hPE, PEP_nRYAXISCOMPARISONSUBSETS, 1); PEnset(m_hPE, PEP_dwRYAXISCOLOR, RGB(0, 198,198)); PEszset(m_hPE, PEP_szYAXISLABEL, ""); PEszset(m_hPE, PEP_szRYAXISLABEL, ""); PEnset(m_hPE, PEP_nWORKINGAXIS, 1); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR); PEnset(m_hPE, PEP_nRYAXISCOMPARISONSUBSETS, 1); PEnset(m_hPE, PEP_dwRYAXISCOLOR, RGB(0, 198,0)); PEszset(m_hPE, PEP_szYAXISLABEL, ""); PEszset(m_hPE, PEP_szRYAXISLABEL, ""); DWORD dwArray[4] = { RGB(138,0,0), RGB(0, 198, 198), RGB(138,138,0), RGB(0,198,0) }; PEvsetEx(m_hPE, PEP_dwaSUBSETCOLORS, 0, 4, dwArray, 0); PEnset(m_hPE, PEP_nSHOWTABLEANNOTATIONSMENU, PEMC_SHOW); } void CGraphicView::OnDraw3dStackedBar() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } //! Chart fills 100 points and once 100 points have //! been passed, old data is over-written as more //! data is passed to chart. m_canReal=TRUE; m_Real=FALSE; RECT rect; GetClientRect( &rect ); // Construct Object // m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1001); PEnset(m_hPE, PEP_nSUBSETS, 3); PEnset(m_hPE, PEP_nPOINTS, 100); // Set Manual Y scale // PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX); double arg = 1.0F;// PEvset(m_hPE, PEP_fMANUALMINY, &arg, 1); arg = 100.0F; PEvset(m_hPE, PEP_fMANUALMAXY, &arg, 1); // Set Manual X scale // PEnset(m_hPE, PEP_nMANUALSCALECONTROLX, PEMSC_MINMAX); arg = 1.0F; PEvset(m_hPE, PEP_fMANUALMINX, &arg, 1); arg = 100.0F; PEvset(m_hPE, PEP_fMANUALMAXX, &arg, 1); // Show Annotations // PEnset(m_hPE, PEP_bSHOWANNOTATIONS, TRUE); // Clear out default data // float val = 0; PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 0, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 1, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 2, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 3, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 0, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 1, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 2, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 3, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 0, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 1, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 2, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 3, &val); int nTmpStyle; nTmpStyle = PELT_THINSOLID; PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 0, &nTmpStyle); PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 1, &nTmpStyle); PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 2, &nTmpStyle); // PEvset(m_hPE, PEP_naSUBSETLINETYPES, PELT_THINSOLID, 0); char szSubsets[] = "电流\t电压\t频率\t"; PEvset (m_hPE, PEP_szaSUBSETLABELS, szSubsets, 3); // Set Various Other Properties /// PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_LINE); PEszset(m_hPE, PEP_szMAINTITLE, "工业控制实时曲线示例"); PEszset(m_hPE, PEP_szSUBTITLE, "编程设计实现--戚高"); PEnset(m_hPE, PEP_bNORANDOMPOINTSTOEXPORT, TRUE); PEnset(m_hPE, PEP_bFOCALRECT, FALSE); PEnset(m_hPE, PEP_bALLOWBAR, FALSE); PEnset(m_hPE, PEP_bALLOWPOPUP, FALSE); PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE); PEnset(m_hPE, PEP_bCACHEBMP, TRUE); PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); DWORD col = RGB(0, 198, 198); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 0, &col); col = RGB(0,198,0); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 1, &col); col = RGB(255,0,0); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 2, &col); 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); PEreinitialize(m_hPE); PEresetimage(m_hPE, 2, 0); ::InvalidateRect(m_hPE, NULL, FALSE); //Initialize Counters and Timer m_nRealTimeCounter = 1; m_nSinCounter = 1; SetTimer( 1, 100, NULL ); } void CGraphicView::OnDraw3dLine() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } m_canReal=FALSE; RECT rect; GetClientRect( &rect ); // Construct Object // m_hPE = PEcreate(PECONTROL_PGRAPH, WS_VISIBLE, &rect, m_hWnd, 1001); PEnset(m_hPE, PEP_nSUBSETS, 2); PEnset(m_hPE, PEP_nPOINTS, 360); int p; float f1, f2; for (p=0; p<360; p++) { f1 = (float) p; f2 = (float) 150 * (float)sin((double) p * 0.054F); PEvsetcellEx(m_hPE, PEP_faXDATA, 0, p, &f1); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, p, &f2); } for (p=0; p<360; p++) { f1 = (float) p; f2 = (float) 150 * (float)sin(((double) p * 0.044F)) * 2; PEvsetcellEx(m_hPE, PEP_faXDATA, 1, p, &f1); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, p, &f2); } PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_LINE); PEnset(m_hPE, PEP_nALLOWZOOMING, 1); PEszset(m_hPE, PEP_szMAINTITLE, "Polar Chart"); PEszset(m_hPE, PEP_szSUBTITLE, ""); // no subtitle float ftmp = .9F; PEvset(m_hPE, PEP_fFONTSIZELEGENDCNTL, &ftmp, 1 ); PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE); PEnset(m_hPE, PEP_bCACHEBMP, TRUE); PEnset(m_hPE, PEP_bFOCALRECT, FALSE); // Set line types int nTypes[] = { PELT_MEDIUMSOLID, PELT_MEDIUMSOLID }; PEvset(m_hPE, PEP_naSUBSETLINETYPES, nTypes, 2); // Set point types int nPTypes[] = { PEPT_DOTSOLID, PEPT_PLUS }; PEvset(m_hPE, PEP_naSUBSETPOINTTYPES, nTypes, 2); // subset colors DWORD dwArray[2] = { RGB(198,0,0), RGB(0, 198, 0) }; PEvset( m_hPE, PEP_dwaSUBSETCOLORS, dwArray, 2); // subset labels PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 0, "Signal #1" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, "Signal #2" ); double dnull = -99999.0F; PEvset(m_hPE, PEP_fNULLDATAVALUEX, &dnull, 1); PEvset(m_hPE, PEP_fNULLDATAVALUE, &dnull, 1); // Set Various other features // PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER); PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE); PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE); PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE); PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT); PEnset(m_hPE, PEP_nPOINTSIZE, PEPS_SMALL); 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_nGRADIENTBARS, 8); PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS); float f = 1.2F; PEvset(m_hPE, PEP_fFONTSIZEGNCNTL, &f, 1); // Enable Smith Mode // PEnset(m_hPE, PEP_nSMITHCHART, PESC_SMITH); PEszset(m_hPE, PEP_szMAINTITLE, "Smith Chart"); // Change the data to something more appropriate // PEnset(m_hPE, PEP_nSUBSETS, 2); PEnset(m_hPE, PEP_nPOINTS, 40); // Set first subset's data // int s = 0; for (p=0; p<=39; p++) { f = (float) p * 0.1F; PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f); f = (float) sin((double) p * 0.54F) * 0.2F; PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &f); } // Set second subset's data // s = 1; for (p=0; p<=39; p++) { f = (float) p * 0.5F; PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f); f = (float) sin((double) p * 0.44F) * 0.5F; PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &f); } // Set Various other features // PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_SHADOW); // Add Some Padding on Right and Bottom // PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400); } void CGraphicView::OnDraw3dPie() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } RECT rect; GetClientRect( &rect ); m_canReal=FALSE; m_hPE = PEcreate(PECONTROL_PIE, WS_VISIBLE, &rect, m_hWnd, 1001); PEnset(m_hPE, PEP_nSUBSETS, 5); PEnset(m_hPE, PEP_nPOINTS, 12); int s,p; for (s=0; s<5; s++) { for (p=0; p<12; p++) { float f1 = (float) GetRandom(1, 5) + ((float) GetRandom(1, 150) / 100.0F); PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f1); } } float f1= 0.0F; PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 3, &f1); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 0, "北京" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, "上海" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 2, "广州" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 3, "长沙" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 4, "重庆" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 0, "一月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 1, "二月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 2, "三月"); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 3, "四月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 4, "五月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 5, "六月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 6, "七月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 7, "八月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 8, "九月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 9, "十月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 10, "十一月" ); PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 11, "十二月" ); DWORD c[12]; c[0] = RGB(198, 0, 0); c[1] = RGB(0, 198, 0); c[2] = RGB(198, 198, 0); c[3] = RGB(0, 0, 198); c[4] = RGB(198, 0, 198); c[5] = RGB(0, 198, 198); c[6] = RGB(192, 192, 192); c[7] = RGB(148, 0, 0); c[8] = RGB(0, 148, 0); c[9] = RGB(148, 148, 0); c[10] = RGB(0, 148, 148); c[11] = RGB(122, 122, 122); PEvset(m_hPE, PEP_dwaSUBSETCOLORS, c, 12); PEszset(m_hPE, PEP_szMAINTITLE, "3D PIE图表显示编程"); PEszset(m_hPE, PEP_szSUBTITLE, "编程设计实现-戚高"); // no subtitle PEnset(m_hPE, PEP_nDATAPRECISION, 1); PEnset(m_hPE, PEP_nGROUPINGPERCENT, 4); PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_3D); PEnset(m_hPE, PEP_bDISABLE3DSHADOW, FALSE); PEnset(m_hPE, PEP_nAUTOEXPLODE, PEAE_ALLSUBSETS); PEnset(m_hPE, PEP_bFOCALRECT, FALSE); PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE); PEnset(m_hPE, PEP_bCACHEBMP, TRUE); PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE); PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER); 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_nFONTSIZE, PEFS_LARGE); } void CGraphicView::OnBkLine() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } OnDraw3dPie(); float f1 = 1; PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 3, &f1); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 5, &f1); PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, FALSE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_SHADOW); PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400); //*********************************************** OnDraw3dPie(); f1 = 1; PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 3, &f1); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 5, &f1); PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, FALSE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_SHADOW); PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400); } void CGraphicView::OnBkXy() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } RECT rect; GetClientRect( &rect ); // Construct Object // m_hPE = PEcreate(PECONTROL_PGRAPH, WS_VISIBLE, &rect, m_hWnd, 100); // Set to rose mode // PEnset(m_hPE, PEP_nSMITHCHART, PESC_ROSE); // Select Rose Plot Mode // Set titles // PEszset(m_hPE, PEP_szMAINTITLE, "Wind Rose Example"); PEszset(m_hPE, PEP_szSUBTITLE, " "); // Set data // PEnset(m_hPE, PEP_nSUBSETS, 13); PEnset(m_hPE, PEP_nPOINTS, 16); float tempxdata[] = { 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F, 90.0F, 67.5F, 45.0F, 22.5F, 0.0F, 337.5F, 315.0F, 292.5F, 270.0F, 247.5F, 225.0F, 202.5F, 180.0F, 157.5F, 135.0F, 112.5F }; PEvset(m_hPE, PEP_faXDATA, tempxdata, 208); float tempydata[] = { .77F, .75F, .78F, .88F, 1.07F, .98F, .69F, .51F, .38F, .50F, .56F, .65F, .72F, .70F, .62F, .63F, 1.04F, 1.72F, 2.68F, 4.76F, 4.58F, 2.59F, 1.29F, .99F, 1.19F, 1.77F, 2.34F, 2.89F, 2.05F, 1.31F, 1.16F, 1.08F, .43F, 1.05F, 3.41F, 7.40F, 5.97F, 1.48F, .30F, .39F, .73F, 1.68F, 3.53F, 2.73F, 1.24F, .55F, .25F, .27F, .20F, 1.07F, 3.71F, 4.49F, 2.08F, .23F, .10F, .11F, .29F, 1.16F, 2.32F, 1.26F, .54F, .18F, .09F, .22F, .05F, .48F, .66F, 1.31F, .26F, .01F, .02F, .04F, .14F, .33F, .75F, .46F, .18F, .05F, .07F, .03F, .04F, .10F, .07F, .02F, .02F, .02F, .01F, .01F, .01F, .05F, .12F, .09F, .04F, .02F, .03F, .04F, .01F, 0.0F, .01F, .01F, 0.0F, .01F, .01F, .01F, .01F, .01F, .01F, .03F, 0.0F, 0.0F, .02F, .01F, .01F, 0.0F, .01F, 0.0F, .01F, 0.0F, .01F, 0.0F, 0.0F, .01F, 0.0F, .01F, .02F, .01F, .01F, 0.0F, .01F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, .01F, 0.0F, 0.0F, 0.0F, 0.1F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, .01F, 0.0F, 0.0F, 0.0F, 0.0F, .01F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, .01F, 0.0F, 0.0F, 0.0F, 0.0F, .01F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, .01F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, .01F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,0.0F, 0.0F, 0.0F, 0.0F, 0.0F }; PEvset(m_hPE, PEP_faYDATA, tempydata, 208); char tempptlabels[] = "E\tENE\tNE\tNNE\tN\tNNW\tNW\tWNW\tW\tWSW\tSW\tSSW\tS\tSSE\tSE\tESE\t"; char tempsslabels[] = "3.75\t6.25\t8.75\t11.25\t13.75\t16.25\t18.75\t21.25\t23.75\t26.25\t28.75\t31.25\t33.75\t"; PEvset(m_hPE, PEP_szaPOINTLABELS, tempptlabels, 16); PEvset(m_hPE, PEP_szaSUBSETLABELS, tempsslabels, 13); // Manually control degree line frequency // PEnset(m_hPE, PEP_bMANUALXAXISTICKNLINE, TRUE); double d = 22.5F; PEvset(m_hPE, PEP_fMANUALXAXISLINE, &d, 1); PEvset(m_hPE, PEP_fMANUALXAXISTICK, &d, 1); // Make it so monochrome image is just black and white // DWORD bwc[2]; bwc[0] = 0L; bwc[1] = RGB(255,255,255); PEvset(m_hPE, PEP_dwaSUBSETSHADES, bwc, 2); // Remove standard legend, rose has a special legend // int stl = -1; PEvset(m_hPE, PEP_naSUBSETSTOLEGEND, &stl, 1); // Set inner circle label // PEszset(m_hPE, PEP_szMANUALMAXDATASTRING, "1.25|1.1%"); // Get rid of radius labels // PEnset(m_hPE, PEP_bGRIDINFRONT, FALSE); // Enable zooming // PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT); PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT); PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE); PEnset(m_hPE, PEP_bCACHEBMP, TRUE); PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, FALSE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER); PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE); PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE); PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE); // Add Some Padding on Right and Bottom // PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400); 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_nGRADIENTBARS, 8); PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS); float f = 1.2F; PEvset(m_hPE, PEP_fFONTSIZEGNCNTL, &f, 1); } void CGraphicView::OnBkArea() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } // This example builds upon the basic CreateSimpleGraph '000' example chart // CreateSimpleGraph(); ///////////////////////////////////////// // Construct a simple table annotation // ///////////////////////////////////////// PEnset(m_hPE, PEP_nWORKINGTABLE, 0); PEnset(m_hPE, PEP_nTAROWS, 1); PEnset(m_hPE, PEP_nTACOLUMNS, 2); PEnset(m_hPE, PEP_nTATEXTSIZE, 85); // Pass the table text // char szTmp[48]; strcpy(szTmp, "Category 1"); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 0, szTmp); strcpy(szTmp, "Category 2"); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 1, szTmp); // Set column widths /// int nWidth = 28; PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 0, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 1, &nWidth); PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE); PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_AXIS_0); PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_TOP_LEFT); PEnset(m_hPE, PEP_nTABORDER, PETAB_SINGLE_LINE); PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(255,255,255)); int nJust = PETAJ_CENTER; PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 0, &nJust); PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 1, &nJust); ///////////////////////////////////////// // Construct a simple table annotation // ///////////////////////////////////////// PEnset(m_hPE, PEP_nWORKINGTABLE, 1); PEnset(m_hPE, PEP_nTAROWS, 1); PEnset(m_hPE, PEP_nTACOLUMNS, 4); PEnset(m_hPE, PEP_nTATEXTSIZE, 85); strcpy(szTmp, "Sub Cat 1"); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 0, szTmp); strcpy(szTmp, "Sub Cat 2"); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 1, szTmp); strcpy(szTmp, "Sub Cat 3"); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 2, szTmp); strcpy(szTmp, "Sub Cat 4"); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 3, szTmp); nWidth = 14; PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 0, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 1, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 2, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 3, &nWidth); nJust = PETAJ_CENTER; PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 0, &nJust); PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 1, &nJust); PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 2, &nJust); PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 3, &nJust); PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(240,240,240)); PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE); PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_AXIS_0); PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_TOP_LEFT + PETAAL_NEW_ROW); PEnset(m_hPE, PEP_nTABORDER, PETAB_SINGLE_LINE); ///////////////////////////////////////// // Construct a simple table annotation // ///////////////////////////////////////// PEnset(m_hPE, PEP_nWORKINGTABLE, 2); PEnset(m_hPE, PEP_nTAROWS, 4); PEnset(m_hPE, PEP_nTACOLUMNS, 8); PEnset(m_hPE, PEP_nTATEXTSIZE, 85); // Set Column Widths // nWidth = 7; PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 0, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 1, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 2, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 3, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 4, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 5, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 6, &nWidth); PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 7, &nWidth); // Pass the table text // float fp; int nTmp; for (int r=0; r<4; r++) { for (int c=0; c<8; c++) { fp = float(sin(0.3F * (double) c + 1) * 500.0F) + GetRandom(2, 50); sprintf(szTmp, "%.2f ", fp); PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, c, szTmp); if (c > 5) nTmp = RGB(0, 148, 0); else if (c > 3) nTmp = RGB(148, 148, 0); else if (c > 1) nTmp = RGB(0, 148, 148); else nTmp = RGB(198, 0, 0); PEvsetcellEx(m_hPE, PEP_dwaTACOLOR, r, c, &nTmp); nJust = PETAJ_CENTER; PEvsetcellEx(m_hPE, PEP_naTAJUSTIFICATION, r, c, &nJust); } } // Other Table Related Properties /// PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE); PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_AXIS_0); PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_TOP_LEFT + PETAAL_NEW_ROW + PETAAL_NEW_ROW); PEnset(m_hPE, PEP_nTABORDER, PETAB_SINGLE_LINE); PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(200, 200, 200)); // Done setting Table Annotations /// // Set Various Other Properties /// PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_SHADOW); PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_BOTH); PEnset(m_hPE, PEP_nDATAPRECISION, 0); double f = 1.5F; PEvset(m_hPE, PEP_fAXISNUMBERSPACING, &f, 1); } void CGraphicView::OnBkBar() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } // This example builds upon the basic CreateSimpleGraph '000' example chart // CreateSimpleGraph(); // Construct a simple table annotation // PEnset(m_hPE, PEP_nWORKINGTABLE, 0); PEnset(m_hPE, PEP_nTAROWS, 4); PEnset(m_hPE, PEP_nTACOLUMNS, 7); // Pass the table text // char szTmp[48]; PEvsetcellEx(m_hPE, PEP_szaTATEXT, 1, 0, "Row 2 "); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 2, 0, "Row 3 "); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 3, 0, "Row 4 "); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 1, "Column 2 "); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 2, "Column 3 "); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 3, "Column 4 "); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 4, "Column 5 "); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 5, "Column 6 "); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 6, "Column 7 "); float fp; int nTmp; for (int r=1; r<4; r++) { for (int c=1; c<7; c++) { fp = float(sin(0.3F * (double) c + 1) * 500.0F) + GetRandom(2, 50); sprintf(szTmp, "%.5f ", fp); PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, c, szTmp); nTmp = RGB(198, 0, 0); PEvsetcellEx(m_hPE, PEP_dwaTACOLOR, r, c, &nTmp); } } // Other Table Related Properties /// PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE); PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_TOP_LEFT); PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(255,255,255)); PEnset(m_hPE, PEP_nTAHEADERROWS, 1); PEnset(m_hPE, PEP_bTAHEADERCOLUMN, TRUE); PEnset(m_hPE, PEP_nTATEXTSIZE, 85); // Construct a second simple table annotation // PEnset(m_hPE, PEP_nWORKINGTABLE, 1); // Note WorkingTable goes to 1 PEnset(m_hPE, PEP_nTAROWS, 15); PEnset(m_hPE, PEP_nTACOLUMNS, 2); // // Pass the table text // PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 0, ""); PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 1, "Data"); nTmp = PETAJ_CENTER; PEvsetcellEx(m_hPE, PEP_naTAJUSTIFICATION, 0, 0, &nTmp); PEvsetcellEx(m_hPE, PEP_naTAJUSTIFICATION, 0, 1, &nTmp); // First Column Text // for (r=1; r<15; r++) { sprintf(szTmp, "%2d", r); PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, 0, szTmp); } // // Second Column Text // for (r=1; r<15; r++) { fp = float(sin(0.3F * (double) r + 1) * 500.0F) + GetRandom(2, 50); sprintf(szTmp, "%.2f", fp); PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, 1, szTmp); } // Other Table Related Properties /// PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE); PEnset(m_hPE, PEP_nTALOCATION, PETAL_LEFT_CENTER); PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(255,255,255)); PEnset(m_hPE, PEP_nTAHEADERROWS, 1); PEnset(m_hPE, PEP_bTAHEADERCOLUMN, TRUE); // Done setting Table Annotations /// // Set Various Other Properties /// PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_LIGHT_INSET); PEnset(m_hPE, PEP_nDATAPRECISION, 0); } void CGraphicView::OnBkBarGroup() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } RECT rect; GetClientRect( &rect ); m_canReal=FALSE; // Construct Object // m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1000); PEnset(m_hPE, PEP_nSUBSETS, 4); PEnset(m_hPE, PEP_nPOINTS, 12); // Change Data to match example scales which are manually configured // for (int s=0; s<=3; s++) { for (int p=0; p<=11; p++) { float f; f = (p + 1) * 10.0F; PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f); switch (s) { case 0: f = 0.01F + GetRandom(1, 4); break; case 1: f = 400.0F + GetRandom(1, 450); break; case 2: f = 0.01F + GetRandom(1, 25); break; case 3: f = 0.01F + GetRandom(1, 65); break; } PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &f); } } // Now sub-divide subsets into 4 individual axes // // Each axis with one subset in each // int nArray[4] = {1,1,1,1}; PEvset (m_hPE, PEP_naMULTIAXESSUBSETS, nArray, 4); // Create Overlapped Axes // int nOMA[3] = {1,1,2}; PEvset (m_hPE, PEP_naOVERLAPMULTIAXES, nOMA, 3); // Set Proportions of Axes // float fMAP[3] = {.2F, .5F, .3F}; PEvset (m_hPE, PEP_faMULTIAXESPROPORTIONS, fMAP, 3); // Set up First axis parameters // PEnset(m_hPE, PEP_nWORKINGAXIS, 0); PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX); double dMin = 0.0F; PEvset(m_hPE, PEP_fMANUALMINY, &dMin, 1); double dMax = 5.0F; PEvset(m_hPE, PEP_fMANUALMAXY, &dMax, 1); PEnset(m_hPE, PEP_bMANUALYAXISTICKNLINE, TRUE); double dLine = 2.5F; PEvset(m_hPE, PEP_fMANUALYAXISLINE, &dLine, 1); double dTick = 0.5F; PEvset(m_hPE, PEP_fMANUALYAXISTICK, &dTick, 1); PEnset(m_hPE, PEP_nSHOWTICKMARKY, PESTM_TICKS_HIDE); PEszset(m_hPE, PEP_szYAXISLABEL, "NPSHR (feet)"); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR); // Set up Second axis parameters // PEnset(m_hPE, PEP_nWORKINGAXIS, 1); PEnset(m_hPE, PEP_nRYAXISCOMPARISONSUBSETS, 1); PEnset(m_hPE, PEP_nMANUALSCALECONTROLRY, PEMSC_MINMAX); dMin = 400.0F; PEvset(m_hPE, PEP_fMANUALMINRY, &dMin, 1); dMax = 900.0F; PEvset(m_hPE, PEP_fMANUALMAXRY, &dMax, 1); PEnset(m_hPE, PEP_bMANUALRYAXISTICKNLINE, TRUE); dLine = 100.0F; PEvset(m_hPE, PEP_fMANUALRYAXISLINE, &dLine, 1); dTick = 20.0F; PEvset(m_hPE, PEP_fMANUALRYAXISTICK, &dTick, 1); PEnset(m_hPE, PEP_nSHOWTICKMARKRY, PESTM_TICKS_HIDE); PEszset(m_hPE, PEP_szRYAXISLABEL, "Total Head (feet)"); PEnset(m_hPE, PEP_nPLOTTINGMETHODII, PEGPM_POINTSPLUSSPLINE); // Set up Third axis parameters // PEnset(m_hPE, PEP_nWORKINGAXIS, 2); PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX); dMin = 0.0F; PEvset(m_hPE, PEP_fMANUALMINY, &dMin, 1); dMax = 30.0F; PEvset(m_hPE, PEP_fMANUALMAXY, &dMax, 1); PEnset(m_hPE, PEP_bMANUALYAXISTICKNLINE, TRUE); dLine = 10.0F; PEvset(m_hPE, PEP_fMANUALYAXISLINE, &dLine, 1); dTick = 2.0F; PEvset(m_hPE, PEP_fMANUALYAXISTICK, &dTick, 1); PEnset(m_hPE, PEP_nSHOWTICKMARKY, PESTM_TICKS_HIDE); PEszset(m_hPE, PEP_szYAXISLABEL, "Efficiency (%)"); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSSPLINE); // Set up Fourth axis parameters // PEnset(m_hPE, PEP_nWORKINGAXIS, 3); PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX); dMin = 0.0F; PEvset(m_hPE, PEP_fMANUALMINY, &dMin, 1); dMax = 75.0F; PEvset(m_hPE, PEP_fMANUALMAXY, &dMax, 1); PEnset(m_hPE, PEP_bMANUALYAXISTICKNLINE, TRUE); dLine = 25.0F; PEvset(m_hPE, PEP_fMANUALYAXISLINE, &dLine, 1); dTick = 5.0F; PEvset(m_hPE, PEP_fMANUALYAXISTICK, &dTick, 1); PEnset(m_hPE, PEP_nSHOWTICKMARKY, PESTM_TICKS_HIDE); PEszset(m_hPE, PEP_szYAXISLABEL, "Power(HP)"); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSSPLINE); // Done Setting Y Axis Parameters, reset WorkingAxis // PEnset(m_hPE, PEP_nWORKINGAXIS, 0); // Set various other properties // PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_BOTH); PEnset(m_hPE, PEP_nMULTIAXISSTYLE, PEMAS_GROUP_ALL_AXES); PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE_INSIDE_OVERLAP); PEszset(m_hPE, PEP_szXAXISLABEL, "Flow (gpm)"); PEnset(m_hPE, PEP_nBORDERTYPES, PETAB_SINGLE_LINE); PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); PEnset(m_hPE, PEP_nFONTSIZE, PEFS_MEDIUM); PEszset(m_hPE, PEP_szMAINTITLE, ""); PEszset(m_hPE, PEP_szSUBTITLE, ""); PEszset(m_hPE, PEP_szSUBTITLEFONT, "Courier New"); float fSize = 1.1F; PEvset(m_hPE, PEP_fFONTSIZEMSCNTL, &fSize, 1); PEvset(m_hPE, PEP_fFONTSIZEMBCNTL, &fSize, 1); PEvsetcell(m_hPE, PEP_szaMULTISUBTITLES, 0, "PUMP PREDICTED PERFORMANCE|Units: US Customary|Date: 06/07/2002"); PEvsetcell(m_hPE, PEP_szaMULTISUBTITLES, 1, "Impeller Diameter (in): Max = 11.875, Rated = 11.72, Min =11.062||"); PEvsetcell(m_hPE, PEP_szaMULTIBOTTOMTITLES, 1, "Customer: Since fixed length courier font, you can create rows by number of spaces, ||"); PEvsetcell(m_hPE, PEP_szaMULTIBOTTOMTITLES, 0, "Pump Model: or, v5 has a table annotation feature which could be used to add text here. ||"); PEnset(m_hPE, PEP_bYAXISONRIGHT, TRUE); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 0, "NPSHR"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 1, "Head"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 2, "Efficiency"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 3, "Power"); PEnset(m_hPE, PEP_nMULTIAXISSTYLEMENU, PEMC_SHOW); PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_NONE); PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT); PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT); PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE); PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE); DWORD dwArray[4] = { RGB(198,0,0), RGB( 0, 198, 198 ), RGB( 198,198,0 ), RGB( 0,198,0 ) }; PEvset(m_hPE, PEP_dwaSUBSETCOLORS, dwArray, 4); PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_NO_BORDER); 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_nGRADIENTBARS, 8); PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS); } void CGraphicView::OnBkPie() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } //! Double Click to start and stop Auto Rotation. // //! Click and drag scroll bar thumb tabs to quickly rotate. // //! Right button click to show popup menu. // RECT rect; GetClientRect( &rect ); m_hPE = PEcreate(PECONTROL_3D, WS_VISIBLE, &rect, m_hWnd, 1001); // Non-Surface chart, set PolyMode // PEnset(m_hPE, PEP_nPOLYMODE, PEPM_3DBAR); // Pass Data // double sMin, sMax; long Row, Col, o, s, e, nQ; long nStartRow, nEndRow, nStartCol, nEndCol, nTargetRows, nTargetCols; nStartRow = 216; nEndRow = 230; nTargetRows = nEndRow - nStartRow + 1; nStartCol = 156; nEndCol = 170; nTargetCols = nEndCol - nStartCol + 1; nQ = nTargetRows * nTargetCols; long* pElevData = NULL; float* pMyXData = NULL; float* pMyYData = NULL; float* pMyZData = NULL; char szFile[] = "terrain.bin"; FILE * pFile = NULL; pFile = fopen(szFile, "rb"); if (pFile) { pElevData = new long[202500]; // Transfer entire data file into memory // size_t cnt; e = 0; for (s = 0; s < 45; s++) { cnt = fread(&pElevData[e], sizeof(long), 4500, pFile); e += 4500; } fclose(pFile); } else { MessageBox("Data File [terrain.bin] not found in program directory."); return; } pMyXData = new float[nQ]; pMyYData = new float[nQ]; pMyZData = new float[nQ]; long rowcounter, colcounter; BOOL foundtargetindex = FALSE; rowcounter = 0; colcounter = 0; sMax = -9999999.9F; sMin = 9999999.9F; for (Row=0; Row<450; Row++) { for (Col=0; Col<450; Col++) { foundtargetindex = FALSE; if (Row >= nStartRow && Row <= nEndRow) { if (Col >= nStartCol && Col <= nEndCol) { foundtargetindex = TRUE; o = (rowcounter * nTargetRows) + colcounter; pMyXData[o] = (float) Col + 1; pMyZData[o] = (float) Row + 1; pMyYData[o] = pElevData[(Row * 450) + Col] * 0.1F; } } if (foundtargetindex) colcounter++; } if (foundtargetindex) rowcounter++; } PEnset(m_hPE, PEP_nSUBSETS, nTargetRows); PEnset(m_hPE, PEP_nPOINTS, nTargetCols); // Perform the actual transfer of data // PEvset(m_hPE, PEP_faXDATA, pMyXData, nQ); PEvset(m_hPE, PEP_faYDATA, pMyYData, nQ); PEvset(m_hPE, PEP_faZDATA, pMyZData, nQ); if (pElevData) delete pElevData; if (pMyXData) delete pMyXData; if (pMyYData) delete pMyYData; if (pMyZData) delete pMyZData; // Set Various Other Properties // PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_SHADOW); DWORD dwColor[] = {RGB(0, 148, 0), RGB(148, 0, 0), RGB(0, 0, 148), RGB(148, 148, 0), RGB(0, 148, 148), RGB(0, 182, 0), RGB(182, 0, 0), RGB(0, 0, 182), RGB(182, 182, 0), RGB(0, 182, 182), RGB(0, 198, 0), RGB(198, 0, 0), RGB(0, 0, 198), RGB(198, 198, 0), RGB(0, 198, 148) }; PEvset(m_hPE, PEP_dwaSUBSETCOLORS, dwColor, 15); // Set subset labels for z axis** PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 0, "Row 1"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 1, "Row 2"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 2, "Row 3"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 3, "Row 4"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 4, "Row 5"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 5, "Row 6"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 6, "Row 7"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 7, "Row 8"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 8, "Row 9"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 9, "Row 10"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 10, "Row 11"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 11, "Row 12"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 12, "Row 13"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 13, "Row 14"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 14, "Row 15"); // Set point labels for x axis // PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 0, "Col 1"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 1, "Col 2"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 2, "Col 3"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 3, "Col 4"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 4, "Col 5"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 5, "Col 6"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 6, "Col 7"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 7, "Col 8"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 8, "Col 9"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 9, "Col 10"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 10, "Col 11"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 11, "Col 12"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 12, "Col 13"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 13, "Col 14"); PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 14, "Col 15"); // Set Titles // PEszset(m_hPE, PEP_szMAINTITLE, "3D Bar"); PEszset(m_hPE, PEP_szSUBTITLE, ""); // Set camera position // PEnset(m_hPE, PEP_nVIEWINGHEIGHT, 15); PEnset(m_hPE, PEP_nDEGREEOFROTATION, 314); // Set Plotting methods // PEnset(m_hPE, PEP_nPLOTTINGMETHOD, 2); // ' Shading // Full rotation detail // PEnset(m_hPE, PEP_nROTATIONDETAIL, PERD_FULLDETAIL); // Set small font size // PEnset(m_hPE, PEP_nFONTSIZE, PEFS_SMALL); // Prepare images in memory // PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE); PEnset(m_hPE, PEP_bCACHEBMP, TRUE); PEnset(m_hPE, PEP_bFOCALRECT, FALSE); PEnset(m_hPE, PEP_bALLOWSTYLEPAGE, FALSE); PEnset(m_hPE, PEP_nROTATIONINCREMENT, PERI_INCBY2); // Add Some Padding on Right and Bottom // PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400); 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_nFONTSIZE, PEFS_LARGE); PEnset(m_hPE, PEP_dwGRAPHFORECOLOR, RGB(192,192,192)); } void CGraphicView::OnButton32781() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } //! Double Click to start and stop Auto Rotation. // //! Click and drag scroll bar thumb tabs to quickly rotate. // //! Right button click to show popup menu. // RECT rect; GetClientRect( &rect ); m_hPE = PEcreate(PECONTROL_3D, WS_VISIBLE, &rect, m_hWnd, 1001); // Non-Surface chart, set PolyMode // PEnset(m_hPE, PEP_nPOLYMODE, PEPM_SCATTER); // Set the amount of data // PEnset(m_hPE, PEP_nSUBSETS, 10); PEnset(m_hPE, PEP_nPOINTS, 50); // Pass data, First two subsets // float f, f2; for (int s=0; s<=1; s++) { for (int p=0; p<=49; p++) { f2 = 5.0F * (float)cos(p * .24); PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f2); if (s == 0) f = (35.0F * (float)cos(p * 0.22F)) + (10.0F * (float)sin((s * .1F) * .94F)); else f = (35.0F * (float)cos(p * 0.08F)) + (10.0F * (float)cos((s * .25F) * .6F)); PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &f); f = 5.0F * (float)(sin(p * .08F)); PEvsetcellEx(m_hPE, PEP_faZDATA, s, p, &f); } } // Pass more data, Second two subsets // for (s=0; s<=1; s++) { for (int p=0; p<=49; p++) { f2 = 5.0F * (float)cos(p * .14); f2 += 20; PEvsetcellEx(m_hPE, PEP_faXDATA, s + 2, p, &f2); if (s == 0) f = (35.0F * (float)cos(p * 0.2F)) + (10.0F * (float)sin((s * .1F) * .74F)); else f = (35.0F * (float)cos(p * 0.1F)) + (10.0F * (float)cos((s * .25F) * .74F)); f += 40; PEvsetcellEx(m_hPE, PEP_faYDATA, s + 2, p, &f); f = 5.0F * (float)(sin(p * .16F)); f += 20; PEvsetcellEx(m_hPE, PEP_faZDATA, s + 2, p, &f); } } // Pass more data, Third two subsets // for (s=0; s<=1; s++) { for (int p=0; p<=49; p++) { f2 = 5.0F * (float)cos(p * .07); f2 -= 20; PEvsetcellEx(m_hPE, PEP_faXDATA, s + 4, p, &f2); if (s == 0) f = (35.0F * (float)cos(p * 0.08F)) + (10.0F * (float)sin((s * .07F) * .64F)); else f = (35.0F * (float)cos(p * 0.2F)) + (10.0F * (float)cos((s * .15F) * 1.94F)); f += 40; PEvsetcellEx(m_hPE, PEP_faYDATA, s + 4, p, &f); f = 5.0F * (float)(sin(p * .09F)); f += 20; PEvsetcellEx(m_hPE, PEP_faZDATA, s + 4, p, &f); } } // Pass more data, Fourth two subsets // for (s=0; s<=1; s++) { for (int p=0; p<=49; p++) { f2 = 5.0F * (float)cos(p * .12); f2 -= 20; PEvsetcellEx(m_hPE, PEP_faXDATA, s + 6, p, &f2); if (s == 0) f = (35.0F * (float)cos(p * 0.3F)) + (10.0F * (float)sin((s * .08F) * 1.74F)); else f = (35.0F * (float)cos(p * 0.2F)) + (10.0F * (float)cos((s * .75F) * .774F)); f -= 40; PEvsetcellEx(m_hPE, PEP_faYDATA, s + 6, p, &f); f = 5.0F * (float)(sin(p * .36F)); f -= 20; PEvsetcellEx(m_hPE, PEP_faZDATA, s + 6, p, &f); } } // Pass more data, Fifth two subsets // for (s=0; s<=1; s++) { for (int p=0; p<=49; p++) { f2 = 5.0F * (float)cos(p * .14); f2 += 20; PEvsetcellEx(m_hPE, PEP_faXDATA, s + 8, p, &f2); if (s == 0) f = (25.0F * (float)cos(p * 0.1F)) + (10.0F * (float)sin((s * .02F) * 3.74F)); else f = (55.0F * (float)cos(p * 0.2F)) + (10.0F * (float)cos((s * .05F) * 5.74F)); f += 40; PEvsetcellEx(m_hPE, PEP_faYDATA, s + 8, p, &f); f = 5.0F * (float)(sin(p * .16F)); f -= 20; PEvsetcellEx(m_hPE, PEP_faZDATA, s + 8, p, &f); } } // Set Various Other Properties // PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, FALSE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_INSET); DWORD dwColor[] = {RGB(198, 198, 0), RGB(0, 198, 198), RGB(0, 198, 0), RGB(198, 0, 0), RGB(0, 0, 198), RGB(192,192,192), RGB(198, 0, 198), RGB(200, 198, 150), RGB(200, 200, 140), RGB(150, 0, 198)}; PEvset(m_hPE, PEP_dwaSUBSETCOLORS, dwColor, 10); int nPTypes[] = {PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS}; PEvset(m_hPE, PEP_naSUBSETPOINTTYPES, nPTypes, 10); // Set subset labels and titles // PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 0, "Data 1"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 1, "Data 2"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 2, "Data 3"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 3, "Data 4"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 4, "Data 5"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 5, "Data 6"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 6, "Data 7"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 7, "Data 8"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 8, "Data 9"); PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 9, "Data 10"); PEszset(m_hPE, PEP_szMAINTITLE, "3D Scatter"); PEszset(m_hPE, PEP_szSUBTITLE, ""); // Set camera position // PEnset(m_hPE, PEP_nVIEWINGHEIGHT, 15); PEnset(m_hPE, PEP_nDEGREEOFROTATION, 145); // Set Plotting methods // PEnset(m_hPE, PEP_nPLOTTINGMETHOD, 0); // ' Points // Set small font size // PEnset(m_hPE, PEP_nFONTSIZE, PEFS_MEDIUM); PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); // Set legend location // PEnset(m_hPE, PEP_nLEGENDLOCATION, PELL_LEFT); // Prepare images in memory // PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE); PEnset(m_hPE, PEP_bFOCALRECT, FALSE); PEnset(m_hPE, PEP_bCACHEBMP, TRUE); PEnset(m_hPE, PEP_nROTATIONDETAIL, PERD_FULLDETAIL); PEnset(m_hPE, PEP_nROTATIONSPEED, 50); PEnset(m_hPE, PEP_nROTATIONINCREMENT, PERI_INCBY1); PEnset(m_hPE, PEP_bAUTOROTATION, TRUE); PEnset(m_hPE, PEP_bSHOWLEGEND, FALSE); // Add Some Padding around image // PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400); PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400); 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_nFONTSIZE, PEFS_LARGE); PEnset(m_hPE, PEP_dwGRAPHFORECOLOR, RGB(192,192,192)); } void CGraphicView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); if(m_hPE) PEdestroy(m_hPE); CreateSimpleGraph(); // TODO: Add your message handler code here } void CGraphicView::OnDrawNew() { if(m_hPE) PEdestroy(m_hPE); // This example builds upon the basic CreateSimpleGraph '000' example chart // CreateSimpleGraph(); int nHatchType[4]; nHatchType[0] = PEHS_BDIAGONAL; nHatchType[1] = PEHS_CROSS; nHatchType[2] = PEHS_DIAGCROSS; nHatchType[3] = PEHS_FDIAGONAL; PEvset(m_hPE, PEP_naSUBSETHATCH, nHatchType, 4); // Set Other Various Properties /// PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_INSET); // Enable Stacked type charts // PEnset(m_hPE, PEP_bNOSTACKEDDATA, FALSE); // Set plotting method // PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BARSTACKED); PEnset(m_hPE, PEP_dwHATCHBACKCOLOR, RGB(100,100,100)); PEnset(m_hPE, PEP_bDATASHADOWS, PEDS_SHADOWS); // Add a table // PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH); PEnset(m_hPE, PEP_nDATAPRECISION, 0); } void CGraphicView::OnDrawSile() { if(m_hPE) PEdestroy(m_hPE); //! Cross-Hair inside chart is a cursor giving a datapoint the focus // //! Use arrow keys or mouse to move cursor to a new location // //! You must click the control to give it the focus before key strokes will work. // //! Right and Left arrow keys move cursor up and down points // //! Up and Down arrow keys move cursor up and down subsets // // This example builds upon the basic CreateSimpleSGraph '100' example chart // CreateSimpleSGraph(); // Set up cursor // PEnset(m_hPE, PEP_nCURSORMODE, PECM_DATACROSS); // Help see data points // PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE); // This will allow you to move cursor by clicking data point // PEnset(m_hPE, PEP_bMOUSECURSORCONTROL, TRUE); PEnset(m_hPE, PEP_bALLOWDATAHOTSPOTS, TRUE); // Cursor prompting in top left corner // PEnset(m_hPE, PEP_bCURSORPROMPTTRACKING, TRUE); PEnset(m_hPE, PEP_nCURSORPROMPTSTYLE, PECPS_XYVALUES); PEnset(m_hPE, PEP_nCURSORPROMPTLOCATION, PECPL_TOP_RIGHT); // Disable Zooming // PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_NONE); // Other possible values for cursor mode are below, // // PECM_NOCURSOR = 0 // PECM_POINT = 1 // PECM_DATACROSS = 2 // PECM_DATASQUARE = 3 // PECM_FLOATINGY = 4 // PECM_FLOATINGXY = 5 // Uncomment to start cursor at different location // // NOTE: You must reinitialize before setting cursor location // // PEreinitialize(m_hPE); // PEresetimage(m_hPE, 0, 0); // PEnset(m_hPE, PEP_nCURSORSUBSET, 0); // PEnset(m_hPE, PEP_nCURSORPOINT, 2); //////////////////////////////////////////////////////////////////////// // Look in OnCommand handler to see how to respond to cursor movement // //////////////////////////////////////////////////////////////////////// /* else if ((m_nLastSelection == 105) && (HIWORD(wp) == PEWN_CURSORMOVE)) { int nSubset, nPoint; float xvalue, yvalue; char buffer[64]; nSubset = PEnget(m_hPE, PEP_nCURSORSUBSET); nPoint = PEnget(m_hPE, PEP_nCURSORPOINT); PEvgetcellEx(m_hPE, PEP_faXDATA, nSubset, nPoint, &xvalue); PEvgetcellEx(m_hPE, PEP_faYDATA, nSubset, nPoint, &yvalue); sprintf(buffer, "Cursor at %d,%d=(%.2f, %.2f)", nSubset, nPoint, xvalue, yvalue); CWnd* pParent = GetParent()->GetParent(); if (pParent) {pParent->SetWindowText(buffer);} pParent = AfxGetMainWnd(); if (pParent) {pParent->SetWindowText("PEWN_CURSORMOVE");} return TRUE; } */ } void CGraphicView::CreateSimpleSGraph() { if(m_hPE) PEdestroy(m_hPE); m_Real=FALSE; m_canReal=FALSE; //! 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 scientific graph object. // // Scientific Graph's contain both YData and XData and thus data // is not plotted equally spaced as the graph object does. RECT rect; GetClientRect( &rect ); m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1001); if( m_hPE ) { float fY; float fX; // Set number of Subsets and Points // PEnset(m_hPE, PEP_nSUBSETS, 4); PEnset(m_hPE, PEP_nPOINTS, 12); for( int s=0; s<=3; s++ ) { for( int p=0; p<=11; p++ ) { fX = ((float) (p+1)) * 100.0F; PEvsetcellEx (m_hPE, PEP_faXDATA, s, p, &fX); fY = ((float) (p+1) * 1.0F) + GetRandom(1, 250); PEvsetcellEx (m_hPE, PEP_faYDATA, s, p, &fY); } } // Set DataShadows to show shadows PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS); PEszset(m_hPE, PEP_szMAINTITLE, "历史线性统计曲线"); PEszset(m_hPE, PEP_szSUBTITLE, "程序设计与实现--戚高"); PEszset(m_hPE, PEP_szYAXISLABEL, "最大应用量"); PEszset(m_hPE, PEP_szXAXISLABEL, "月份"); PEnset(m_hPE, PEP_bFOCALRECT, FALSE); PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE); PEnset(m_hPE, PEP_bCACHEBMP, TRUE); PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSSPLINE); PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_NONE); PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT); PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT); // subset labels // PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 0, "长沙" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, "上海" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 2, "北京" ); PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 3, "广州" ); // subset colors DWORD dwArray[4] = { RGB(198,0,0), RGB( 0, 198, 198 ), RGB( 198,198,0 ), RGB( 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 }; PEvset(m_hPE, PEP_naSUBSETLINETYPES, nLineTypes, 4); // subset point types int nPointTypes[] = { PEPT_DOTSOLID, PEPT_UPTRIANGLESOLID, PEPT_SQUARESOLID, PEPT_DOWNTRIANGLESOLID }; PEvset(m_hPE, PEP_naSUBSETPOINTTYPES, nPointTypes, 4); // Version 4.0 Features // PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE); PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE); PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE); PEnset(m_hPE, PEP_nMULTIAXISSTYLE, PEMAS_SEPARATE_AXES); // Set Various Other Properties // PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER); 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_bSCROLLINGHORZZOOM, TRUE); } } void CGraphicView::OnReal() { KillTimer(1); if(m_hPE) PEdestroy(m_hPE); m_canReal=TRUE; m_Real=TRUE; //! Chart holds 2000 points. Data is fed into //! data arrays at current data index. Once 2000 //! points have been passed, 250 are truncated as //! data is shifted to make room for 250 more data //! points. //! Depending upon ZoomMode property, this example with //! either show most current 3 minutes or all data in //! object. RECT rect; GetClientRect( &rect ); // Construct Object // m_hPE = PEcreate(PECONTROL_SGRAPH, WS_CHILD|WS_VISIBLE, &rect, m_hWnd, 1001); PEnset(m_hPE, PEP_nSUBSETS, 3); PEnset(m_hPE, PEP_nPOINTS, 2000); PEnset(m_hPE, PEP_nDATETIMEMODE, PEDTM_VB); // Date/Time Mode PEnset(m_hPE, PEP_bUSINGXDATAII, TRUE); // Using Double Precision XDataII // Some functional attributes // 1440 is minutes in a day ZoomInterval = (3.0F / 1440.0F); // 3 minute scale zoom interval ZoomSmallInterval = (0.5F / 1440.0F); // 30 second scale adjustment // Determine current date and time in VB's format // CTime t = CTime::GetCurrentTime(); TM petm; petm.nDay = t.GetDay(); petm.nMonth = t.GetMonth(); petm.nYear = t.GetYear() - 1900; petm.nHour = t.GetHour(); petm.nMinute = t.GetMinute(); petm.nSecond = t.GetSecond(); PEcreateserialdate(&StartTime, &petm, PEDTM_VB); // Extents to show all data points double manmaxx; PEnset(m_hPE, PEP_nMANUALSCALECONTROLX, PEMSC_MINMAX); PEvset(m_hPE, PEP_fMANUALMINX, &StartTime, 1); manmaxx = StartTime + ZoomInterval; PEvset(m_hPE, PEP_fMANUALMAXX, &manmaxx, 1); PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX); double d = 1.0F; PEvset(m_hPE, PEP_fMANUALMINY, &d, 1); d = 100.0F; PEvset(m_hPE, PEP_fMANUALMAXY, &d, 1); // Set Zoomed partial Range of X Scale // ZoomStart = StartTime; ZoomEnd = ZoomStart + ZoomInterval; PEvset(m_hPE, PEP_fZOOMMINX, &ZoomStart, 1); PEvset(m_hPE, PEP_fZOOMMAXX, &ZoomEnd, 1); d = 1.0F; PEvset(m_hPE, PEP_fZOOMMINY, &d, 1); d = 100.0F; PEvset(m_hPE, PEP_fZOOMMAXY, &d, 1); PEnset(m_hPE, PEP_bZOOMMODE, TRUE); // If ZoomMode is True, you will see 3 minutes of data // // If ZoomMode is False, you will see all data in object // // Clear out default data ' // No need to clear out XData since using XDataII ' float f = 0.0F; PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 0, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 1, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 2, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 3, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 0, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 1, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 2, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 3, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 0, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 1, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 2, &f); PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 3, &f); // Show Annotations // PEnset(m_hPE, PEP_bSHOWANNOTATIONS, TRUE); // Set Various Other Properties /// PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_INSET); int nTmpStyle; nTmpStyle = PELT_THINSOLID; PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 0, &nTmpStyle); PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 1, &nTmpStyle); PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 2, &nTmpStyle); // PEvset(m_hPE, PEP_naSUBSETLINETYPES, PELT_THINSOLID, 0); char szSubsets[] = "电流\t电压\t频率\t"; PEvset (m_hPE, PEP_szaSUBSETLABELS, szSubsets, 3); PEszset(m_hPE, PEP_szMAINTITLE, "工业用实时曲线"); PEszset(m_hPE, PEP_szSUBTITLE, "编程设计实现-戚高"); PEnset(m_hPE, PEP_bNORANDOMPOINTSTOEXPORT, TRUE); PEnset(m_hPE, PEP_bFOCALRECT, FALSE); PEnset(m_hPE, PEP_bALLOWBAR, FALSE); PEnset(m_hPE, PEP_bALLOWPOPUP, FALSE); PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE); PEnset(m_hPE, PEP_bCACHEBMP, TRUE); PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); DWORD col = RGB(0, 198, 198); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 0, &col); col = RGB(0,198,0); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 1, &col); col = RGB(255,0,0); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 2, &col); 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); PEreinitialize(m_hPE); PEresetimage(m_hPE, 0, 0); ::InvalidateRect(m_hPE, NULL, FALSE); // Initialize Counters and Timer // m_nRealTimeCounter = 1; m_nSinCounter = 1; SetTimer( 2, 250, NULL ); } void CGraphicView::OnDrawgraph() { if(m_hPE) { PEdestroy(m_hPE); Invalidate(); } m_Real=TRUE; m_canReal=TRUE; //! Chart fills 100 points but x axis is initially //! manually scaled. Once 100 point have been passed, //! the chart switches to autoscaling the x axis. RECT rect; GetClientRect( &rect ); // Construct Object // m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1001); PEnset(m_hPE, PEP_nSUBSETS, 1); PEnset(m_hPE, PEP_nPOINTS, 100); // Set Manual Y scale // PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX); double arg = 1.0F; PEvset(m_hPE, PEP_fMANUALMINY, &arg, 1); arg = 100.0F; PEvset(m_hPE, PEP_fMANUALMAXY, &arg, 1); // Set Manual X scale // PEnset(m_hPE, PEP_nMANUALSCALECONTROLX, PEMSC_MINMAX); arg = 1.0F; PEvset(m_hPE, PEP_fMANUALMINX, &arg, 1); arg = 100; PEvset(m_hPE, PEP_fMANUALMAXX, &arg, 1); // Clear out default data // float val = 0; PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 0, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 1, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 2, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 3, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 0, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 1, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 2, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 3, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 0, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 1, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 2, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 3, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 0, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 1, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 2, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 3, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 0, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 1, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 2, &val); PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 3, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 0, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 1, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 2, &val); PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 3, &val); int nTmpStyle; nTmpStyle = PELT_THINSOLID; PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 0, &nTmpStyle); PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 1, &nTmpStyle); PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 2, &nTmpStyle); // PEvset(m_hPE, PEP_naSUBSETLINETYPES, PELT_THINSOLID, 0); char szSubsets[] = "电流\t电压\t频率\t"; PEvset (m_hPE, PEP_szaSUBSETLABELS, szSubsets, 3); // Set Various Other Properties /// PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE); PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_INSET); PEszset(m_hPE, PEP_szMAINTITLE, "工业用实时曲线程序"); PEszset(m_hPE, PEP_szSUBTITLE, "编程设计实现-戚高"); PEnset(m_hPE, PEP_bNORANDOMPOINTSTOEXPORT, TRUE); PEnset(m_hPE, PEP_bFOCALRECT, FALSE); PEnset(m_hPE, PEP_bALLOWBAR, FALSE); PEnset(m_hPE, PEP_bALLOWPOPUP, FALSE); PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE); PEnset(m_hPE, PEP_bCACHEBMP, TRUE); PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); DWORD col = RGB(255, 0, 0); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 0, &col); col = RGB(0,198,0); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 1, &col); col = RGB(255,0,0); PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 2, &col); 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); PEreinitialize(m_hPE); PEresetimage(m_hPE, 0, 0); // Initialize Counters and Timer m_nRealTimeCounter = 1; m_nSinCounter = 1; SetTimer( 1, 100, NULL ); }