GraphicView.cpp
上传用户:lydc80129
上传日期:2013-01-15
资源大小:979k
文件大小:86k
源码类别:

界面编程

开发平台:

Visual C++

  1. // GraphicView.cpp : implementation of the CGraphicView class
  2. //
  3. #include "stdafx.h"
  4. #include "Graphic.h"
  5. #include "Pegrpapi.h"
  6. #include "GraphicDoc.h"
  7. #include "GraphicView.h"
  8. #include "math.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. #include "CoolControlsManager.h"
  15. #define GetRandom(min,max) ((rand()%(int)(((max)+1)-(min)))+(min))
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CGraphicView
  18. IMPLEMENT_DYNCREATE(CGraphicView, CView)
  19. BEGIN_MESSAGE_MAP(CGraphicView, CView)
  20. //{{AFX_MSG_MAP(CGraphicView)
  21. ON_COMMAND(ID_DRAW_BAR, OnDrawBar)
  22. ON_WM_ERASEBKGND()
  23. ON_COMMAND(ID_DRAW_LINE, OnDrawLine)
  24. ON_COMMAND(ID_DRAW_PIE, OnDrawPie)
  25. ON_COMMAND(ID_DRAW_SCATTER, OnDrawScatter)
  26. ON_COMMAND(ID_DRAW_WHISKER, OnDrawWhisker)
  27. ON_COMMAND(ID_DRAW_STACKED_BAR, OnDrawStackedBar)
  28. ON_COMMAND(ID_DRAW_XY_LINE, OnDrawXyLine)
  29. ON_WM_TIMER()
  30. ON_COMMAND(ID_DRAW_3D_BAR, OnDraw3dBar)
  31. ON_COMMAND(ID_DRAW_3D_STACKED_BAR, OnDraw3dStackedBar)
  32. ON_COMMAND(ID_DRAW_3D_LINE, OnDraw3dLine)
  33. ON_COMMAND(ID_DRAW_3D_PIE, OnDraw3dPie)
  34. ON_COMMAND(ID_BK_LINE, OnBkLine)
  35. ON_COMMAND(ID_BK_XY, OnBkXy)
  36. ON_COMMAND(ID_BK_AREA, OnBkArea)
  37. ON_COMMAND(ID_BK_BAR, OnBkBar)
  38. ON_COMMAND(ID_BK_BAR_GROUP, OnBkBarGroup)
  39. ON_COMMAND(ID_BK_PIE, OnBkPie)
  40. ON_COMMAND(ID_BUTTON32781, OnButton32781)
  41. ON_WM_SIZE()
  42. ON_COMMAND(ID_DRAW_NEW, OnDrawNew)
  43. ON_COMMAND(ID_DRAW_SILE, OnDrawSile)
  44. ON_COMMAND(ID_REAL, OnReal)
  45. ON_COMMAND(ID_DRAWGRAPH, OnDrawgraph)
  46. //}}AFX_MSG_MAP
  47. // Standard printing commands
  48. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  49. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  50. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  51. END_MESSAGE_MAP()
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CGraphicView construction/destruction
  54. CGraphicView::CGraphicView()
  55. {
  56. // TODO: add construction code here
  57. m_nRealTimeCounter = 0;
  58. m_nSinCounter = 0;
  59. }
  60. CGraphicView::~CGraphicView()
  61. {
  62. }
  63. BOOL CGraphicView::PreCreateWindow(CREATESTRUCT& cs)
  64. {
  65. // TODO: Modify the Window class or styles here by modifying
  66. //  the CREATESTRUCT cs
  67. return CView::PreCreateWindow(cs);
  68. }
  69. /////////////////////////////////////////////////////////////////////////////
  70. // CGraphicView drawing
  71. void CGraphicView::OnDraw(CDC* pDC)
  72. {
  73. CGraphicDoc* pDoc = GetDocument();
  74. ASSERT_VALID(pDoc);
  75. // TODO: add draw code for native data here
  76. }
  77. /////////////////////////////////////////////////////////////////////////////
  78. // CGraphicView printing
  79. BOOL CGraphicView::OnPreparePrinting(CPrintInfo* pInfo)
  80. {
  81. // default preparation
  82. return DoPreparePrinting(pInfo);
  83. }
  84. void CGraphicView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  85. {
  86. // TODO: add extra initialization before printing
  87. }
  88. void CGraphicView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  89. {
  90. // TODO: add cleanup after printing
  91. }
  92. /////////////////////////////////////////////////////////////////////////////
  93. // CGraphicView diagnostics
  94. #ifdef _DEBUG
  95. void CGraphicView::AssertValid() const
  96. {
  97. CView::AssertValid();
  98. }
  99. void CGraphicView::Dump(CDumpContext& dc) const
  100. {
  101. CView::Dump(dc);
  102. }
  103. CGraphicDoc* CGraphicView::GetDocument() // non-debug version is inline
  104. {
  105. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGraphicDoc)));
  106. return (CGraphicDoc*)m_pDocument;
  107. }
  108. #endif //_DEBUG
  109. /////////////////////////////////////////////////////////////////////////////
  110. // CGraphicView message handlers
  111. void CGraphicView::OnInitialUpdate() 
  112. {
  113. CView::OnInitialUpdate(); 
  114. AfxGetApp()->GetMainWnd()->SetWindowText(_T("曲线显示完整版 V1.0"));
  115. GetCtrlManager().InstallHook();//使所有控件浮动
  116. // OnDraw3dStackedBar();
  117. // TODO: Add your specialized code here and/or call the base class
  118. }
  119. void CGraphicView::OnDrawBar() 
  120. {
  121. if(m_hPE)
  122. {
  123. PEdestroy(m_hPE);
  124. Invalidate();
  125. }
  126. if(m_hPE)
  127. m_hPE=NULL;
  128. //! Right button click to show popup menu. //
  129. //! Double Click to show customization dialog. //
  130. // This example builds upon the basic CreateSimpleGraph '000' example chart //
  131. CreateSimpleGraph();
  132. // Below tells object to automatically generate statistical
  133. // comparison subsets, object will actually have
  134. // 6 subsets when finished initializing.
  135. int nArray[2];
  136. nArray[0] = PEAS_AVGAP;
  137. nArray[1] = PEAS_AVGPP; 
  138. PEvset (m_hPE, PEP_naAUTOSTATSUBSETS, nArray, 2);
  139. // Other various properties //
  140. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  141. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_LINE);
  142. PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE_INSIDE_AXIS);
  143. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
  144. PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE); 
  145. void CGraphicView::CreateSimpleGraph()
  146. //! Right button click to show popup menu. //
  147. //! Double Click to show customization dialog. //
  148. //! Left-Click and drag to draw zoom box. Use popup memu or 'z' to undo zoom. // 
  149. // Simple example show the basics of a graph object. //
  150. // Graph's generally only contain YData because we assume
  151. // data is plotted equally spaced left to right.
  152. m_canReal=FALSE;
  153. CRect rect;
  154. GetClientRect( rect ); 
  155. m_hPE = PEcreate(PECONTROL_GRAPH, WS_CHILD|WS_VISIBLE, &rect, m_hWnd, 1001);
  156. if (m_hPE) 
  157. {
  158. // Prepare images in memory //
  159. PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  160. // Pass Data //
  161. PEnset(m_hPE, PEP_nSUBSETS, 4);
  162. PEnset(m_hPE, PEP_nPOINTS, 12);
  163. float fY;
  164. for (int s=0; s<=3; s++)
  165. {
  166. for (int p=0; p<=11; p++)
  167. {
  168. fY = float((p + 1) * 50) + GetRandom(2, 250);
  169. PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &fY);
  170. }
  171. }
  172. // Set DataShadows to show 3D //
  173. PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS);
  174. PEnset(m_hPE, PEP_nBORDERTYPES, PETAB_DROP_SHADOW);
  175. PEszset(m_hPE, PEP_szMAINTITLE, "历史线性统计曲线");
  176. PEszset(m_hPE, PEP_szSUBTITLE, "程序设计与实现--戚高"); 
  177. PEszset(m_hPE, PEP_szYAXISLABEL, "最大应用量");
  178. PEszset(m_hPE, PEP_szXAXISLABEL, "月份");
  179. PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
  180. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);//现实类型
  181. PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_NONE);//是否有X,Y
  182. PEnset(m_hPE, PEP_bALLOWRIBBON, TRUE);
  183. PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT);
  184. PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT);
  185. // subset labels //
  186. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 0, "长沙" );
  187. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, "上海" );
  188. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 2, "北京" );
  189. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 3, "广州" );
  190. // point labels //
  191. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 0, "一月" );
  192. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 1, "二月" );
  193. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 2, "三月" );
  194. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 3, "四月" );
  195. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 4, "五月" );
  196. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 5, "六月" );
  197. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 6, "七月" );
  198. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 7, "八月" );
  199. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 8, "九月" );
  200. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 9, "十月" );
  201. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 10, "十一月" );
  202. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 11, "十二月" );
  203. // subset colors //
  204. DWORD dwArray[4] = { RGB(198,0,0), RGB( 0, 198, 198 ), RGB( 198,198,0 ), RGB( 0,198,0 ) };
  205. PEvsetEx(m_hPE, PEP_dwaSUBSETCOLORS, 0, 4, dwArray, 0);
  206. // subset line types //
  207. int nLineTypes[] = { PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, 
  208. PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, 
  209. PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, PELT_MEDIUMSOLID};
  210. PEvset(m_hPE, PEP_naSUBSETLINETYPES, nLineTypes, 8);
  211. // subset point types //
  212. int nPointTypes[] = { PEPT_DOTSOLID, PEPT_UPTRIANGLESOLID, 
  213. PEPT_SQUARESOLID, PEPT_DOWNTRIANGLESOLID, PEPT_DOT, 
  214. PEPT_UPTRIANGLE, PEPT_SQUARE, PEPT_DOWNTRIANGLE };
  215. PEvset(m_hPE, PEP_naSUBSETPOINTTYPES, nPointTypes, 8);
  216. // Allow stacked type graphs //
  217. PEnset(m_hPE, PEP_bNOSTACKEDDATA, FALSE);
  218. // Various other features //
  219. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  220. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  221. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_LINE);
  222. PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE);
  223. PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE);
  224. PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE);
  225. PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH);
  226. PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
  227. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  228. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  229. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  230. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  231. PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
  232. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  233. }
  234. }
  235. BOOL CGraphicView::OnEraseBkgnd(CDC* pDC) 
  236. {
  237. return TRUE;
  238. }
  239. void CGraphicView::OnDrawLine() 
  240. if(m_hPE)
  241. {
  242. PEdestroy(m_hPE);
  243. Invalidate();
  244. }
  245. if(m_hPE)
  246. m_hPE=NULL;
  247. CreateSimpleGraph();  
  248. int nArray[2];
  249. nArray[0] = PEAS_AVGAP;
  250. nArray[1] = PEAS_AVGPP; 
  251. PEvset (m_hPE, PEP_naAUTOSTATSUBSETS, nArray, 2); 
  252. nArray[0] = 4;  // fourth subset
  253. nArray[1] = 5;  // fifth subset
  254. PEvset(m_hPE, PEP_naRANDOMSUBSETSTOGRAPH, nArray, 2); 
  255. PEnset(m_hPE, PEP_nSCROLLINGSUBSETS, 1);
  256. PEnset(m_hPE, PEP_nTABLEWHAT, PETW_ALLSUBSETS); 
  257. PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH);
  258. PEnset(m_hPE, PEP_nDATAPRECISION, 0);
  259. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE); 
  260. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  261. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER);
  262. PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE_INSIDE_AXIS);
  263. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
  264. PEnset(m_hPE, PEP_nBESTFITDEGREE, PEBFD_4TH);
  265. PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE);
  266. PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE);  
  267. }
  268. void CGraphicView::OnDrawPie() 
  269. {
  270. if(m_hPE)
  271. {
  272. PEdestroy(m_hPE);
  273. Invalidate();
  274. }
  275. // This example builds upon the basic CreateSimpleGraph '000' example chart //
  276. CreateSimpleGraph();
  277. // Disable default scale //
  278. PEnset(m_hPE, PEP_nSHOWYAXIS, PESA_EMPTY);
  279. // Generally, a custom y axis will need manual range control //
  280. PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
  281. double manminY = 0.0F;
  282. PEvset(m_hPE, PEP_fMANUALMINY, &manminY, 1);
  283. double manmaxY = 1000.0F;
  284. PEvset(m_hPE, PEP_fMANUALMAXY, &manmaxY, 1);
  285. // Create custom grid lines with HorzLineAnnotations //
  286. // Note that GridLineControl will control these annotations //
  287. double horzlineannot = 200.0F;
  288. PEvsetcell(m_hPE, PEP_faHORZLINEANNOTATION, 0, &horzlineannot);
  289. int horzlinetyp = PELAT_GRIDLINE;
  290. PEvsetcell(m_hPE, PEP_naHORZLINEANNOTATIONTYPE, 0, &horzlinetyp);
  291. PEvsetcell(m_hPE, PEP_szaHORZLINEANNOTATIONTEXT, 0, "|LLow Value");
  292. horzlineannot = 500.0F;
  293. PEvsetcell(m_hPE, PEP_faHORZLINEANNOTATION, 1, &horzlineannot);
  294. horzlinetyp = PELAT_GRIDLINE;
  295. PEvsetcell(m_hPE, PEP_naHORZLINEANNOTATIONTYPE, 1, &horzlinetyp);
  296. PEvsetcell(m_hPE, PEP_szaHORZLINEANNOTATIONTEXT, 1, "|LMedium Value");
  297. horzlineannot = 800.0F;
  298. PEvsetcell(m_hPE, PEP_faHORZLINEANNOTATION, 2, &horzlineannot);
  299. horzlinetyp = PELAT_GRIDLINE;
  300. PEvsetcell(m_hPE, PEP_naHORZLINEANNOTATIONTYPE, 2, &horzlinetyp);
  301. PEvsetcell(m_hPE, PEP_szaHORZLINEANNOTATIONTEXT, 2, "|LHigh Value");
  302. horzlineannot = 350.0F;
  303. PEvsetcell(m_hPE, PEP_faHORZLINEANNOTATION, 3, &horzlineannot);
  304. horzlinetyp = PELAT_GRIDTICK;
  305. PEvsetcell(m_hPE, PEP_naHORZLINEANNOTATIONTYPE, 3, &horzlinetyp);
  306. PEvsetcell(m_hPE, PEP_szaHORZLINEANNOTATIONTEXT, 3, "");
  307. horzlineannot = 650.0F;
  308. PEvsetcell(m_hPE, PEP_faHORZLINEANNOTATION, 4, &horzlineannot);
  309. horzlinetyp = PELAT_GRIDTICK;
  310. PEvsetcell(m_hPE, PEP_naHORZLINEANNOTATIONTYPE, 4, &horzlinetyp);
  311. PEvsetcell(m_hPE, PEP_szaHORZLINEANNOTATIONTEXT, 4, "");
  312. // Set LeftMargin to allocate space for line annotation text //
  313. // Use the longest string used in annotations.
  314. PEszset(m_hPE, PEP_szLEFTMARGIN, "Medium Value ");
  315. // Set this to see annotations //
  316. PEnset(m_hPE, PEP_bSHOWANNOTATIONS, TRUE);
  317. // Increase line annotation text size //
  318. PEnset(m_hPE, PEP_nLINEANNOTATIONTEXTSIZE, 100);
  319. // Put Grid In Front of Bars //
  320. PEnset(m_hPE, PEP_bGRIDINFRONT, TRUE);
  321. // Other various properties //
  322. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  323. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_LIGHT_INSET);
  324. }
  325. void CGraphicView::OnDrawScatter() 
  326. if(m_hPE)
  327. {
  328. PEdestroy(m_hPE);
  329. Invalidate();
  330. }
  331. CreateSimpleGraph(); 
  332. DWORD color; 
  333. for (int s=0;s<=3;s++)  //4-1
  334. {    
  335. for (int p=0;p<=11;p++)
  336. {
  337. switch(s)
  338. {    
  339. case 0:
  340. color = RGB(15 + ((p + 1) * 20), 0, 0);  
  341. PEvsetcellEx(m_hPE, PEP_dwaPOINTCOLORS, s, p, &color);
  342. break;
  343. case 1:
  344. color = RGB(0, 15 + ((p + 1) * 20), 0);
  345. PEvsetcellEx(m_hPE, PEP_dwaPOINTCOLORS, s, p, &color);
  346. break;
  347. case 2:
  348. color =  RGB(0, 0, 15 + ((p + 1) * 20));
  349. PEvsetcellEx(m_hPE, PEP_dwaPOINTCOLORS, s, p, &color);
  350. break;
  351. case 3:
  352. color = RGB(0, 15 + ((p + 1) * 20), 15 + ((p + 1) * 20));
  353. PEvsetcellEx(m_hPE, PEP_dwaPOINTCOLORS, s, p, &color);
  354. break;
  355. default:
  356. break;
  357. }
  358. }
  359. color = RGB(198, 0, 0);
  360. PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 0, &color); 
  361. color = RGB(0, 198, 0);
  362. PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 1, &color); 
  363. color = RGB(0, 0, 198);
  364. PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 2, &color); 
  365. color = RGB(0, 198, 198);
  366. PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 3, &color); 
  367. PEnset(m_hPE, PEP_nSCROLLINGSUBSETS, 1);
  368. PEnset(m_hPE, PEP_nTABLEWHAT, PETW_ALLSUBSETS);
  369. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE); 
  370. PEnset(m_hPE, PEP_dwGRAPHBACKCOLOR, 1);
  371. PEnset(m_hPE, PEP_nGRAPHGRADIENTSTYLE, 0); 
  372. PEnset(m_hPE, PEP_dwSHADOWCOLOR, RGB(0, 0, 0)); 
  373. PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH);
  374. PEnset(m_hPE, PEP_nDATAPRECISION, 0); 
  375. PEnset(m_hPE, PEP_nFORCEVERTICALPOINTS, PEFVP_SLANTED); 
  376. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
  377. PEnset(m_hPE, PEP_nBORDERTYPES, PETAB_NO_BORDER); 
  378. }
  379. void CGraphicView::OnDrawWhisker() 
  380. if(m_hPE)
  381. {
  382. PEdestroy(m_hPE);
  383. Invalidate();
  384. }
  385. //! Try this... Right Click chart and change the Plotting Method to Horizontal Bar Stacked. //
  386. // This example builds upon the basic CreateSimpleGraph '000' example chart //
  387. CreateSimpleGraph();
  388. // Enable Stacked type charts //
  389. PEnset(m_hPE, PEP_bNOSTACKEDDATA, FALSE);
  390. // Set plotting method //
  391. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BARSTACKED);
  392. // Add a table //
  393. PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH);
  394. PEnset(m_hPE, PEP_nDATAPRECISION, 2);
  395. PEnset(m_hPE, PEP_bALLOWHORZBARSTACKED, TRUE);
  396. }
  397. void CGraphicView::OnDrawStackedBar() 
  398. if(m_hPE)
  399. {
  400. PEdestroy(m_hPE);
  401. Invalidate();
  402. }
  403. //! Right button click to show popup menu. //
  404. //! Double Click to show customization dialog. //
  405. //! Left-Click and drag to draw zoom box. Use popup memu or 'z' to undo zoom. // 
  406. // This example builds upon the basic CreateSimpleGraph '000' example chart //
  407. CreateSimpleGraph();
  408. // Now sub-divide subsets into 4 individual axes //
  409. // Each axis with one subset in each //
  410. int nArray[4] = {1,1,1,1};
  411. PEvset (m_hPE, PEP_naMULTIAXESSUBSETS, nArray, 4);
  412. // Set first axis parameters //
  413. PEnset(m_hPE, PEP_nWORKINGAXIS, 0);
  414. PEszset(m_hPE, PEP_szYAXISLABEL, "标度1");
  415. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
  416. // Set second axis parameters //
  417. PEnset(m_hPE, PEP_nWORKINGAXIS, 1);
  418. PEszset(m_hPE, PEP_szYAXISLABEL, "标度2");
  419. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
  420. // Set third axis parameters //
  421. PEnset(m_hPE, PEP_nWORKINGAXIS, 2);
  422. PEszset(m_hPE, PEP_szYAXISLABEL, "标度3");
  423. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
  424. // Set fourth axis parameters //
  425. PEnset(m_hPE, PEP_nWORKINGAXIS, 3);
  426. PEszset(m_hPE, PEP_szYAXISLABEL, "标度4");
  427. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
  428. // Reset WorkingAxis when done //
  429. PEnset(m_hPE, PEP_nWORKINGAXIS, 0);
  430. // Add Axis Separator //
  431. PEnset(m_hPE, PEP_nMULTIAXESSEPARATORS, PEMAS_THICKPLUSTICK);
  432. // Axis Sizing //
  433. PEnset(m_hPE, PEP_nMULTIAXESSIZING, TRUE);
  434. // Get rid of 3d stuff //
  435. PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_NONE);
  436. // Other various properties //
  437. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  438. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_NO_BORDER);
  439. PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE);
  440. }
  441. void CGraphicView::OnDrawXyLine() 
  442. {
  443. if(m_hPE)
  444. {
  445. PEdestroy(m_hPE);
  446. Invalidate();
  447. }
  448. RECT rect;
  449. GetClientRect( &rect );
  450. m_canReal=TRUE; 
  451. m_Real=TRUE;
  452. char szSubsets[] = "电流t电压t频率t";
  453. PEvset (m_hPE, PEP_szaSUBSETLABELS, szSubsets, 3);
  454. // Set Various Other Properties ///
  455. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  456. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_INSET);
  457. m_hPE = PEcreate(PECONTROL_GRAPH, WS_VISIBLE, &rect, m_hWnd, 1001);
  458. PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  459. PEnset(m_hPE, PEP_bCACHEBMP, TRUE); 
  460. PEnset(m_hPE, PEP_nSUBSETS, 2); // set number of subsets
  461. PEnset(m_hPE, PEP_nPOINTS, 200); // number of data points
  462. PEnset(m_hPE, PEP_nPOINTSTOGRAPH, 20);
  463. PEnset(m_hPE, PEP_nPOINTSTOGRAPHINIT, PEPTGI_LASTPOINTS);    
  464. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSLINE);   
  465. PEszset(m_hPE, PEP_szMAINTITLE, "实时曲线示例");
  466. PEszset(m_hPE, PEP_szSUBTITLE, "编程设计实现-戚高"); // no subtitle
  467. PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
  468. double manminY = 1.0F;
  469. PEvset(m_hPE, PEP_fMANUALMINY, &manminY, 1);
  470. double manmaxY = 100.0F;
  471. PEvset(m_hPE, PEP_fMANUALMAXY, &manmaxY, 1);
  472. PEszset(m_hPE, PEP_szMANUALMAXPOINTLABEL, "000.000" );
  473. PEszset(m_hPE, PEP_szMANUALMAXDATASTRING, "00:00:00xx");
  474. PEnset(m_hPE, PEP_bNOSTACKEDDATA, TRUE); 
  475. PEnset(m_hPE, PEP_bNORANDOMPOINTSTOGRAPH, TRUE);
  476. PEnset(m_hPE, PEP_bALLOWHISTOGRAM, FALSE);
  477. PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
  478. PEnset(m_hPE, PEP_nGRIDLINECONTROL, FALSE);
  479. PEnset(m_hPE, PEP_nDATAPRECISION, 1);   
  480. PEszset(m_hPE, PEP_szaPOINTLABELS, "");
  481. float f1 = 0.0F;
  482. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 0, &f1);
  483. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 1, &f1);
  484. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 2, &f1);
  485. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 3, &f1);
  486. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, FALSE);
  487. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_LIGHT_SHADOW);
  488. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  489. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  490. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  491. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  492. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  493. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE); 
  494. }
  495. void CGraphicView::OnTimer(UINT nIDEvent) 
  496. CString ttext;  
  497. double newx2;
  498. float YData[250];
  499. double XData[250]; 
  500. double dx; 
  501. CTime t;
  502. TM petm; 
  503. if(m_canReal)
  504. {
  505. if(nIDEvent==2)
  506. {
  507. if(m_Real)
  508. {
  509. float newy = 50.0F + float(sin((double) m_nSinCounter * 0.075F) * 30.0F) + GetRandom(1, 15);
  510. float newy1,newy2;
  511. newy1 = 50.0F - float(sin((double) m_nSinCounter * 0.075F) * 30.0F) + GetRandom(1, 15);
  512. newy2 = 50.0F + float(sin((double) m_nSinCounter * 0.075F) * 30.0F) - GetRandom(1, 15);
  513. // Determine newx2 as current date and time in VB format //
  514. t = CTime::GetCurrentTime();
  515. petm.nDay = t.GetDay();
  516. petm.nMonth = t.GetMonth();
  517. petm.nYear = t.GetYear() - 1900;
  518. petm.nHour = t.GetHour();
  519. petm.nMinute = t.GetMinute();
  520. petm.nSecond = t.GetSecond();
  521. PEcreateserialdate(&newx2, &petm, PEDTM_VB);
  522. // Shift data when counter reaches end of data //
  523. if(m_nRealTimeCounter >= 1999)
  524. {
  525. memset(YData, 0, 250 * sizeof(float));
  526. memset(XData, 0, 250 * sizeof(double));
  527. // Shift Data by 250 data points, oldest 250 will be lost.
  528. m_nRealTimeCounter = m_nRealTimeCounter - 250;
  529. PEvset(m_hPE, PEP_faAPPENDYDATA, YData, 250);
  530. PEvset(m_hPE, PEP_faAPPENDXDATAII, XData, 250);
  531. }
  532. // Store new values at current index //
  533. PEvsetcellEx(m_hPE, PEP_faXDATAII, 0, m_nRealTimeCounter, &newx2);
  534. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, m_nRealTimeCounter, &newy);
  535. // Store new values at current index //
  536. PEvsetcellEx(m_hPE, PEP_faXDATAII, 1, m_nRealTimeCounter, &newx2);
  537. PEvsetcellEx(m_hPE, PEP_faYDATA, 1, m_nRealTimeCounter, &newy1);
  538. // Store new values at current index //
  539. PEvsetcellEx(m_hPE, PEP_faXDATAII, 2, m_nRealTimeCounter, &newx2);
  540. PEvsetcellEx(m_hPE, PEP_faYDATA, 2, m_nRealTimeCounter, &newy2);
  541. // Increment index counter //
  542. m_nRealTimeCounter += 1;
  543. // SinCounter is only to produce sin wave data //
  544. m_nSinCounter += 1;
  545. if (m_nSinCounter > 30000) 
  546. m_nSinCounter = 1;
  547. // If current time is beyond zoom max, the re-adjust zoom max //
  548. if (newx2 > ZoomEnd)
  549. {
  550. ZoomEnd = ZoomEnd + ZoomSmallInterval;
  551. ZoomStart = ZoomEnd - ZoomInterval;
  552. PEvset(m_hPE, PEP_fZOOMMINX, &ZoomStart, 1);
  553. PEvset(m_hPE, PEP_fZOOMMAXX, &ZoomEnd, 1);
  554. PEvgetcellEx(m_hPE, PEP_faXDATAII, 0, 1, &dx);
  555. PEvset(m_hPE, PEP_fMANUALMINX, &dx, 1);
  556. PEvset(m_hPE, PEP_fMANUALMAXX, &ZoomEnd, 1);
  557. }
  558. // Update image and force paint //
  559. PEreinitialize( m_hPE );
  560. PEresetimage( m_hPE, 0, 0 );
  561. ::InvalidateRect(m_hPE, NULL, FALSE);
  562. }
  563. }
  564. else
  565. {
  566. if(m_Real)
  567. {
  568. /*PEvset(m_hPE, PEP_szaAPPENDPOINTLABELDATA, NULL, 1);
  569. // make some random data //
  570. float r1,r2,fNew[2];
  571. r1 = (float) GetRandom(1, 20);
  572. r2 = (float) GetRandom(1, 100);
  573. fNew[0] = r1 + (r2 * .0001F);
  574. fNew[1] = fNew[0] * 4;
  575. PEvset(m_hPE, PEP_faAPPENDYDATA, &fNew[0], 1);*/
  576. ///////////////////////////////////  
  577. float newy = 50.0F + float(sin((double) m_nSinCounter * 0.075F) * 30.0F) + GetRandom(1, 15);
  578. float newx = (float)m_nRealTimeCounter; 
  579. // Append new values  //
  580. PEvset(m_hPE, PEP_faAPPENDYDATA, &newy, 1);
  581. PEvset(m_hPE, PEP_faAPPENDXDATA, &newx, 1); 
  582. m_nRealTimeCounter = m_nRealTimeCounter + 1;
  583. // Switch to AutoScaling x axis after receiving 100 data points //
  584. if (m_nRealTimeCounter == 100)
  585. PEnset(m_hPE, PEP_nMANUALSCALECONTROLX, PEMSC_NONE);
  586. // SinCounter is only to produce sin wave data //
  587. m_nSinCounter = m_nSinCounter + 1;
  588. if (m_nSinCounter > 30000) 
  589. m_nSinCounter = 1;
  590. // Update image and force paint //
  591. PEreinitialize( m_hPE );
  592. PEresetimage( m_hPE, 0, 0 );
  593. ::InvalidateRect(m_hPE, NULL, FALSE);
  594. }
  595. else
  596. {
  597. ////**********************************************
  598. float newy,newx;
  599. newy = 50.0F + float(sin((double) m_nSinCounter * 0.075F) * 30.0F) + GetRandom(1, 15);
  600. newx = float(m_nRealTimeCounter);
  601. // Update new data at current index //
  602. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, m_nRealTimeCounter, &newy);
  603. PEvsetcellEx(m_hPE, PEP_faXDATA, 0, m_nRealTimeCounter, &newx);
  604. newy = 50.0F - float(sin((double) m_nSinCounter * 0.075F) * 30.0F) + GetRandom(1, 15);
  605. newx = float(m_nRealTimeCounter);
  606. PEvsetcellEx(m_hPE, PEP_faYDATA, 1, m_nRealTimeCounter, &newy);
  607. PEvsetcellEx(m_hPE, PEP_faXDATA, 1, m_nRealTimeCounter, &newx);
  608. newy = 50.0F + float(sin((double) m_nSinCounter * 0.075F) * 12.0F) - GetRandom(1, 15);
  609. newx = float(m_nRealTimeCounter);
  610. PEvsetcellEx(m_hPE, PEP_faYDATA, 2, m_nRealTimeCounter, &newy);
  611. PEvsetcellEx(m_hPE, PEP_faXDATA, 2, m_nRealTimeCounter, &newx);
  612. double dx;
  613. dx = (double) newx;
  614. PEvsetcell(m_hPE, PEP_faVERTLINEANNOTATION, 0, &dx);
  615. PEvsetcell(m_hPE, PEP_faVERTLINEANNOTATION, 2, &dx);
  616. PEvsetcell(m_hPE, PEP_faVERTLINEANNOTATION, 3, &dx);
  617. int lt = PELT_MEDIUMSOLID;
  618. PEvsetcell(m_hPE, PEP_naVERTLINEANNOTATIONTYPE, 0, &lt);
  619. COLORREF col;
  620. col = RGB(0,0,198);
  621. PEvsetcell(m_hPE, PEP_dwaVERTLINEANNOTATIONCOLOR, 0, &col);
  622. col = RGB(0,198,0);
  623. PEvsetcell(m_hPE, PEP_dwaVERTLINEANNOTATIONCOLOR, 1, &col);
  624. col = RGB(255,198,0);
  625. PEvsetcell(m_hPE, PEP_dwaVERTLINEANNOTATIONCOLOR, 2, &col);
  626. // Increment counter //
  627. m_nRealTimeCounter = m_nRealTimeCounter + 1;
  628. // Reset counter at end of data //
  629. if (m_nRealTimeCounter == 100)
  630. m_nRealTimeCounter = 0;
  631. // SinCounter is only to produce sin wave data //
  632. m_nSinCounter = m_nSinCounter + 1;
  633. if (m_nSinCounter > 30000) 
  634. m_nSinCounter = 1;
  635. // Update image and force paint //
  636. PEreinitialize( m_hPE );
  637. // PEresetimage( m_hPE, 0, 0 );
  638. // PEresetimage( m_hPE, 1, 0 );
  639. PEresetimage( m_hPE, 2, 0 );
  640. ::InvalidateRect(m_hPE, NULL, FALSE);
  641. }
  642. }
  643. }
  644. CView::OnTimer(nIDEvent);
  645. }
  646. void CGraphicView::OnDraw3dBar() 
  647. if(m_hPE)
  648. {
  649. PEdestroy(m_hPE);
  650. Invalidate();
  651. }
  652. //! This shows how to place extra text inside table and within an axis. //
  653. //! Maximize to allow room for textual data which is drawn as fixed font size. //
  654. // This example builds upon the basic CreateSimpleGraph '000' example chart //
  655. CreateSimpleGraph();
  656. // Create two y axes //
  657. int nMAS[] = {2, 2};
  658. PEvset(m_hPE, PEP_naMULTIAXESSUBSETS, nMAS, 2);
  659. // Construct a simple table annotation //
  660. PEnset(m_hPE, PEP_nWORKINGTABLE, 0);
  661. PEnset(m_hPE, PEP_nTAROWS, 6);
  662. PEnset(m_hPE, PEP_nTACOLUMNS, 12);  // 12 is same number as PEP_nPOINTS
  663. // Pass the table text //
  664. char szTmp[48];
  665. float fp;
  666. int r, c;
  667. DWORD dwColor;
  668. BOOL b = TRUE;
  669. for (r=0; r<6; r++)
  670. {
  671. if (b)
  672. dwColor = RGB(175,175,175);
  673. else
  674. dwColor = RGB(255,255,255);
  675. b = !b;
  676. for (c=0; c<12; c++)
  677. {
  678. fp = float(sin(0.03F * (double) c + 1.0F + r) * 500.0F) + (float) GetRandom(2, 50);
  679. sprintf(szTmp, "%.3f ", fp);
  680. PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, c, szTmp);
  681. PEvsetcellEx(m_hPE, PEP_dwaTACOLOR, r, c, &dwColor);
  682. }
  683. }
  684. // Set Table Location //
  685. PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_AXIS_1);
  686. PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_BOTTOM_TABLE_SPACED);
  687. // Other Table Related Properties ///
  688. PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE);
  689. PEnset(m_hPE, PEP_nTABORDER, PETAB_NO_BORDER);
  690. PEnset(m_hPE, PEP_dwTABACKCOLOR, 1);
  691. PEnset(m_hPE, PEP_dwTAFORECOLOR, 1);
  692. // Construct a second simple table annotation //
  693. PEnset(m_hPE, PEP_nWORKINGTABLE, 1); 
  694. PEnset(m_hPE, PEP_nTAROWS, 6);
  695. PEnset(m_hPE, PEP_nTACOLUMNS, 12);
  696. // Pass the table text //
  697. b = TRUE;
  698. for (r=0; r<6; r++)
  699. {
  700. if (b)
  701. dwColor = RGB(175,175,175);
  702. else
  703. dwColor = RGB(255,255,255);
  704. b = !b;
  705. for (c=0; c<12; c++)
  706. {
  707. fp = float(sin(0.03F * (double) c + 1.0F + (2 * r)) * 500.0F) + (float) GetRandom(2, 50);
  708. sprintf(szTmp, "%.3f ", fp);
  709. PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, c, szTmp);
  710. PEvsetcellEx(m_hPE, PEP_dwaTACOLOR, r, c, &dwColor);
  711. }
  712. }
  713. // Set Table Location //
  714. PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_AXIS);
  715. PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_BOTTOM_TABLE_SPACED);
  716. // Other Table Related Properties ///
  717. PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE);
  718. PEnset(m_hPE, PEP_nTABORDER, PETAB_NO_BORDER);
  719. PEnset(m_hPE, PEP_dwTABACKCOLOR, 1);
  720. PEnset(m_hPE, PEP_dwTAFORECOLOR, 1);
  721. // Construct a third simple table annotation //
  722. PEnset(m_hPE, PEP_nWORKINGTABLE, 2); 
  723. PEnset(m_hPE, PEP_nTAROWS, 2);
  724. PEnset(m_hPE, PEP_nTACOLUMNS, 13);
  725. // Pass the table text //
  726. for (r=0; r<2; r++)
  727. {
  728. for (c=1; c<13; c++)
  729. {
  730. fp = float(sin(0.03F * (double) c + 1.0F) * 500.0F) + (float) GetRandom(2, 50);
  731. sprintf(szTmp, "%.3f ", fp);
  732. PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, c, szTmp);
  733. }
  734. }
  735. // Set Table Location //
  736. PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_TABLE);
  737. PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_TOP_TABLE_SPACED);
  738. // Other Table Related Properties ///
  739. PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE);
  740. PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(0,198,198));
  741. PEnset(m_hPE, PEP_bTAHEADERCOLUMN, TRUE);
  742. // Set Text for Header Column //
  743. strcpy(szTmp, "Table Annotation Line 1");
  744. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 0, szTmp);
  745. strcpy(szTmp, "Table Annotation Line 2");
  746. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 1, 0, szTmp);
  747. // Done setting Table Annotations ///
  748. // Set Various Other Properties ///
  749. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  750. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_SHADOW);
  751. PEnset(m_hPE, PEP_nDATAPRECISION, 0);
  752. PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH);
  753. PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE_INSIDE_AXIS);
  754. PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_YAXIS);
  755. PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE);
  756. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_SMALL);
  757. PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS);
  758. PEnset(m_hPE, PEP_bSHOWLEGEND, FALSE);
  759. PEnset(m_hPE, PEP_nWORKINGAXIS, 0);
  760. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
  761. PEnset(m_hPE, PEP_nRYAXISCOMPARISONSUBSETS, 1);
  762. PEnset(m_hPE, PEP_dwRYAXISCOLOR, RGB(0, 198,198));
  763. PEszset(m_hPE, PEP_szYAXISLABEL, "");
  764. PEszset(m_hPE, PEP_szRYAXISLABEL, "");
  765. PEnset(m_hPE, PEP_nWORKINGAXIS, 1);
  766. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
  767. PEnset(m_hPE, PEP_nRYAXISCOMPARISONSUBSETS, 1);
  768. PEnset(m_hPE, PEP_dwRYAXISCOLOR, RGB(0, 198,0));
  769. PEszset(m_hPE, PEP_szYAXISLABEL, "");
  770. PEszset(m_hPE, PEP_szRYAXISLABEL, "");
  771. DWORD dwArray[4] = { RGB(138,0,0), RGB(0, 198, 198), RGB(138,138,0), RGB(0,198,0) };
  772. PEvsetEx(m_hPE, PEP_dwaSUBSETCOLORS, 0, 4, dwArray, 0);
  773. PEnset(m_hPE, PEP_nSHOWTABLEANNOTATIONSMENU, PEMC_SHOW);
  774. }
  775. void CGraphicView::OnDraw3dStackedBar() 
  776. {
  777. if(m_hPE)
  778. {
  779. PEdestroy(m_hPE);
  780. Invalidate();
  781. }
  782. //! Chart fills 100 points and once 100 points have
  783. //! been passed, old data is over-written as more
  784. //! data is passed to chart.
  785. m_canReal=TRUE;
  786. m_Real=FALSE;
  787. RECT rect;
  788. GetClientRect( &rect ); 
  789. // Construct Object //
  790. m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1001);
  791. PEnset(m_hPE, PEP_nSUBSETS, 3);
  792. PEnset(m_hPE, PEP_nPOINTS, 100);
  793. // Set Manual Y scale //
  794. PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
  795. double arg = 1.0F;//
  796. PEvset(m_hPE, PEP_fMANUALMINY, &arg, 1);
  797. arg = 100.0F;
  798. PEvset(m_hPE, PEP_fMANUALMAXY, &arg, 1);
  799. // Set Manual X scale //
  800. PEnset(m_hPE, PEP_nMANUALSCALECONTROLX, PEMSC_MINMAX);
  801. arg = 1.0F;
  802. PEvset(m_hPE, PEP_fMANUALMINX, &arg, 1);
  803. arg = 100.0F;
  804. PEvset(m_hPE, PEP_fMANUALMAXX, &arg, 1);
  805. // Show Annotations //
  806. PEnset(m_hPE, PEP_bSHOWANNOTATIONS, TRUE);
  807. // Clear out default data //
  808. float val = 0;
  809. PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 0, &val);
  810. PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 1, &val);
  811. PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 2, &val);
  812. PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 3, &val); 
  813. PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 0, &val);
  814. PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 1, &val);
  815. PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 2, &val);
  816. PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 3, &val);
  817. PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 0, &val);
  818. PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 1, &val);
  819. PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 2, &val);
  820. PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 3, &val);
  821. int nTmpStyle;
  822. nTmpStyle = PELT_THINSOLID;
  823. PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 0, &nTmpStyle); 
  824. PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 1, &nTmpStyle); 
  825. PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 2, &nTmpStyle);
  826. // PEvset(m_hPE, PEP_naSUBSETLINETYPES, PELT_THINSOLID, 0);
  827. char szSubsets[] = "电流t电压t频率t";
  828. PEvset (m_hPE, PEP_szaSUBSETLABELS, szSubsets, 3);
  829. // Set Various Other Properties ///
  830. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  831. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_LINE);
  832. PEszset(m_hPE, PEP_szMAINTITLE, "工业控制实时曲线示例");
  833. PEszset(m_hPE, PEP_szSUBTITLE, "编程设计实现--戚高");
  834. PEnset(m_hPE, PEP_bNORANDOMPOINTSTOEXPORT, TRUE);
  835. PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
  836. PEnset(m_hPE, PEP_bALLOWBAR, FALSE);
  837. PEnset(m_hPE, PEP_bALLOWPOPUP, FALSE);
  838. PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  839. PEnset(m_hPE, PEP_bCACHEBMP, TRUE);
  840. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  841. DWORD col = RGB(0, 198, 198);
  842. PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 0, &col); 
  843. col = RGB(0,198,0);
  844. PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 1, &col);
  845. col = RGB(255,0,0);
  846. PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 2, &col);
  847. PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
  848. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  849. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  850. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  851. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  852. PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
  853. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  854. PEreinitialize(m_hPE);
  855. PEresetimage(m_hPE, 2, 0);
  856. ::InvalidateRect(m_hPE, NULL, FALSE);
  857. //Initialize Counters and Timer 
  858. m_nRealTimeCounter = 1;
  859. m_nSinCounter = 1;
  860. SetTimer( 1, 100, NULL ); 
  861. }
  862. void CGraphicView::OnDraw3dLine() 
  863. {   
  864. if(m_hPE)
  865. {
  866. PEdestroy(m_hPE);
  867. Invalidate();
  868. }
  869. m_canReal=FALSE; 
  870. RECT rect;
  871. GetClientRect( &rect );
  872. // Construct Object //
  873. m_hPE = PEcreate(PECONTROL_PGRAPH, WS_VISIBLE, &rect, m_hWnd, 1001);
  874. PEnset(m_hPE, PEP_nSUBSETS, 2);
  875. PEnset(m_hPE, PEP_nPOINTS, 360);
  876. int p;
  877. float f1, f2;
  878. for (p=0; p<360; p++)
  879. {
  880. f1 = (float) p;
  881. f2 = (float) 150 * (float)sin((double) p * 0.054F);
  882. PEvsetcellEx(m_hPE, PEP_faXDATA, 0, p, &f1);
  883. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, p, &f2);
  884. }
  885. for (p=0; p<360; p++)
  886. {
  887. f1 = (float) p;
  888. f2 = (float) 150 * (float)sin(((double) p * 0.044F)) * 2;
  889. PEvsetcellEx(m_hPE, PEP_faXDATA, 1, p, &f1);
  890. PEvsetcellEx(m_hPE, PEP_faYDATA, 1, p, &f2);
  891. }
  892. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_LINE);
  893. PEnset(m_hPE, PEP_nALLOWZOOMING, 1);
  894. PEszset(m_hPE, PEP_szMAINTITLE, "Polar Chart");
  895. PEszset(m_hPE, PEP_szSUBTITLE, ""); // no subtitle
  896. float ftmp = .9F;
  897. PEvset(m_hPE, PEP_fFONTSIZELEGENDCNTL, &ftmp, 1 );
  898. PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  899. PEnset(m_hPE, PEP_bCACHEBMP, TRUE);
  900. PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
  901. // Set line types
  902. int nTypes[] = { PELT_MEDIUMSOLID, PELT_MEDIUMSOLID };
  903. PEvset(m_hPE, PEP_naSUBSETLINETYPES, nTypes, 2);
  904. // Set point types
  905. int nPTypes[] = { PEPT_DOTSOLID, PEPT_PLUS };
  906. PEvset(m_hPE, PEP_naSUBSETPOINTTYPES, nTypes, 2);
  907. // subset colors
  908. DWORD dwArray[2] = { RGB(198,0,0), RGB(0, 198, 0) };
  909. PEvset( m_hPE, PEP_dwaSUBSETCOLORS, dwArray, 2);
  910. // subset labels
  911. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 0, "Signal #1" );
  912. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, "Signal #2" );
  913. double dnull = -99999.0F;
  914. PEvset(m_hPE, PEP_fNULLDATAVALUEX, &dnull, 1);
  915. PEvset(m_hPE, PEP_fNULLDATAVALUE, &dnull, 1);
  916. // Set Various other features //
  917. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  918. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  919. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER);
  920. PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE);
  921. PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE);
  922. PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE);
  923. PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT);
  924. PEnset(m_hPE, PEP_nPOINTSIZE, PEPS_SMALL);
  925. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  926. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  927. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  928. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  929. PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
  930. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  931. PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
  932. PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS);
  933. float f = 1.2F;
  934. PEvset(m_hPE, PEP_fFONTSIZEGNCNTL, &f, 1); 
  935. // Enable Smith Mode //
  936. PEnset(m_hPE, PEP_nSMITHCHART, PESC_SMITH);
  937. PEszset(m_hPE, PEP_szMAINTITLE, "Smith Chart");
  938. // Change the data to something more appropriate //
  939. PEnset(m_hPE, PEP_nSUBSETS, 2);
  940. PEnset(m_hPE, PEP_nPOINTS, 40);
  941. // Set first subset's data // 
  942. int s = 0;
  943. for (p=0; p<=39; p++)
  944. {
  945. f = (float) p * 0.1F;
  946. PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f);
  947. f = (float) sin((double) p * 0.54F) * 0.2F;
  948. PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &f);
  949. }
  950. // Set second subset's data //
  951. s = 1;
  952. for (p=0; p<=39; p++)
  953. {
  954. f = (float) p * 0.5F;
  955. PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f);
  956. f = (float) sin((double) p * 0.44F) * 0.5F;
  957. PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &f);
  958. }
  959. // Set Various other features //
  960. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  961. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_SHADOW);
  962. // Add Some Padding on Right and Bottom //
  963. PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400);
  964. PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400);
  965. PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400);
  966. }
  967. void CGraphicView::OnDraw3dPie() 
  968. {  
  969. if(m_hPE)
  970. {
  971. PEdestroy(m_hPE);
  972. Invalidate();
  973. }
  974. RECT rect;
  975. GetClientRect( &rect ); 
  976. m_canReal=FALSE;
  977. m_hPE = PEcreate(PECONTROL_PIE, WS_VISIBLE, &rect, m_hWnd, 1001);
  978. PEnset(m_hPE, PEP_nSUBSETS, 5);
  979. PEnset(m_hPE, PEP_nPOINTS, 12);
  980. int s,p;          
  981. for (s=0; s<5; s++)
  982. {
  983. for (p=0; p<12; p++)
  984. {
  985. float f1 = (float) GetRandom(1, 5) + ((float) GetRandom(1, 150) / 100.0F);
  986. PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f1);
  987. }
  988. }
  989. float f1= 0.0F;
  990. PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 3, &f1); 
  991. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 0, "北京" );
  992. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, "上海" );
  993. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 2, "广州"  );
  994. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 3, "长沙" );
  995. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 4, "重庆" ); 
  996. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 0, "一月"      );
  997. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 1, "二月"   );
  998. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 2, "三月");
  999. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 3, "四月" );
  1000. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 4, "五月"   );
  1001. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 5, "六月"    );
  1002. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 6, "七月"       );
  1003. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 7, "八月"   );
  1004. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 8, "九月"    );
  1005. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 9, "十月"     );
  1006. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 10, "十一月"   );
  1007. PEvsetcell( m_hPE, PEP_szaPOINTLABELS, 11, "十二月"    ); 
  1008. DWORD c[12];
  1009. c[0] = RGB(198, 0, 0);
  1010. c[1] = RGB(0, 198, 0);
  1011. c[2] = RGB(198, 198, 0);
  1012. c[3] = RGB(0, 0, 198);
  1013. c[4] = RGB(198, 0, 198);
  1014. c[5] = RGB(0, 198, 198);
  1015. c[6] = RGB(192, 192, 192);
  1016. c[7] = RGB(148, 0, 0);
  1017. c[8] = RGB(0, 148, 0);
  1018. c[9] = RGB(148, 148, 0);
  1019. c[10] = RGB(0, 148, 148);
  1020. c[11] = RGB(122, 122, 122);
  1021. PEvset(m_hPE, PEP_dwaSUBSETCOLORS, c, 12); 
  1022. PEszset(m_hPE, PEP_szMAINTITLE, "3D PIE图表显示编程");
  1023. PEszset(m_hPE, PEP_szSUBTITLE, "编程设计实现-戚高"); // no subtitle 
  1024. PEnset(m_hPE, PEP_nDATAPRECISION, 1);    
  1025. PEnset(m_hPE, PEP_nGROUPINGPERCENT, 4);
  1026. PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_3D);  
  1027. PEnset(m_hPE, PEP_bDISABLE3DSHADOW, FALSE);
  1028. PEnset(m_hPE, PEP_nAUTOEXPLODE, PEAE_ALLSUBSETS);
  1029. PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
  1030. PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  1031. PEnset(m_hPE, PEP_bCACHEBMP, TRUE);
  1032. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  1033. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE); 
  1034. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  1035. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER); 
  1036. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  1037. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  1038. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  1039. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  1040. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE); 
  1041. }
  1042. void CGraphicView::OnBkLine() 
  1043. if(m_hPE)
  1044. {
  1045. PEdestroy(m_hPE);
  1046. Invalidate();
  1047. }
  1048. OnDraw3dPie(); 
  1049. float f1 = 1; 
  1050. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 3, &f1);
  1051. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 5, &f1); 
  1052. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, FALSE);
  1053. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_SHADOW); 
  1054. PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400);
  1055. PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400);
  1056. PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400);
  1057. //***********************************************
  1058. OnDraw3dPie();
  1059. f1 = 1;
  1060. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 3, &f1);
  1061. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 5, &f1); 
  1062. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, FALSE);
  1063. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_SHADOW); 
  1064. PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400);
  1065. PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400);
  1066. PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400); 
  1067. }
  1068. void CGraphicView::OnBkXy() 
  1069. if(m_hPE)
  1070. {
  1071. PEdestroy(m_hPE);
  1072. Invalidate();
  1073. }
  1074. RECT rect;
  1075. GetClientRect( &rect );
  1076. // Construct Object //
  1077. m_hPE = PEcreate(PECONTROL_PGRAPH, WS_VISIBLE, &rect, m_hWnd, 100);
  1078. // Set to rose mode //
  1079. PEnset(m_hPE, PEP_nSMITHCHART, PESC_ROSE);  // Select Rose Plot Mode
  1080. // Set titles //
  1081. PEszset(m_hPE, PEP_szMAINTITLE, "Wind Rose Example");
  1082. PEszset(m_hPE, PEP_szSUBTITLE, " ");
  1083. // Set data //
  1084. PEnset(m_hPE, PEP_nSUBSETS, 13);
  1085. PEnset(m_hPE, PEP_nPOINTS, 16);
  1086. float tempxdata[] =
  1087. 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,
  1088. 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,
  1089. 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,
  1090. 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,
  1091. 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,
  1092. 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,
  1093. 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,
  1094. 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,
  1095. 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,
  1096. 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,
  1097. 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,
  1098. 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,
  1099. 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 };
  1100. PEvset(m_hPE, PEP_faXDATA, tempxdata, 208);
  1101. float tempydata[] = 
  1102. { .77F, .75F, .78F, .88F, 1.07F, .98F, .69F, .51F, .38F, .50F, .56F, .65F, .72F, .70F, .62F, .63F,
  1103. 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,
  1104. .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,
  1105. .20F, 1.07F, 3.71F, 4.49F, 2.08F, .23F, .10F, .11F, .29F, 1.16F, 2.32F, 1.26F, .54F, .18F, .09F, .22F,
  1106. .05F, .48F, .66F, 1.31F, .26F, .01F, .02F, .04F, .14F, .33F, .75F, .46F, .18F, .05F, .07F, .03F,
  1107. .04F, .10F, .07F, .02F, .02F, .02F, .01F, .01F, .01F, .05F, .12F, .09F, .04F, .02F, .03F, .04F,
  1108. .01F, 0.0F, .01F, .01F, 0.0F, .01F, .01F, .01F, .01F, .01F, .01F, .03F, 0.0F, 0.0F, .02F, .01F,
  1109. .01F, 0.0F, .01F, 0.0F, .01F, 0.0F, .01F, 0.0F, 0.0F, .01F, 0.0F, .01F, .02F, .01F, .01F, 0.0F,
  1110. .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,
  1111. 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,
  1112. 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,
  1113. 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,
  1114. 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 };
  1115. PEvset(m_hPE, PEP_faYDATA, tempydata, 208);
  1116. char tempptlabels[] = "EtENEtNEtNNEtNtNNWtNWtWNWtWtWSWtSWtSSWtStSSEtSEtESEt";
  1117. char tempsslabels[] = "3.75t6.25t8.75t11.25t13.75t16.25t18.75t21.25t23.75t26.25t28.75t31.25t33.75t";
  1118. PEvset(m_hPE, PEP_szaPOINTLABELS, tempptlabels, 16);
  1119. PEvset(m_hPE, PEP_szaSUBSETLABELS, tempsslabels, 13);
  1120. // Manually control degree line frequency //
  1121. PEnset(m_hPE, PEP_bMANUALXAXISTICKNLINE, TRUE);
  1122. double d = 22.5F;
  1123. PEvset(m_hPE, PEP_fMANUALXAXISLINE, &d, 1);
  1124. PEvset(m_hPE, PEP_fMANUALXAXISTICK, &d, 1);
  1125. // Make it so monochrome image is just black and white //
  1126. DWORD bwc[2];
  1127. bwc[0] = 0L;
  1128. bwc[1] = RGB(255,255,255);
  1129. PEvset(m_hPE, PEP_dwaSUBSETSHADES, bwc, 2);
  1130. // Remove standard legend, rose has a special legend //
  1131. int stl = -1;
  1132. PEvset(m_hPE, PEP_naSUBSETSTOLEGEND, &stl, 1);
  1133. // Set inner circle label //
  1134. PEszset(m_hPE, PEP_szMANUALMAXDATASTRING, "1.25|1.1%");
  1135. // Get rid of radius labels //
  1136. PEnset(m_hPE, PEP_bGRIDINFRONT, FALSE);
  1137. // Enable zooming //
  1138. PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT);
  1139. PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT);
  1140. PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  1141. PEnset(m_hPE, PEP_bCACHEBMP, TRUE);
  1142. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  1143. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, FALSE);
  1144. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER);
  1145. PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE);
  1146. PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE);
  1147. PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE);
  1148. // Add Some Padding on Right and Bottom //
  1149. PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400);
  1150. PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400);
  1151. PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400);
  1152. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  1153. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  1154. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  1155. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  1156. PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
  1157. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  1158. PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
  1159. PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS);
  1160. float f = 1.2F;
  1161. PEvset(m_hPE, PEP_fFONTSIZEGNCNTL, &f, 1);
  1162. }
  1163. void CGraphicView::OnBkArea() 
  1164. if(m_hPE)
  1165. {
  1166. PEdestroy(m_hPE);
  1167. Invalidate();
  1168. }
  1169. // This example builds upon the basic CreateSimpleGraph '000' example chart //
  1170. CreateSimpleGraph();
  1171. /////////////////////////////////////////
  1172. // Construct a simple table annotation //
  1173. /////////////////////////////////////////
  1174. PEnset(m_hPE, PEP_nWORKINGTABLE, 0);
  1175. PEnset(m_hPE, PEP_nTAROWS, 1);
  1176. PEnset(m_hPE, PEP_nTACOLUMNS, 2);
  1177. PEnset(m_hPE, PEP_nTATEXTSIZE, 85);
  1178. // Pass the table text //
  1179. char szTmp[48];
  1180. strcpy(szTmp, "Category 1");
  1181. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 0, szTmp);
  1182. strcpy(szTmp, "Category 2");
  1183. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 1, szTmp);
  1184. // Set column widths ///
  1185. int nWidth = 28;
  1186. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 0, &nWidth);
  1187. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 1, &nWidth);
  1188. PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE);
  1189. PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_AXIS_0);
  1190. PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_TOP_LEFT);
  1191. PEnset(m_hPE, PEP_nTABORDER, PETAB_SINGLE_LINE);
  1192. PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(255,255,255));
  1193. int nJust = PETAJ_CENTER;
  1194. PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 0, &nJust);
  1195. PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 1, &nJust);
  1196. /////////////////////////////////////////
  1197. // Construct a simple table annotation //
  1198. /////////////////////////////////////////
  1199. PEnset(m_hPE, PEP_nWORKINGTABLE, 1);
  1200. PEnset(m_hPE, PEP_nTAROWS, 1);
  1201. PEnset(m_hPE, PEP_nTACOLUMNS, 4);
  1202. PEnset(m_hPE, PEP_nTATEXTSIZE, 85);
  1203. strcpy(szTmp, "Sub Cat 1");
  1204. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 0, szTmp);
  1205. strcpy(szTmp, "Sub Cat 2");
  1206. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 1, szTmp);
  1207. strcpy(szTmp, "Sub Cat 3");
  1208. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 2, szTmp);
  1209. strcpy(szTmp, "Sub Cat 4");
  1210. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 3, szTmp);
  1211. nWidth = 14;
  1212. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 0, &nWidth);
  1213. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 1, &nWidth);
  1214. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 2, &nWidth);
  1215. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 3, &nWidth);
  1216. nJust = PETAJ_CENTER;
  1217. PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 0, &nJust);
  1218. PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 1, &nJust);
  1219. PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 2, &nJust);
  1220. PEvsetcell(m_hPE, PEP_naTAJUSTIFICATION, 3, &nJust);
  1221. PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(240,240,240));
  1222. PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE);
  1223. PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_AXIS_0);
  1224. PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_TOP_LEFT + PETAAL_NEW_ROW);
  1225. PEnset(m_hPE, PEP_nTABORDER, PETAB_SINGLE_LINE);
  1226. /////////////////////////////////////////
  1227. // Construct a simple table annotation //
  1228. /////////////////////////////////////////
  1229. PEnset(m_hPE, PEP_nWORKINGTABLE, 2);
  1230. PEnset(m_hPE, PEP_nTAROWS, 4);
  1231. PEnset(m_hPE, PEP_nTACOLUMNS, 8);
  1232. PEnset(m_hPE, PEP_nTATEXTSIZE, 85);
  1233. // Set Column Widths //
  1234. nWidth = 7;
  1235. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 0, &nWidth);
  1236. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 1, &nWidth);
  1237. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 2, &nWidth);
  1238. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 3, &nWidth);
  1239. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 4, &nWidth);
  1240. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 5, &nWidth);
  1241. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 6, &nWidth);
  1242. PEvsetcell(m_hPE, PEP_naTACOLUMNWIDTH, 7, &nWidth);
  1243. // Pass the table text //
  1244. float fp;
  1245. int nTmp;
  1246. for (int r=0; r<4; r++)
  1247. {
  1248. for (int c=0; c<8; c++)
  1249. {
  1250. fp = float(sin(0.3F * (double) c + 1) * 500.0F) + GetRandom(2, 50);
  1251. sprintf(szTmp, "%.2f ", fp);
  1252. PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, c, szTmp);
  1253. if (c > 5)
  1254. nTmp = RGB(0, 148, 0);
  1255. else if (c > 3)
  1256. nTmp = RGB(148, 148, 0);
  1257. else if (c > 1)
  1258. nTmp = RGB(0, 148, 148);
  1259. else
  1260. nTmp = RGB(198, 0, 0);
  1261. PEvsetcellEx(m_hPE, PEP_dwaTACOLOR, r, c, &nTmp); 
  1262. nJust = PETAJ_CENTER;
  1263. PEvsetcellEx(m_hPE, PEP_naTAJUSTIFICATION, r, c, &nJust);
  1264. }
  1265. }
  1266. // Other Table Related Properties ///
  1267. PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE);
  1268. PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_AXIS_0);
  1269. PEnset(m_hPE, PEP_nTAAXISLOCATION, PETAAL_TOP_LEFT + PETAAL_NEW_ROW + PETAAL_NEW_ROW);
  1270. PEnset(m_hPE, PEP_nTABORDER, PETAB_SINGLE_LINE);
  1271. PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(200, 200, 200));
  1272. // Done setting Table Annotations ///
  1273. // Set Various Other Properties ///
  1274. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  1275. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_SHADOW);
  1276. PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_BOTH);
  1277. PEnset(m_hPE, PEP_nDATAPRECISION, 0);
  1278. double f = 1.5F;
  1279. PEvset(m_hPE, PEP_fAXISNUMBERSPACING, &f, 1);
  1280. }
  1281. void CGraphicView::OnBkBar() 
  1282. if(m_hPE)
  1283. {
  1284. PEdestroy(m_hPE);
  1285. Invalidate();
  1286. }
  1287. // This example builds upon the basic CreateSimpleGraph '000' example chart //
  1288. CreateSimpleGraph();
  1289. // Construct a simple table annotation //
  1290. PEnset(m_hPE, PEP_nWORKINGTABLE, 0);
  1291. PEnset(m_hPE, PEP_nTAROWS, 4);
  1292. PEnset(m_hPE, PEP_nTACOLUMNS, 7);
  1293. // Pass the table text //
  1294. char szTmp[48];
  1295. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 1, 0, "Row 2 ");
  1296. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 2, 0, "Row 3 ");
  1297. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 3, 0, "Row 4 ");
  1298. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 1, "Column 2 ");
  1299. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 2, "Column 3 ");
  1300. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 3, "Column 4 ");
  1301. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 4, "Column 5 ");
  1302. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 5, "Column 6 ");
  1303. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 6, "Column 7 ");
  1304. float fp;
  1305. int nTmp;
  1306. for (int r=1; r<4; r++)
  1307. {
  1308. for (int c=1; c<7; c++)
  1309. {
  1310. fp = float(sin(0.3F * (double) c + 1) * 500.0F) + GetRandom(2, 50);
  1311. sprintf(szTmp, "%.5f ", fp);
  1312. PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, c, szTmp);
  1313. nTmp = RGB(198, 0, 0);
  1314. PEvsetcellEx(m_hPE, PEP_dwaTACOLOR, r, c, &nTmp); 
  1315. }
  1316. }
  1317. // Other Table Related Properties ///
  1318. PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE);
  1319. PEnset(m_hPE, PEP_nTALOCATION, PETAL_INSIDE_TOP_LEFT);
  1320. PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(255,255,255));
  1321. PEnset(m_hPE, PEP_nTAHEADERROWS, 1);
  1322. PEnset(m_hPE, PEP_bTAHEADERCOLUMN, TRUE);
  1323. PEnset(m_hPE, PEP_nTATEXTSIZE, 85);
  1324. // Construct a second simple table annotation //
  1325. PEnset(m_hPE, PEP_nWORKINGTABLE, 1);  // Note WorkingTable goes to 1
  1326. PEnset(m_hPE, PEP_nTAROWS, 15);
  1327. PEnset(m_hPE, PEP_nTACOLUMNS, 2);
  1328. // // Pass the table text //
  1329. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 0, "");
  1330. PEvsetcellEx(m_hPE, PEP_szaTATEXT, 0, 1, "Data");
  1331. nTmp = PETAJ_CENTER;
  1332. PEvsetcellEx(m_hPE, PEP_naTAJUSTIFICATION, 0, 0, &nTmp);
  1333. PEvsetcellEx(m_hPE, PEP_naTAJUSTIFICATION, 0, 1, &nTmp);
  1334. // First Column Text //
  1335. for (r=1; r<15; r++)
  1336. {
  1337. sprintf(szTmp, "%2d", r);
  1338. PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, 0, szTmp);
  1339. }
  1340. // // Second Column Text //
  1341. for (r=1; r<15; r++)
  1342. {
  1343. fp = float(sin(0.3F * (double) r + 1) * 500.0F) + GetRandom(2, 50);
  1344. sprintf(szTmp, "%.2f", fp);
  1345. PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, 1, szTmp);
  1346. }
  1347. // Other Table Related Properties ///
  1348. PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE);
  1349. PEnset(m_hPE, PEP_nTALOCATION, PETAL_LEFT_CENTER);
  1350. PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(255,255,255));
  1351. PEnset(m_hPE, PEP_nTAHEADERROWS, 1);
  1352. PEnset(m_hPE, PEP_bTAHEADERCOLUMN, TRUE);
  1353. // Done setting Table Annotations ///
  1354. // Set Various Other Properties ///
  1355. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  1356. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_LIGHT_INSET);
  1357. PEnset(m_hPE, PEP_nDATAPRECISION, 0);
  1358. }
  1359. void CGraphicView::OnBkBarGroup() 
  1360. if(m_hPE)
  1361. {
  1362. PEdestroy(m_hPE);
  1363. Invalidate();
  1364. }
  1365. RECT rect;
  1366. GetClientRect( &rect );
  1367. m_canReal=FALSE;
  1368. // Construct Object //
  1369. m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1000);
  1370. PEnset(m_hPE, PEP_nSUBSETS, 4);
  1371. PEnset(m_hPE, PEP_nPOINTS, 12);
  1372. // Change Data to match example scales which are manually configured //
  1373. for (int s=0; s<=3; s++)
  1374. {
  1375. for (int p=0; p<=11; p++)
  1376. {
  1377. float f;
  1378. f =  (p + 1) * 10.0F;
  1379. PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f);
  1380. switch (s)
  1381. {
  1382. case 0:
  1383. f = 0.01F + GetRandom(1, 4);
  1384. break;
  1385. case 1:
  1386. f = 400.0F + GetRandom(1, 450);
  1387. break;
  1388. case 2:
  1389. f = 0.01F + GetRandom(1, 25);
  1390. break;
  1391. case 3:
  1392. f = 0.01F + GetRandom(1, 65);
  1393. break;
  1394. }
  1395. PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &f);
  1396. }
  1397. }
  1398. // Now sub-divide subsets into 4 individual axes //
  1399. // Each axis with one subset in each //
  1400. int nArray[4] = {1,1,1,1};
  1401. PEvset (m_hPE, PEP_naMULTIAXESSUBSETS, nArray, 4);
  1402. // Create Overlapped Axes //
  1403. int nOMA[3] = {1,1,2};
  1404. PEvset (m_hPE, PEP_naOVERLAPMULTIAXES, nOMA, 3);
  1405. // Set Proportions of Axes  //
  1406. float fMAP[3] = {.2F, .5F, .3F};
  1407. PEvset (m_hPE, PEP_faMULTIAXESPROPORTIONS, fMAP, 3);
  1408. // Set up First axis parameters //  
  1409. PEnset(m_hPE, PEP_nWORKINGAXIS, 0);
  1410. PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
  1411. double dMin = 0.0F;
  1412. PEvset(m_hPE, PEP_fMANUALMINY, &dMin, 1);
  1413. double dMax = 5.0F;
  1414. PEvset(m_hPE, PEP_fMANUALMAXY, &dMax, 1);
  1415. PEnset(m_hPE, PEP_bMANUALYAXISTICKNLINE, TRUE);
  1416. double dLine = 2.5F;
  1417. PEvset(m_hPE, PEP_fMANUALYAXISLINE, &dLine, 1);
  1418. double dTick = 0.5F;
  1419. PEvset(m_hPE, PEP_fMANUALYAXISTICK, &dTick, 1);
  1420. PEnset(m_hPE, PEP_nSHOWTICKMARKY, PESTM_TICKS_HIDE); 
  1421. PEszset(m_hPE, PEP_szYAXISLABEL, "NPSHR (feet)");
  1422. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
  1423. // Set up Second axis parameters //  
  1424. PEnset(m_hPE, PEP_nWORKINGAXIS, 1);
  1425. PEnset(m_hPE, PEP_nRYAXISCOMPARISONSUBSETS, 1);
  1426. PEnset(m_hPE, PEP_nMANUALSCALECONTROLRY, PEMSC_MINMAX);
  1427. dMin = 400.0F;
  1428. PEvset(m_hPE, PEP_fMANUALMINRY, &dMin, 1);
  1429. dMax = 900.0F;
  1430. PEvset(m_hPE, PEP_fMANUALMAXRY, &dMax, 1);
  1431. PEnset(m_hPE, PEP_bMANUALRYAXISTICKNLINE, TRUE);
  1432. dLine = 100.0F;
  1433. PEvset(m_hPE, PEP_fMANUALRYAXISLINE, &dLine, 1);
  1434. dTick = 20.0F;
  1435. PEvset(m_hPE, PEP_fMANUALRYAXISTICK, &dTick, 1);
  1436. PEnset(m_hPE, PEP_nSHOWTICKMARKRY, PESTM_TICKS_HIDE); 
  1437. PEszset(m_hPE, PEP_szRYAXISLABEL, "Total Head (feet)");
  1438. PEnset(m_hPE, PEP_nPLOTTINGMETHODII, PEGPM_POINTSPLUSSPLINE);
  1439. // Set up Third axis parameters //  
  1440. PEnset(m_hPE, PEP_nWORKINGAXIS, 2);
  1441. PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
  1442. dMin = 0.0F;
  1443. PEvset(m_hPE, PEP_fMANUALMINY, &dMin, 1);
  1444. dMax = 30.0F;
  1445. PEvset(m_hPE, PEP_fMANUALMAXY, &dMax, 1);
  1446. PEnset(m_hPE, PEP_bMANUALYAXISTICKNLINE, TRUE);
  1447. dLine = 10.0F;
  1448. PEvset(m_hPE, PEP_fMANUALYAXISLINE, &dLine, 1);
  1449. dTick = 2.0F;
  1450. PEvset(m_hPE, PEP_fMANUALYAXISTICK, &dTick, 1);
  1451. PEnset(m_hPE, PEP_nSHOWTICKMARKY, PESTM_TICKS_HIDE); 
  1452. PEszset(m_hPE, PEP_szYAXISLABEL, "Efficiency (%)");
  1453. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSSPLINE);
  1454. // Set up Fourth axis parameters //  
  1455. PEnset(m_hPE, PEP_nWORKINGAXIS, 3);
  1456. PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
  1457. dMin = 0.0F;
  1458. PEvset(m_hPE, PEP_fMANUALMINY, &dMin, 1);
  1459. dMax = 75.0F;
  1460. PEvset(m_hPE, PEP_fMANUALMAXY, &dMax, 1);
  1461. PEnset(m_hPE, PEP_bMANUALYAXISTICKNLINE, TRUE);
  1462. dLine = 25.0F;
  1463. PEvset(m_hPE, PEP_fMANUALYAXISLINE, &dLine, 1);
  1464. dTick = 5.0F;
  1465. PEvset(m_hPE, PEP_fMANUALYAXISTICK, &dTick, 1);
  1466. PEnset(m_hPE, PEP_nSHOWTICKMARKY, PESTM_TICKS_HIDE); 
  1467. PEszset(m_hPE, PEP_szYAXISLABEL, "Power(HP)");
  1468. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSSPLINE);
  1469. // Done Setting Y Axis Parameters, reset WorkingAxis //
  1470. PEnset(m_hPE, PEP_nWORKINGAXIS, 0);
  1471. // Set various other properties //
  1472. PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_BOTH);
  1473. PEnset(m_hPE, PEP_nMULTIAXISSTYLE, PEMAS_GROUP_ALL_AXES);
  1474. PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE_INSIDE_OVERLAP);
  1475. PEszset(m_hPE, PEP_szXAXISLABEL, "Flow (gpm)");
  1476. PEnset(m_hPE, PEP_nBORDERTYPES, PETAB_SINGLE_LINE);
  1477. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  1478. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_MEDIUM); 
  1479. PEszset(m_hPE, PEP_szMAINTITLE, "");
  1480. PEszset(m_hPE, PEP_szSUBTITLE, "");
  1481. PEszset(m_hPE, PEP_szSUBTITLEFONT, "Courier New");
  1482. float fSize = 1.1F;
  1483. PEvset(m_hPE, PEP_fFONTSIZEMSCNTL, &fSize, 1);
  1484. PEvset(m_hPE, PEP_fFONTSIZEMBCNTL, &fSize, 1);
  1485. PEvsetcell(m_hPE, PEP_szaMULTISUBTITLES, 0, "PUMP PREDICTED PERFORMANCE|Units: US Customary|Date: 06/07/2002");
  1486. PEvsetcell(m_hPE, PEP_szaMULTISUBTITLES, 1, "Impeller Diameter (in): Max = 11.875, Rated = 11.72, Min =11.062||");
  1487. PEvsetcell(m_hPE, PEP_szaMULTIBOTTOMTITLES, 1, "Customer:  Since fixed length courier font, you can create rows by number of spaces, ||");
  1488. PEvsetcell(m_hPE, PEP_szaMULTIBOTTOMTITLES, 0, "Pump Model:  or, v5 has a table annotation feature which could be used to add text here. ||");
  1489. PEnset(m_hPE, PEP_bYAXISONRIGHT, TRUE);
  1490. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 0, "NPSHR");
  1491. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 1, "Head");
  1492. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 2, "Efficiency");
  1493. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 3, "Power");
  1494. PEnset(m_hPE, PEP_nMULTIAXISSTYLEMENU, PEMC_SHOW);
  1495. PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_NONE);
  1496. PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT);
  1497. PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT);
  1498. PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE);
  1499. PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE);
  1500. DWORD dwArray[4] = { RGB(198,0,0), RGB( 0, 198, 198 ), RGB( 198,198,0 ), RGB( 0,198,0 ) };
  1501. PEvset(m_hPE, PEP_dwaSUBSETCOLORS, dwArray, 4);
  1502. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  1503. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_NO_BORDER);
  1504. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  1505. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  1506. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  1507. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  1508. PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
  1509. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  1510. PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
  1511. PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS);
  1512. }
  1513. void CGraphicView::OnBkPie() 
  1514. {
  1515. if(m_hPE)
  1516. {
  1517. PEdestroy(m_hPE);
  1518. Invalidate();
  1519. }
  1520. //! Double Click to start and stop Auto Rotation. //
  1521. //! Click and drag scroll bar thumb tabs to quickly rotate. // 
  1522. //! Right button click to show popup menu. //
  1523. RECT rect;
  1524. GetClientRect( &rect );
  1525. m_hPE = PEcreate(PECONTROL_3D, WS_VISIBLE, &rect, m_hWnd, 1001);
  1526. // Non-Surface chart, set PolyMode //
  1527. PEnset(m_hPE, PEP_nPOLYMODE, PEPM_3DBAR);
  1528. // Pass Data //
  1529. double sMin, sMax;
  1530. long Row, Col, o, s, e, nQ;
  1531. long nStartRow, nEndRow, nStartCol, nEndCol, nTargetRows, nTargetCols;
  1532. nStartRow = 216;
  1533. nEndRow = 230;
  1534. nTargetRows = nEndRow - nStartRow + 1;
  1535. nStartCol = 156;
  1536. nEndCol = 170;
  1537. nTargetCols = nEndCol - nStartCol + 1;
  1538. nQ = nTargetRows * nTargetCols;
  1539. long* pElevData = NULL;
  1540. float* pMyXData = NULL;    
  1541. float* pMyYData = NULL;
  1542. float* pMyZData = NULL;
  1543. char szFile[] = "terrain.bin";
  1544. FILE * pFile = NULL;
  1545. pFile = fopen(szFile, "rb");
  1546. if (pFile)
  1547. {
  1548. pElevData = new long[202500];
  1549. // Transfer entire data file into memory //
  1550. size_t cnt;
  1551. e = 0;
  1552. for (s = 0; s < 45; s++)
  1553. {
  1554. cnt = fread(&pElevData[e], sizeof(long), 4500, pFile);
  1555. e += 4500;
  1556. }
  1557. fclose(pFile);
  1558. }
  1559. else
  1560. {
  1561. MessageBox("Data File [terrain.bin] not found in program directory.");
  1562. return;
  1563. }
  1564. pMyXData = new float[nQ];
  1565. pMyYData = new float[nQ];
  1566. pMyZData = new float[nQ];
  1567. long rowcounter, colcounter;
  1568. BOOL foundtargetindex = FALSE;
  1569. rowcounter = 0;
  1570. colcounter = 0;
  1571. sMax = -9999999.9F;
  1572. sMin = 9999999.9F;
  1573. for (Row=0; Row<450; Row++)
  1574. {
  1575. for (Col=0; Col<450; Col++)
  1576. {
  1577. foundtargetindex = FALSE;
  1578. if (Row >= nStartRow && Row <= nEndRow) 
  1579. {
  1580. if (Col >= nStartCol && Col <= nEndCol)
  1581. {
  1582. foundtargetindex = TRUE;
  1583. o = (rowcounter * nTargetRows) + colcounter;
  1584. pMyXData[o] = (float) Col + 1;
  1585. pMyZData[o] = (float) Row + 1;
  1586. pMyYData[o] = pElevData[(Row * 450) + Col] * 0.1F;
  1587. }
  1588. }
  1589. if (foundtargetindex) 
  1590. colcounter++;
  1591. }
  1592. if (foundtargetindex)
  1593. rowcounter++;
  1594. }
  1595. PEnset(m_hPE, PEP_nSUBSETS, nTargetRows);
  1596. PEnset(m_hPE, PEP_nPOINTS, nTargetCols);
  1597. // Perform the actual transfer of data //
  1598. PEvset(m_hPE, PEP_faXDATA, pMyXData, nQ);
  1599. PEvset(m_hPE, PEP_faYDATA, pMyYData, nQ);
  1600. PEvset(m_hPE, PEP_faZDATA, pMyZData, nQ);
  1601. if (pElevData)
  1602. delete pElevData;
  1603. if (pMyXData)
  1604. delete pMyXData;
  1605. if (pMyYData)
  1606. delete pMyYData;
  1607. if (pMyZData)
  1608. delete pMyZData;
  1609. // Set Various Other Properties //
  1610. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  1611. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  1612. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_SHADOW);
  1613. DWORD dwColor[] = {RGB(0, 148, 0), RGB(148, 0, 0), RGB(0, 0, 148),
  1614. RGB(148, 148, 0), RGB(0, 148, 148),
  1615. RGB(0, 182, 0), RGB(182, 0, 0), RGB(0, 0, 182),
  1616. RGB(182, 182, 0), RGB(0, 182, 182),
  1617. RGB(0, 198, 0), RGB(198, 0, 0), RGB(0, 0, 198),
  1618. RGB(198, 198, 0), RGB(0, 198, 148)  };
  1619. PEvset(m_hPE, PEP_dwaSUBSETCOLORS, dwColor, 15);
  1620. // Set subset labels for z axis**
  1621. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 0, "Row 1");
  1622. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 1, "Row 2");
  1623. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 2, "Row 3");
  1624. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 3, "Row 4");
  1625. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 4, "Row 5");
  1626. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 5, "Row 6");
  1627. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 6, "Row 7");
  1628. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 7, "Row 8");
  1629. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 8, "Row 9");
  1630. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 9, "Row 10");
  1631. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 10, "Row 11");
  1632. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 11, "Row 12");
  1633. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 12, "Row 13");
  1634. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 13, "Row 14");
  1635. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 14, "Row 15");
  1636. // Set point labels for x axis //
  1637. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 0, "Col 1");
  1638. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 1, "Col 2");
  1639. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 2, "Col 3");
  1640. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 3, "Col 4");
  1641. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 4, "Col 5");
  1642. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 5, "Col 6");
  1643. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 6, "Col 7");
  1644. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 7, "Col 8");
  1645. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 8, "Col 9");
  1646. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 9, "Col 10");
  1647. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 10, "Col 11");
  1648. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 11, "Col 12");
  1649. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 12, "Col 13");
  1650. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 13, "Col 14");
  1651. PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 14, "Col 15");
  1652. // Set Titles //
  1653. PEszset(m_hPE, PEP_szMAINTITLE, "3D Bar");
  1654. PEszset(m_hPE, PEP_szSUBTITLE, "");
  1655. // Set camera position //
  1656. PEnset(m_hPE, PEP_nVIEWINGHEIGHT, 15);
  1657. PEnset(m_hPE, PEP_nDEGREEOFROTATION, 314);
  1658. // Set Plotting methods //
  1659. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, 2);   // ' Shading
  1660. // Full rotation detail //
  1661. PEnset(m_hPE, PEP_nROTATIONDETAIL, PERD_FULLDETAIL);
  1662. // Set small font size //
  1663. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_SMALL);
  1664. // Prepare images in memory //
  1665. PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  1666. PEnset(m_hPE, PEP_bCACHEBMP, TRUE);
  1667. PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
  1668. PEnset(m_hPE, PEP_bALLOWSTYLEPAGE, FALSE);
  1669. PEnset(m_hPE, PEP_nROTATIONINCREMENT, PERI_INCBY2);
  1670. // Add Some Padding on Right and Bottom //
  1671. PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400);
  1672. PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400);
  1673. PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400);
  1674. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  1675. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  1676. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  1677. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  1678. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  1679. PEnset(m_hPE, PEP_dwGRAPHFORECOLOR, RGB(192,192,192));
  1680. }
  1681. void CGraphicView::OnButton32781() 
  1682. if(m_hPE)
  1683. {
  1684. PEdestroy(m_hPE);
  1685. Invalidate();
  1686. }
  1687. //! Double Click to start and stop Auto Rotation. //
  1688. //! Click and drag scroll bar thumb tabs to quickly rotate. // 
  1689. //! Right button click to show popup menu. //
  1690. RECT rect;
  1691. GetClientRect( &rect );
  1692. m_hPE = PEcreate(PECONTROL_3D, WS_VISIBLE, &rect, m_hWnd, 1001);
  1693. // Non-Surface chart, set PolyMode //
  1694. PEnset(m_hPE, PEP_nPOLYMODE, PEPM_SCATTER);
  1695. // Set the amount of data //
  1696. PEnset(m_hPE, PEP_nSUBSETS, 10);
  1697. PEnset(m_hPE, PEP_nPOINTS, 50);
  1698. // Pass data, First two subsets //
  1699. float f, f2;
  1700. for (int s=0; s<=1; s++)
  1701. {
  1702. for (int p=0; p<=49; p++)
  1703. {
  1704. f2 = 5.0F * (float)cos(p * .24);
  1705. PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f2);
  1706. if (s == 0)
  1707. f = (35.0F * (float)cos(p * 0.22F)) + (10.0F * (float)sin((s * .1F) * .94F));
  1708. else
  1709. f = (35.0F * (float)cos(p * 0.08F)) + (10.0F * (float)cos((s * .25F) * .6F));
  1710. PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &f);
  1711. f = 5.0F * (float)(sin(p * .08F));
  1712. PEvsetcellEx(m_hPE, PEP_faZDATA, s, p, &f);
  1713. }
  1714. }
  1715. // Pass more data, Second two subsets //
  1716. for (s=0; s<=1; s++)
  1717. {
  1718. for (int p=0; p<=49; p++)
  1719. {
  1720. f2 = 5.0F * (float)cos(p * .14);
  1721. f2 += 20;
  1722. PEvsetcellEx(m_hPE, PEP_faXDATA, s + 2, p, &f2);
  1723. if (s == 0)
  1724. f = (35.0F * (float)cos(p * 0.2F)) + (10.0F * (float)sin((s * .1F) * .74F));
  1725. else
  1726. f = (35.0F * (float)cos(p * 0.1F)) + (10.0F * (float)cos((s * .25F) * .74F));
  1727. f += 40;
  1728. PEvsetcellEx(m_hPE, PEP_faYDATA, s + 2, p, &f);
  1729. f = 5.0F * (float)(sin(p * .16F));
  1730. f += 20;
  1731. PEvsetcellEx(m_hPE, PEP_faZDATA, s + 2, p, &f);
  1732. }
  1733. }
  1734. // Pass more data, Third two subsets //
  1735. for (s=0; s<=1; s++)
  1736. {
  1737. for (int p=0; p<=49; p++)
  1738. {
  1739. f2 = 5.0F * (float)cos(p * .07);
  1740. f2 -= 20;
  1741. PEvsetcellEx(m_hPE, PEP_faXDATA, s + 4, p, &f2);
  1742. if (s == 0)
  1743. f = (35.0F * (float)cos(p * 0.08F)) + (10.0F * (float)sin((s * .07F) * .64F));
  1744. else
  1745. f = (35.0F * (float)cos(p * 0.2F)) + (10.0F * (float)cos((s * .15F) * 1.94F));
  1746. f += 40;
  1747. PEvsetcellEx(m_hPE, PEP_faYDATA, s + 4, p, &f);
  1748. f = 5.0F * (float)(sin(p * .09F));
  1749. f += 20;
  1750. PEvsetcellEx(m_hPE, PEP_faZDATA, s + 4, p, &f);
  1751. }
  1752. }
  1753. // Pass more data, Fourth two subsets //
  1754. for (s=0; s<=1; s++)
  1755. {
  1756. for (int p=0; p<=49; p++)
  1757. {
  1758. f2 = 5.0F * (float)cos(p * .12);
  1759. f2 -= 20;
  1760. PEvsetcellEx(m_hPE, PEP_faXDATA, s + 6, p, &f2);
  1761. if (s == 0)
  1762. f = (35.0F * (float)cos(p * 0.3F)) + (10.0F * (float)sin((s * .08F) * 1.74F));
  1763. else
  1764. f = (35.0F * (float)cos(p * 0.2F)) + (10.0F * (float)cos((s * .75F) * .774F));
  1765. f -= 40;
  1766. PEvsetcellEx(m_hPE, PEP_faYDATA, s + 6, p, &f);
  1767. f = 5.0F * (float)(sin(p * .36F));
  1768. f -= 20;
  1769. PEvsetcellEx(m_hPE, PEP_faZDATA, s + 6, p, &f);
  1770. }
  1771. }
  1772. // Pass more data, Fifth two subsets //
  1773. for (s=0; s<=1; s++)
  1774. {
  1775. for (int p=0; p<=49; p++)
  1776. {
  1777. f2 = 5.0F * (float)cos(p * .14);
  1778. f2 += 20;
  1779. PEvsetcellEx(m_hPE, PEP_faXDATA, s + 8, p, &f2);
  1780. if (s == 0)
  1781. f = (25.0F * (float)cos(p * 0.1F)) + (10.0F * (float)sin((s * .02F) * 3.74F));
  1782. else
  1783. f = (55.0F * (float)cos(p * 0.2F)) + (10.0F * (float)cos((s * .05F) * 5.74F));
  1784. f += 40;
  1785. PEvsetcellEx(m_hPE, PEP_faYDATA, s + 8, p, &f);
  1786. f = 5.0F * (float)(sin(p * .16F));
  1787. f -= 20;
  1788. PEvsetcellEx(m_hPE, PEP_faZDATA, s + 8, p, &f);
  1789. }
  1790. }
  1791. // Set Various Other Properties //
  1792. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, FALSE);
  1793. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_INSET);
  1794. DWORD dwColor[] = {RGB(198, 198, 0), RGB(0, 198, 198), RGB(0, 198, 0), RGB(198, 0, 0), RGB(0, 0, 198), 
  1795. RGB(192,192,192), RGB(198, 0, 198), RGB(200, 198, 150), RGB(200, 200, 140), RGB(150, 0, 198)};
  1796. PEvset(m_hPE, PEP_dwaSUBSETCOLORS, dwColor, 10);
  1797. int nPTypes[] = {PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS, PEPT_PLUS};
  1798. PEvset(m_hPE, PEP_naSUBSETPOINTTYPES, nPTypes, 10);
  1799. // Set subset labels and titles //
  1800. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 0, "Data 1");
  1801. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 1, "Data 2");
  1802. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 2, "Data 3");
  1803. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 3, "Data 4");
  1804. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 4, "Data 5");
  1805. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 5, "Data 6");
  1806. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 6, "Data 7");
  1807. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 7, "Data 8");
  1808. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 8, "Data 9");
  1809. PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 9, "Data 10");
  1810. PEszset(m_hPE, PEP_szMAINTITLE, "3D Scatter");
  1811. PEszset(m_hPE, PEP_szSUBTITLE, "");
  1812. // Set camera position //
  1813. PEnset(m_hPE, PEP_nVIEWINGHEIGHT, 15);
  1814. PEnset(m_hPE, PEP_nDEGREEOFROTATION, 145);
  1815. // Set Plotting methods //
  1816. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, 0);   // ' Points
  1817. // Set small font size //
  1818. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_MEDIUM);
  1819. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  1820. // Set legend location //
  1821. PEnset(m_hPE, PEP_nLEGENDLOCATION, PELL_LEFT);
  1822. // Prepare images in memory //
  1823. PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  1824. PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
  1825. PEnset(m_hPE, PEP_bCACHEBMP, TRUE);
  1826. PEnset(m_hPE, PEP_nROTATIONDETAIL, PERD_FULLDETAIL);
  1827. PEnset(m_hPE, PEP_nROTATIONSPEED, 50);
  1828. PEnset(m_hPE, PEP_nROTATIONINCREMENT, PERI_INCBY1);
  1829. PEnset(m_hPE, PEP_bAUTOROTATION, TRUE);
  1830. PEnset(m_hPE, PEP_bSHOWLEGEND, FALSE);
  1831. // Add Some Padding around image //
  1832. PEnset(m_hPE, PEP_nIMAGEADJUSTLEFT, 400);
  1833. PEnset(m_hPE, PEP_nIMAGEADJUSTRIGHT, 400);
  1834. PEnset(m_hPE, PEP_nIMAGEADJUSTBOTTOM, 400);
  1835. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  1836. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  1837. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  1838. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  1839. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  1840. PEnset(m_hPE, PEP_dwGRAPHFORECOLOR, RGB(192,192,192));
  1841. }
  1842. void CGraphicView::OnSize(UINT nType, int cx, int cy) 
  1843. {
  1844. CView::OnSize(nType, cx, cy);
  1845. if(m_hPE)
  1846. PEdestroy(m_hPE);
  1847. CreateSimpleGraph(); 
  1848. // TODO: Add your message handler code here
  1849. }
  1850. void CGraphicView::OnDrawNew() 
  1851. if(m_hPE)
  1852. PEdestroy(m_hPE);
  1853. // This example builds upon the basic CreateSimpleGraph '000' example chart //
  1854. CreateSimpleGraph();
  1855. int nHatchType[4];
  1856. nHatchType[0] = PEHS_BDIAGONAL;
  1857. nHatchType[1] = PEHS_CROSS;
  1858. nHatchType[2] = PEHS_DIAGCROSS;
  1859. nHatchType[3] = PEHS_FDIAGONAL;
  1860. PEvset(m_hPE, PEP_naSUBSETHATCH, nHatchType, 4);
  1861. // Set Other Various Properties ///
  1862. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  1863. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_INSET);
  1864. // Enable Stacked type charts //
  1865. PEnset(m_hPE, PEP_bNOSTACKEDDATA, FALSE);
  1866. // Set plotting method //
  1867. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BARSTACKED);
  1868. PEnset(m_hPE, PEP_dwHATCHBACKCOLOR, RGB(100,100,100));
  1869. PEnset(m_hPE, PEP_bDATASHADOWS, PEDS_SHADOWS); 
  1870. // Add a table //
  1871. PEnset(m_hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH);
  1872. PEnset(m_hPE, PEP_nDATAPRECISION, 0);
  1873. }
  1874. void CGraphicView::OnDrawSile() 
  1875. if(m_hPE)
  1876. PEdestroy(m_hPE);
  1877. //! Cross-Hair inside chart is a cursor giving a datapoint the focus //
  1878. //! Use arrow keys or mouse to move cursor to a new location //
  1879. //! You must click the control to give it the focus before key strokes will work. //
  1880. //! Right and Left arrow keys move cursor up and down points //
  1881. //! Up and Down arrow keys move cursor up and down subsets //
  1882. // This example builds upon the basic CreateSimpleSGraph '100' example chart //
  1883. CreateSimpleSGraph();
  1884. // Set up cursor //
  1885. PEnset(m_hPE, PEP_nCURSORMODE, PECM_DATACROSS);
  1886. // Help see data points //
  1887. PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE);
  1888. // This will allow you to move cursor by clicking data point //
  1889. PEnset(m_hPE, PEP_bMOUSECURSORCONTROL, TRUE);
  1890. PEnset(m_hPE, PEP_bALLOWDATAHOTSPOTS, TRUE);
  1891. // Cursor prompting in top left corner //
  1892. PEnset(m_hPE, PEP_bCURSORPROMPTTRACKING, TRUE);
  1893. PEnset(m_hPE, PEP_nCURSORPROMPTSTYLE, PECPS_XYVALUES);
  1894. PEnset(m_hPE, PEP_nCURSORPROMPTLOCATION, PECPL_TOP_RIGHT);
  1895. // Disable Zooming //
  1896. PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_NONE);
  1897. // Other possible values for cursor mode are below, //
  1898. // PECM_NOCURSOR = 0
  1899. // PECM_POINT = 1
  1900. // PECM_DATACROSS = 2
  1901. // PECM_DATASQUARE = 3
  1902. // PECM_FLOATINGY = 4
  1903. // PECM_FLOATINGXY = 5
  1904. // Uncomment to start cursor at different location //
  1905. // NOTE: You must reinitialize before setting cursor location //
  1906. // PEreinitialize(m_hPE);
  1907. // PEresetimage(m_hPE, 0, 0);
  1908. // PEnset(m_hPE, PEP_nCURSORSUBSET, 0);
  1909. // PEnset(m_hPE, PEP_nCURSORPOINT, 2);
  1910. ////////////////////////////////////////////////////////////////////////
  1911. // Look in OnCommand handler to see how to respond to cursor movement //
  1912. ////////////////////////////////////////////////////////////////////////
  1913. /*
  1914.   else if ((m_nLastSelection == 105) && (HIWORD(wp) == PEWN_CURSORMOVE))
  1915.   {
  1916.   int nSubset, nPoint;
  1917.   float xvalue, yvalue;
  1918.   char buffer[64];
  1919.   
  1920. nSubset = PEnget(m_hPE, PEP_nCURSORSUBSET);
  1921. nPoint = PEnget(m_hPE, PEP_nCURSORPOINT);
  1922.   PEvgetcellEx(m_hPE, PEP_faXDATA, nSubset, nPoint, &xvalue);
  1923.   PEvgetcellEx(m_hPE, PEP_faYDATA, nSubset, nPoint, &yvalue);
  1924.   
  1925. sprintf(buffer, "Cursor at %d,%d=(%.2f, %.2f)", nSubset, nPoint, xvalue, yvalue);
  1926.   CWnd* pParent = GetParent()->GetParent();
  1927.   if (pParent) {pParent->SetWindowText(buffer);}
  1928.   
  1929. pParent = AfxGetMainWnd();
  1930. if (pParent) {pParent->SetWindowText("PEWN_CURSORMOVE");}
  1931.   return TRUE;
  1932.   }
  1933. */
  1934. }
  1935. void CGraphicView::CreateSimpleSGraph()
  1936. {
  1937. if(m_hPE)
  1938. PEdestroy(m_hPE);
  1939. m_Real=FALSE;
  1940. m_canReal=FALSE;
  1941. //! Right button click to show popup menu. //
  1942. //! Double Click to show customization dialog. //
  1943. //! Left-Click and drag to draw zoom box. Use popup memu or 'z' to undo zoom. // 
  1944. // Simple example show the basics of a scientific graph object. //
  1945. // Scientific Graph's contain both YData and XData and thus data
  1946. // is not plotted equally spaced as the graph object does.
  1947. RECT rect;
  1948. GetClientRect( &rect );
  1949. m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1001);
  1950. if( m_hPE )
  1951. {
  1952. float fY;
  1953. float fX;
  1954. // Set number of Subsets and Points //
  1955. PEnset(m_hPE, PEP_nSUBSETS, 4);
  1956. PEnset(m_hPE, PEP_nPOINTS, 12);
  1957. for( int s=0; s<=3; s++ )
  1958. {
  1959. for( int p=0; p<=11; p++ )
  1960. {   
  1961. fX = ((float) (p+1)) * 100.0F;
  1962. PEvsetcellEx (m_hPE, PEP_faXDATA, s, p, &fX);
  1963. fY = ((float) (p+1) * 1.0F) + GetRandom(1, 250);
  1964. PEvsetcellEx (m_hPE, PEP_faYDATA, s, p, &fY);
  1965. }
  1966. }
  1967. // Set DataShadows to show shadows
  1968. PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS);
  1969. PEszset(m_hPE, PEP_szMAINTITLE, "历史线性统计曲线");
  1970. PEszset(m_hPE, PEP_szSUBTITLE, "程序设计与实现--戚高"); 
  1971. PEszset(m_hPE, PEP_szYAXISLABEL, "最大应用量");
  1972. PEszset(m_hPE, PEP_szXAXISLABEL, "月份");
  1973. PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
  1974. PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  1975. PEnset(m_hPE, PEP_bCACHEBMP, TRUE);
  1976. PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSSPLINE);
  1977. PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_NONE);
  1978. PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT);
  1979. PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT);
  1980. // subset labels //
  1981. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 0, "长沙" );
  1982. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, "上海" );
  1983. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 2, "北京" );
  1984. PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 3, "广州" );
  1985. // subset colors
  1986. DWORD dwArray[4] = { RGB(198,0,0), RGB( 0, 198, 198 ), RGB( 198,198,0 ), RGB( 0,198,0 ) };
  1987. PEvsetEx( m_hPE, PEP_dwaSUBSETCOLORS, 0, 4, dwArray, 0 );
  1988. // subset line types
  1989. int nLineTypes[] = { PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, PELT_MEDIUMSOLID };
  1990. PEvset(m_hPE, PEP_naSUBSETLINETYPES, nLineTypes, 4);
  1991. // subset point types
  1992. int nPointTypes[] = { PEPT_DOTSOLID, PEPT_UPTRIANGLESOLID, PEPT_SQUARESOLID, PEPT_DOWNTRIANGLESOLID };
  1993. PEvset(m_hPE, PEP_naSUBSETPOINTTYPES, nPointTypes, 4);
  1994. // Version 4.0 Features //
  1995. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  1996. PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE);
  1997. PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE);
  1998. PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE);
  1999. PEnset(m_hPE, PEP_nMULTIAXISSTYLE, PEMAS_SEPARATE_AXES);
  2000. // Set Various Other Properties //
  2001. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  2002. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER);
  2003. PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
  2004. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  2005. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  2006. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  2007. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  2008. PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
  2009. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  2010. PEnset(m_hPE, PEP_bSCROLLINGHORZZOOM, TRUE);
  2011. }
  2012. }
  2013. void CGraphicView::OnReal() 
  2014. {
  2015. KillTimer(1);
  2016. if(m_hPE)
  2017. PEdestroy(m_hPE);
  2018. m_canReal=TRUE;
  2019. m_Real=TRUE;
  2020. //! Chart holds 2000 points.  Data is fed into
  2021. //! data arrays at current data index.  Once 2000
  2022. //! points have been passed, 250 are truncated as
  2023. //! data is shifted to make room for 250 more data
  2024. //! points.
  2025. //! Depending upon ZoomMode property, this example with
  2026. //! either show most current 3 minutes or all data in
  2027. //! object.
  2028. RECT rect;
  2029. GetClientRect( &rect );
  2030. // Construct Object //
  2031. m_hPE = PEcreate(PECONTROL_SGRAPH, WS_CHILD|WS_VISIBLE, &rect, m_hWnd, 1001);
  2032. PEnset(m_hPE, PEP_nSUBSETS, 3);
  2033. PEnset(m_hPE, PEP_nPOINTS, 2000);
  2034. PEnset(m_hPE, PEP_nDATETIMEMODE, PEDTM_VB); // Date/Time Mode
  2035. PEnset(m_hPE, PEP_bUSINGXDATAII, TRUE);     // Using Double Precision XDataII
  2036. // Some functional attributes            // 1440 is minutes in a day
  2037. ZoomInterval = (3.0F / 1440.0F);         // 3 minute scale zoom interval
  2038. ZoomSmallInterval = (0.5F / 1440.0F);    // 30 second scale adjustment
  2039. // Determine current date and time in VB's format //
  2040. CTime t = CTime::GetCurrentTime();
  2041. TM petm;
  2042. petm.nDay = t.GetDay();
  2043. petm.nMonth = t.GetMonth();
  2044. petm.nYear = t.GetYear() - 1900;
  2045. petm.nHour = t.GetHour();
  2046. petm.nMinute = t.GetMinute();
  2047. petm.nSecond = t.GetSecond();
  2048. PEcreateserialdate(&StartTime, &petm, PEDTM_VB);
  2049. // Extents to show all data points 
  2050. double manmaxx;
  2051. PEnset(m_hPE, PEP_nMANUALSCALECONTROLX, PEMSC_MINMAX);
  2052. PEvset(m_hPE, PEP_fMANUALMINX, &StartTime, 1);
  2053. manmaxx = StartTime + ZoomInterval;
  2054. PEvset(m_hPE, PEP_fMANUALMAXX, &manmaxx, 1);
  2055. PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
  2056. double d = 1.0F;
  2057. PEvset(m_hPE, PEP_fMANUALMINY, &d, 1);
  2058. d = 100.0F;
  2059. PEvset(m_hPE, PEP_fMANUALMAXY, &d, 1);
  2060. // Set Zoomed partial Range of X Scale //
  2061. ZoomStart = StartTime;
  2062. ZoomEnd = ZoomStart + ZoomInterval;
  2063. PEvset(m_hPE, PEP_fZOOMMINX, &ZoomStart, 1);
  2064. PEvset(m_hPE, PEP_fZOOMMAXX, &ZoomEnd, 1);
  2065. d = 1.0F;
  2066. PEvset(m_hPE, PEP_fZOOMMINY, &d, 1);
  2067. d = 100.0F;
  2068. PEvset(m_hPE, PEP_fZOOMMAXY, &d, 1);
  2069. PEnset(m_hPE, PEP_bZOOMMODE, TRUE);
  2070. // If ZoomMode is True, you will see 3 minutes of data //
  2071. // If ZoomMode is False, you will see all data in object //
  2072. // Clear out default data '
  2073. // No need to clear out XData since using XDataII '
  2074. float f = 0.0F;
  2075. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 0, &f);
  2076. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 1, &f);
  2077. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 2, &f);
  2078. PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 3, &f);
  2079. PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 0, &f);
  2080. PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 1, &f);
  2081. PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 2, &f);
  2082. PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 3, &f);
  2083. PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 0, &f);
  2084. PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 1, &f);
  2085. PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 2, &f);
  2086. PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 3, &f);
  2087. // Show Annotations //
  2088. PEnset(m_hPE, PEP_bSHOWANNOTATIONS, TRUE);
  2089. // Set Various Other Properties ///
  2090. PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  2091. PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_INSET);
  2092. int nTmpStyle;
  2093. nTmpStyle = PELT_THINSOLID;
  2094. PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 0, &nTmpStyle); 
  2095. PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 1, &nTmpStyle); 
  2096. PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 2, &nTmpStyle);
  2097. // PEvset(m_hPE, PEP_naSUBSETLINETYPES, PELT_THINSOLID, 0);
  2098. char szSubsets[] = "电流t电压t频率t";
  2099. PEvset (m_hPE, PEP_szaSUBSETLABELS, szSubsets, 3);
  2100. PEszset(m_hPE, PEP_szMAINTITLE, "工业用实时曲线");
  2101. PEszset(m_hPE, PEP_szSUBTITLE, "编程设计实现-戚高");
  2102. PEnset(m_hPE, PEP_bNORANDOMPOINTSTOEXPORT, TRUE);
  2103. PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
  2104. PEnset(m_hPE, PEP_bALLOWBAR, FALSE);
  2105. PEnset(m_hPE, PEP_bALLOWPOPUP, FALSE);
  2106. PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  2107. PEnset(m_hPE, PEP_bCACHEBMP, TRUE);
  2108. PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  2109. DWORD col = RGB(0, 198, 198);
  2110. PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 0, &col); 
  2111. col = RGB(0,198,0);
  2112. PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 1, &col);
  2113. col = RGB(255,0,0);
  2114. PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 2, &col);
  2115. PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
  2116. PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  2117. PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  2118. PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  2119. PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  2120. PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
  2121. PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  2122. PEreinitialize(m_hPE);
  2123. PEresetimage(m_hPE, 0, 0);
  2124. ::InvalidateRect(m_hPE, NULL, FALSE);
  2125. // Initialize Counters and Timer //
  2126. m_nRealTimeCounter = 1;
  2127. m_nSinCounter = 1;
  2128. SetTimer( 2, 250, NULL ); 
  2129. }
  2130. void CGraphicView::OnDrawgraph() 
  2131. {  
  2132. if(m_hPE)
  2133. {
  2134. PEdestroy(m_hPE);
  2135. Invalidate();
  2136. }
  2137. m_Real=TRUE;
  2138. m_canReal=TRUE;
  2139.    //! Chart fills 100 points but x axis is initially
  2140.    //! manually scaled.  Once 100 point have been passed,
  2141.    //! the chart switches to autoscaling the x axis.
  2142.    RECT rect;
  2143.    GetClientRect( &rect );
  2144.    // Construct Object //
  2145.    m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1001);
  2146.    PEnset(m_hPE, PEP_nSUBSETS, 1);
  2147.    PEnset(m_hPE, PEP_nPOINTS, 100);
  2148.    // Set Manual Y scale //
  2149.    PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
  2150.    double arg = 1.0F;
  2151.    PEvset(m_hPE, PEP_fMANUALMINY, &arg, 1);
  2152.    arg = 100.0F;
  2153.    PEvset(m_hPE, PEP_fMANUALMAXY, &arg, 1);
  2154.    // Set Manual X scale //
  2155.    PEnset(m_hPE, PEP_nMANUALSCALECONTROLX, PEMSC_MINMAX);
  2156.    arg = 1.0F;
  2157.    PEvset(m_hPE, PEP_fMANUALMINX, &arg, 1);
  2158.    arg = 100;
  2159.    PEvset(m_hPE, PEP_fMANUALMAXX, &arg, 1);
  2160.    // Clear out default data //
  2161.    float val = 0;
  2162.    PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 0, &val);
  2163.    PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 1, &val);
  2164.    PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 2, &val);
  2165.    PEvsetcellEx(m_hPE, PEP_faXDATA, 0, 3, &val);
  2166.    PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 0, &val);
  2167.    PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 1, &val);
  2168.    PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 2, &val);
  2169.    PEvsetcellEx(m_hPE, PEP_faYDATA, 0, 3, &val);
  2170.    PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 0, &val);
  2171.    PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 1, &val);
  2172.    PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 2, &val);
  2173.    PEvsetcellEx(m_hPE, PEP_faXDATA, 1, 3, &val);
  2174.    PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 0, &val);
  2175.    PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 1, &val);
  2176.    PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 2, &val);
  2177.    PEvsetcellEx(m_hPE, PEP_faYDATA, 1, 3, &val);
  2178.    PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 0, &val);
  2179.    PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 1, &val);
  2180.    PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 2, &val);
  2181.    PEvsetcellEx(m_hPE, PEP_faXDATA, 2, 3, &val);
  2182.    PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 0, &val);
  2183.    PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 1, &val);
  2184.    PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 2, &val);
  2185.    PEvsetcellEx(m_hPE, PEP_faYDATA, 2, 3, &val);
  2186.    int nTmpStyle;
  2187.    nTmpStyle = PELT_THINSOLID;
  2188.    PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 0, &nTmpStyle); 
  2189.    PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 1, &nTmpStyle); 
  2190.    PEvsetcell(m_hPE, PEP_naSUBSETLINETYPES, 2, &nTmpStyle);
  2191.    // PEvset(m_hPE, PEP_naSUBSETLINETYPES, PELT_THINSOLID, 0);
  2192.    
  2193.    char szSubsets[] = "电流t电压t频率t";
  2194.    PEvset (m_hPE, PEP_szaSUBSETLABELS, szSubsets, 3);
  2195.    
  2196.    // Set Various Other Properties ///
  2197.    PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
  2198.    PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_INSET);
  2199.    
  2200.    PEszset(m_hPE, PEP_szMAINTITLE, "工业用实时曲线程序");
  2201.    
  2202.    PEszset(m_hPE, PEP_szSUBTITLE, "编程设计实现-戚高");
  2203.    PEnset(m_hPE, PEP_bNORANDOMPOINTSTOEXPORT, TRUE);
  2204.    PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
  2205.    PEnset(m_hPE, PEP_bALLOWBAR, FALSE);
  2206.    PEnset(m_hPE, PEP_bALLOWPOPUP, FALSE);
  2207.    PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
  2208.    PEnset(m_hPE, PEP_bCACHEBMP, TRUE);
  2209.    PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
  2210.    DWORD col = RGB(255, 0, 0);
  2211.    PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 0, &col); 
  2212.    
  2213.    col = RGB(0,198,0);
  2214.    PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 1, &col);
  2215.    
  2216.    col = RGB(255,0,0);
  2217.    PEvsetcell(m_hPE, PEP_dwaSUBSETCOLORS, 2, &col);
  2218.    
  2219.    PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
  2220.    PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
  2221.    PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
  2222.    PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
  2223.    PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
  2224.    PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
  2225.    PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
  2226.    PEreinitialize(m_hPE);
  2227.    PEresetimage(m_hPE, 0, 0);
  2228.    // Initialize Counters and Timer 
  2229.    m_nRealTimeCounter = 1;
  2230.    m_nSinCounter = 1;
  2231.    SetTimer( 1, 100, NULL );
  2232.  
  2233. }
  2234.