⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphicview.cpp

📁 一个非常完美的工业曲线显示控件。可供学习研究!
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	
	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, "三月");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -