这个VS2022 – VS2019 MFC C++图表上机试用教程包括Visual Studio使用MFC的说明。
ProEssentials DLL接口在创建独立的桌面或嵌入式EXE时使用,这些EXE将被免费分发并在终端用户机器上运行。这个VS2022 – VS2019 MFC C++图表上机试用教程包括Visual Studio使用MFC的说明。如果你喜欢一个不使用MFC的绝对最小的Win32 Hello World类型的项目,请参阅Win32 C++图表库。该产品评估还安装了一个大型的MFC示例项目。
本次上机试用DEMO效果


DEMO前准备工作
在安装ProEssentials时,安装程序会将ProEssentials DLL安装到System32目录下,在64位系统上为SysWow64。它还将头文件和导入库安装到C:ProEssentials9VC目录中。下载v9 Charting Demo: PE9-Demo.exe 相关的文件是:
- PEGRP32G.DLL : ProEssentials Pro DLL
- PEGRP32G.LIB : ProEssentials Pro LIB File
- PEGRPAPI.H : ProEssentials Header File
- PEGRPSG.DLL : ProEssentials Standard DLL
- PEGRPSG.LIB : ProEssentials Standard LIB File
创建项目VS2019-VS2022
1) 启动Visual Studio.NET并创建一个新项目,目标是[C++][Windows][桌面]和[MFC应用]。输入一个项目名称为[MyFirstMfc]。

2) 输入你的项目名称后,应用向导会要求进行其他设置,比如皮肤样式、资源语言、窗体按钮、打印和打印预览等等。



3)首先手动将’PEGRPAPI.H’和’PEGRP32G.LIB’从C:ProEssentials9VC演示目录复制到[MyFirstMfc]项目文件的位置。
注意,如果使用标准版而不是专业版,使用’PEGRPSG.LIB’。
在Visual Studio顶层菜单中,使用[Project / Add Exiting Item…]菜单将’PEGRPAPI.H’和’PEGRP32G.LIB’添加到[MyFirstMfc]项目中。
图片显示了现有文件被添加到你的项目中。

4) 打开文件’myfirstmfcview.cpp’,在靠近顶部的地方添加一行。
#include "Pegrpapi.h"
include语句添加了包含常量和函数声明的ProEssentials头文件。

5)打开文件’myfirstmfcview.h’并添加这一行。
HWND hPE。

变量hPE用于存储ProEssentials图表控件的窗口句柄。我们创建的图表将是一个标准的Window;就像我们调用CreateWindow API调用一样。
MyFirstMfcView的每个实例都会有自己的句柄副本。
然后在文件’myfirstmfcview.cpp’中找到构造函数,将hPE初始化为NULL。
hPE = NULL。

6) 在Visual Studio的顶层菜单中,使用[Project / Class Wizard…]菜单来打开Class Wizard对话框。
选择类名CMyFirstMfcView。
选择 “信息 “标签,双击 “信息”…
- WM_CREATE
- WM_DESTROY
- WM_ERASEBKGND
- WM_SIZE
该图片显示了添加到你的项目中的消息处理程序。现在我们的视图类(图表的父窗口)将寻求对这些消息的响应。

选择虚拟函数标签,双击函数…
- OnCommand
图中显示了添加到你的项目中的虚拟函数OnCommand。现在我们的视图类(图表的父窗口)将对WM_COMMAND消息做出响应。

7) 在MyFirstMfcView.cpp最近添加的OnCreate, OnDestroy, OnSize和OnCommand部分,添加以下代码,初始化一个示例图表。请看下面的图片来进一步参考。
OnCreate:在父类创建窗口后创建并初始化一个图表
RECT r;int s, p, dwColor;float f[] = {10, 30, 20, 40, 30, 50, 15, 63, 74, 54, 25, 34};GetClientRect(&r);// PEcreate is similar to CreateWindow API call, returns a Window Handle //hPE = PEcreate(PECONTROL_GRAPH, 0, &r, this->m_hWnd, 1000);PEszset(hPE, PEP_szMAINTITLE, TEXT("Hello World"));PEszset(hPE, PEP_szSUBTITLE, TEXT(""));PEnset(hPE, PEP_nSUBSETS, 2); // Subsets = Rows //PEnset(hPE, PEP_nPOINTS, 6); // Points = Columns //// Passing data one piece at a time //for (s=0; s<2; s++){ for (p=0; p<6; p++) { // (s*6)+p or (SubsetIndex * NumberPoints) + PointIndex // PEvsetcellEx(hPE, PEP_faYDATA, s, p, &f[(s*6)+p]); }}// or Passing data in one call is much faster: PEvset(hPE, PEP_faYDATA, f, 12); //PEvsetcell(hPE, PEP_szaPOINTLABELS, 0, TEXT("Jan"));PEvsetcell(hPE, PEP_szaPOINTLABELS, 1, TEXT("Feb"));PEvsetcell(hPE, PEP_szaPOINTLABELS, 2, TEXT("Mar"));PEvsetcell(hPE, PEP_szaPOINTLABELS, 3, TEXT("Apr"));PEvsetcell(hPE, PEP_szaPOINTLABELS, 4, TEXT("May"));PEvsetcell(hPE, PEP_szaPOINTLABELS, 5, TEXT("June"));PEvsetcell(hPE, PEP_szaSUBSETLABELS, 0, TEXT("For .Net Framework"));PEvsetcell(hPE, PEP_szaSUBSETLABELS, 1, TEXT("or MFC, ActiveX, VCL"));PEszset(hPE, PEP_szYAXISLABEL, TEXT("Simple Quality Rendering"));PEszset(hPE, PEP_szXAXISLABEL, TEXT(""));dwColor = PERGB(60, 0, 180, 0); PEvsetcell(hPE, PEP_dwaSUBSETCOLORS, 0, &dwColor);dwColor = PERGB(180, 0, 0, 130); PEvsetcell(hPE, PEP_dwaSUBSETCOLORS, 1, &dwColor);// Quick way to set many colors via QuickStyle property //PEnset(hPE, PEP_bBITMAPGRADIENTMODE, FALSE);PEnset(hPE, PEP_nQUICKSTYLE, PEQS_LIGHT_SHADOW);PEnset(hPE, PEP_nGRAPHPLUSTABLE, PEGPT_BOTH);PEnset(hPE, PEP_nDATAPRECISION, 0);PEnset(hPE, PEP_bLABELBOLD, TRUE);PEnset(hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);PEnset(hPE, PEP_nGRADIENTBARS, 8);PEnset(hPE, PEP_bBARGLASSEFFECT, TRUE);PEnset(hPE, PEP_nLEGENDLOCATION, PELL_LEFT);PEnset(hPE, PEP_nDATASHADOWS, PEDS_3D);PEnset(hPE, PEP_bFIXEDFONTS, TRUE);PEnset(hPE, PEP_nFONTSIZE, PEFS_LARGE);// You will likely set these for all charts //PEnset(hPE, PEP_bPREPAREIMAGES, TRUE);PEnset(hPE, PEP_bCACHEBMP, TRUE);PEnset(hPE, PEP_nRENDERENGINE, PERE_DIRECT2D);PEnset(hPE, PEP_bANTIALIASGRAPHICS, TRUE);PEnset(hPE, PEP_bANTIALIASTEXT, TRUE);// Setting this TRUE will enable Data HotSpots, //// but we need to add code to respond to hot spot message //PEnset(hPE, PEP_bALLOWDATAHOTSPOTS, TRUE);// Always finish your property settings with these function calls //PEreinitialize(hPE);PEresetimage(hPE, 0, 0);
OnDestroy: 资源销毁
if (hPE) { PEdestroy(hPE); hPE = 0; }
OnSize: 图表随父窗体尺寸变化
if (hPE){ RECT r; GetClientRect(&r); ::MoveWindow(hPE, 0, 0, r.right, r.bottom, FALSE);}
OnCommand:事件监听
int wmId = LOWORD(wParam);int wmEvent = HIWORD(wParam);switch (wmEvent){case PEWN_CLICKED: HOTSPOTDATA hsd; TCHAR buffer[128]; float yvalue; PEvget(hPE, PEP_structHOTSPOTDATA, &hsd); if (hsd.nHotSpotType == PEHS_DATAPOINT) { PEvgetcellEx(hPE, PEP_faYDATA, hsd.w1, hsd.w2, &yvalue); swprintf_s(buffer, TEXT(“DataPoint %d value %.2f“), hsd.w2, yvalue); ::MessageBox(this->m_hWnd, buffer, TEXT(“Hello World“), 0); } break;}
然后整个代码效果如下:


8) 保存并运行该项目。你的项目将显示一个图像,如下。将鼠标移到一个条形图上,然后点击以触发DataHotSpot事件。

以上就是本次上机练习的效果。
关于其他DEMO体验,可以点击这里下载安装获得。请注意,我们的主要图表演示是在WPF和Winform C#.NET、VB.NET、VC++ MFC、Delphi、Builder中复制的,都可以从你安装ProEssentials的地方进入。 这些都非常适用于修改现有的演示,在你的应用程序中实施之前测试潜在的修改。
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!