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

📄 atp_graphicdlg.cpp

📁 这是一个在VC环境下实现动态图形变化的例子
💻 CPP
字号:
// ATP_GraphicDlg.cpp : implementation file
//

#include "stdafx.h"
#include "graphic.h"
#include "ATP_GraphicDlg.h"
#include "Pegrpapi.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// ATP_GraphicDlg dialog


ATP_GraphicDlg::ATP_GraphicDlg(CWnd* pParent /*=NULL*/)
	: CDialog(ATP_GraphicDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(ATP_GraphicDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_dfXMinValue=1.0;
	m_dfXMaxValue=100.0;
	m_dfYMinValue=1.0;
	m_dfYMaxValue=100.0;

	strcpy(m_szMainTitle,"GPW武器跟瞄统计分析");
	strcpy(m_szSubTitle,"单项性能");
	strcpy(m_szXLabel,"X坐标");
	strcpy(m_szYLabel,"Y坐标");

	for (int i=0;i<100;i++)
	{
		m_XData.AddTail(i*1.0);
		m_YData.AddTail(i*1.0);
	}
}


void ATP_GraphicDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(ATP_GraphicDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(ATP_GraphicDlg, CDialog)
	//{{AFX_MSG_MAP(ATP_GraphicDlg)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// ATP_GraphicDlg message handlers

BOOL ATP_GraphicDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	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, &m_dfYMinValue, 1);
   //arg = 100.0F;
   PEvset(m_hPE, PEP_fMANUALMAXY, &m_dfYMaxValue, 1);

   // Set Manual X scale //
   PEnset(m_hPE, PEP_nMANUALSCALECONTROLX, PEMSC_MINMAX);
   ///arg = 1.0F;
   PEvset(m_hPE, PEP_fMANUALMINX, &m_dfXMinValue, 1);
   //arg = 100;
   PEvset(m_hPE, PEP_fMANUALMAXX, &m_dfXMaxValue, 1);

   // Clear out default data //
     float m_dfXData;
     float m_dfYData;
     for(int i=0;i<m_XData.GetCount();i++)
     {
  	   m_dfXData=m_XData.GetAt(m_XData.FindIndex(i));
  	   m_dfYData=m_YData.GetAt(m_YData.FindIndex(i));
  	   PEvsetcellEx(m_hPE, PEP_faXDATA, 0, i, &m_dfXData);
  	   PEvsetcellEx(m_hPE, PEP_faYDATA, 0, i, &m_dfYData);
     }
  

   int nTmpStyle;
   nTmpStyle = PELT_THINSOLID;
   PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 0, &nTmpStyle); 
   
   // Set Various Other Properties ///
   PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
   PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_INSET);
   
   PEszset(m_hPE, PEP_szMAINTITLE, m_szMainTitle);
   PEszset(m_hPE, PEP_szSUBTITLE, m_szSubTitle);
   PEszset(m_hPE, PEP_szYAXISLABEL, m_szYLabel);
   PEszset(m_hPE, PEP_szXAXISLABEL, m_szXLabel);
  

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

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void ATP_GraphicDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	if(m_hPE)
	{
		PEdestroy(m_hPE);
		Invalidate();
	}

	//clear the data for drawing
	while(m_XData.GetHeadPosition()!=NULL)
		m_XData.RemoveHead();
	while(m_YData.GetHeadPosition()!=NULL)
		m_YData.RemoveHead();
	
}

⌨️ 快捷键说明

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