📄 graphicview.cpp
字号:
}
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -