// 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 ); }