ProEssentials的MFC 图表库在VS2019-VS2022上机试用教程

翻译|使用教程|编辑:何跃|2022-01-13 13:53:58.870|阅读 23 次

概述:这个VS2022 - VS2019 MFC C++图表上机试用教程包括Visual Studio使用MFC的说明。

# 31款JAVA开发必备控件和工具 # 开发软/控件产品年终优惠

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

本次上机试用DEMO效果

DEMO前准备工作

重要提示:要想在我们的帮助系统中找到DLL的具体功能,请点击左上角的内容标签,然后在靠近底部的位置点击ProEssentials Reference,然后查看字母列表。.Net Reference部分是研究属性的最佳来源,仍然显示DLL的具体语法。

在安装ProEssentials时,安装程序会将ProEssentials DLL安装到System32目录下,在64位系统上为SysWow64。它还将头文件和导入库安装到C:\ProEssentials9\VC目录中。下载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:\ProEssentials9\VC演示目录复制到[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的地方进入。  这些都非常适用于修改现有的演示,在你的应用程序中实施之前测试潜在的修改。
标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至hey@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
在线咨询
联系我们

客服热线
400-700-1020

QQ客服

意见反馈


添加微信获专业服务

TOP
在线客服系统
live chat