39 VC6中调用ProEssentials v5图表组件实现科学图表绘制_职称驿站
论文发表指导_期刊投稿推荐_期刊论文发表咨询_职称驿站

论文发表指导,期刊推荐,国际出版

职称驿站学术导航
关闭职称驿站导航

论文发表职称晋升 全方位咨询服务

学术出版,国际教著,国际期刊,SCI,SSCI,EI,SCOPUS,A&HCI等高端学术咨询

VC6中调用ProEssentials v5图表组件实现科学图表绘制

来源:职称驿站所属分类:计算机应用论文
发布时间:2013-09-07浏览:18次

   职称驿站是一个专业致力于期刊征稿、论文发表、写作指导、文献参考等服务项目的综合服务网站。“鸣”取“一鸣惊人”之意,作为论文服务行业的后起之秀,我们为客户提供了权威、快捷、全面的服务。

  如果您有论文发表方面的需要和疑问点这里

  1 ProEssentials v5简介:

  ProEssentials v5是应用于windows 服务器端和客户端开发的一系列图表组件,它是对绘制图表以及图表分析功能所需要的数据和方法的简单封装。可以提供Winforms、Webforms、ActiveX、VCL和DLL五种界面。它的图表类型很多,包括:一般图表、科学图表、3维图表、极坐标图表、饼状图表,几乎覆盖了所有常见的图表类型。我们可以很方便的调用ProEssentials v5的函数库,添加绘制图表的功能,并可以对图表进行分析,如:回归,求最大值,拟合曲线等。我们还可以很方便的将图表文件的数据文件进行保存,或者导出我们希望格式的图片,如bmp、jpg、png。注:一般图表与科学图表之间的区别在于,一般图表仅提供一维坐标数据绘图,而另一维坐标数据是等间距的。科学图表提供二维坐标数据,绘制任意的散点数据。

  2 具体应用方法:

  (1)无论开发的是OCX的应用程序、DLL的应用程序还是VCL的应用程序,首先要做的就是根据开发环境的操作系统类型,拷贝PEGRP32C.DLL到相应的在本地硬盘系统盘中去。如果是win95或者win98操作系统,拷贝PEGRP32C.DLL到System目录下;如果是win2000操作系统,拷贝PEGRP32C.DLL到System32目录下。PEGRAPHS.HLP文件是可选的

  (2)工程里面添加头文件Pegrpapi.h。

  选择需要调用的函数,完成图表的绘制功能。在此简介,ProEssentials v5函数和变量的命名规则。以PEP_为前缀的变量类型如下:

  PEP_b Boolean (4 bytes)

  PEP_n Integer (4 bytes)

  PEP_dw Double Word (4 bytes)

  PEP_sz Null Terminated array of characters.

  PEP_f Single (4 bytes) or Double (8 bytes) floating point.

  PEP_na Array of Integer (4 bytes)

  PEP_dwa Array of Double Word (4 bytes)

  PEP_sza Array of Null Terminated strings.

  PEP_fa Array of Single (4 bytes) or Double (8 bytes) floating point.

  PEP_struct Various structures

  要用DLL调用来设定获取以上变量类型的值,可以根据以上变量类型的前缀来判断应该:

  PEP_b PEnset / PEnget

  PEP_n PEnset / PEnget

  PEP_dw PElset / PElget (16 bit) PEnset / PEnget (32 bit)

  PEP_sz PEszset / PEszget.

  PEP_f PEvset / PEvget

  PEP_na PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell, PEvgetcellEx

  PEP_dwa PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell, PEvgetcellEx

  PEP_sza PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell, PEvgetcellEx

  PEP_fa PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell, PEvgetcellEx

  PEP_struct PEvset, / Pevget

  (3)选择适当的变量,将数据赋予这些变量。

  一般图表需要给PEP_faYDATA 、PEP_szaPOINTLABELS赋值。

  科学图表和极坐标图表需要給PEP_faXDATA 、PEP_faYDATA和 PEP_faZDATA赋值。

  3D的科学图表需要给PEP_faXDATA, PEP_faYDATA, PEP_faZDATA赋值,但是3D的柱状图仅需要PEP_faYDATA。

  饼状图用PEP_faXDATA 来控制“饼”的厚度,

  有以下的几个DLL函数可以为图表赋值:

  PEvset ():一次可以全部的完成所有数据的赋值。

  PEvsetEx ():一次可以完成部分数据的赋值。.

  Pevsetcell():一次仅可以为一维数据赋值。

  PevsetcellEx():一次仅可以为一个点赋值。

  因此Pevset()是最快的赋值方法。

  (4)选择选择图表中线(点)颜色的方法

  颜色是由PEP_dwaSUBSETCOLORS控制的,线型是由PEP_naSUBSETLINETYPES控制的,点型是由PEP_naSUBSETPOINTTYPES控制的。

  以下代码是在C/C++中实现线型设定方法。

  int nTmpStyles[3];

  nTmpStyles[0] = PELT_THINSOLID;

  nTmpStyles[1] = PELT_DASH;

  nTmpStyles[2] = PELT_DOT;

  PEvset(hPE, PEP_naSUBSETLINETYPES, nTmpStyles, 3);

  注:以上代码使用的Pevset()函数,也可以使用Pevsetcell()函数来实现线型的设定方法。代码如下:

  int nTmpStyle;

  nTmpStyle = PELT_THINSOLID;

  PEvsetcell(hPE, PEP_naSUBSETLINETYPES, 0, &nTmpStyle);

  nTmpStyle = PELT_DASH;

  PEvsetcell(hPE, PEP_naSUBSETLINETYPES, 1, &nTmpStyle);

  nTmpStyle = PELT_DOT;

  PEvsetcell(hPE, PEP_naSUBSETLINETYPES, 2, &nTmpStyle);

  其他设定颜色和点类型的方法与以上方法类似,在此不再赘述。

  3 实现结果:

  绘制了一个科学图表,带游标和坐标显示功能,以下函数分别实现基本图表功能和游标显示功能。

  void CPEView::CreateSimpleSGraph()

  {

  RECT rect;

  GetClientRect( &rect )

  m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1001);

  if( m_hPE )

  {

  float fY;

  float fX;

  // 设置子集数和每个子集的点数 //

  PEnset(m_hPE, PEP_nSUBSETS, 4);

  PEnset(m_hPE, PEP_nPOINTS, 12);

  for( int s=0; s<=3; s++ )

  { for( int p=0; p<=11; p++ )

  {

  fX = ((float) (p+1)) * 100.0F;

  PEvsetcellEx (m_hPE, PEP_faXDATA, s, p, &fX);

  fY = ((float) (p+1) * 1.0F) + GetRandom(1, 250);

  PEvsetcellEx (m_hPE, PEP_faYDATA, s, p, &fY);

  }

  }

  // 设置阴影

  PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS);

  PEszset(m_hPE, PEP_szMAINTITLE, Example Data);

  PEszset(m_hPE, PEP_szSUBTITLE, ); // no subtitle

  PEszset(m_hPE, PEP_szYAXISLABEL, Units Sold);

  PEszset(m_hPE, PEP_szXAXISLABEL, Month);

  PEnset(m_hPE, PEP_bFOCALRECT, FALSE);

  PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);

  PEnset(m_hPE, PEP_bCACHEBMP, TRUE);

  PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSSPLINE);

  PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_NONE);

  PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT);

  PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT);

  // 子集的标识

  PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 0, Texas );

  PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, Florida );

  PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 2, Washington );

  PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 3, California );

  // 子集点的颜色s

  DWORD dwArray[4] = { RGB(198,0,0), RGB( 0, 198, 198 ), RGB( 198,198,0 ), RGB( 0,198,0 ) };

  PEvsetEx( m_hPE, PEP_dwaSUBSETCOLORS, 0, 4, dwArray, 0 );

  // 子集点的线型

  int nLineTypes[] = { PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, PELT_MEDIUMSOLID };

  PEvset(m_hPE, PEP_naSUBSETLINETYPES, nLineTypes, 4);

  // 子集点的类型

  int nPointTypes[] = { PEPT_DOTSOLID, PEPT_UPTRIANGLESOLID, PEPT_SQUARESOLID, PEPT_DOWNTRIANGLESOLID };

  PEvset(m_hPE, PEP_naSUBSETPOINTTYPES, nPointTypes, 4)

  // Version 4.0 功能 //

  PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);

  PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE);

  PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE);

  PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE);

  PEnset(m_hPE, PEP_nMULTIAXISSTYLE, PEMAS_SEPARATE_AXES);

  // 设置其他属性 //

  PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);

  PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER);

  PEnset(m_hPE, PEP_nGRADIENTBARS, 8);

  PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);

  PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);

  PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);

  PEnset(m_hPE, PEP_bLABELBOLD, TRUE);

  PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);

  PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);

  PEnset(m_hPE, PEP_bSCROLLINGHORZZOOM, TRUE);

  }

  }

  void CPEView::CreateDataCursor()

  {

  CreateSimpleSGraph();

  // 创建游标 //

  PEnset(m_hPE, PEP_nCURSORMODE, PECM_DATACROSS);

  // 可以方便的查看数据点//

  PEnset(m_hPE, PEP_bMARKDATAPOINTS, TRUE);

  // 可以点击数据点来移动游标 //

  PEnset(m_hPE, PEP_bMOUSECURSORCONTROL, TRUE);

  PEnset(m_hPE, PEP_bALLOWDATAHOTSPOTS, TRUE);

  // Cursor prompting in top left corner //

  PEnset(m_hPE, PEP_bCURSORPROMPTTRACKING, TRUE);

  PEnset(m_hPE, PEP_nCURSORPROMPTSTYLE, PECPS_XYVALUES);

  PEnset(m_hPE, PEP_nCURSORPROMPTLOCATION, PECPL_TOP_RIGHT);

  // 取消放大功能

  PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_NONE);

  // 其他可能的游标模式如下:

  // PECM_NOCURSOR = 0

  // PECM_POINT = 1

  // PECM_DATACROSS = 2

  // PECM_DATASQUARE = 3

  // PECM_FLOATINGY = 4

  // PECM_FLOATINGXY = 5

  // 注意:必须重新初始化

  else if ((m_nLastSelection == 105) && (HIWORD(wp) == PEWN_CURSORMOVE))

  { int nSubset, nPoint;

  float xvalue, yvalue;

  char buffer[64];

  nSubset = PEnget(m_hPE, PEP_nCURSORSUBSET);

  nPoint = PEnget(m_hPE, PEP_nCURSORPOINT);

  PEvgetcellEx(m_hPE, PEP_faXDATA, nSubset, nPoint, &xvalue);

  PEvgetcellEx(m_hPE, PEP_faYDATA, nSubset, nPoint, &yvalue);

  sprintf(buffer, Cursor at %d,%d=(%.2f, %.2f), nSubset, nPoint, xvalue, yvalue);

  CWnd* pParent = GetParent()->GetParent();

  if (pParent) {pParent->SetWindowText(buffer);}

  pParent = AfxGetMainWnd();

  if (pParent) {pParent->SetWindowText(PEWN_CURSORMOVE);

  return TRUE;

  }

  }

  以上代码在Win2000,VC6环境下调试通过。

《VC6中调用ProEssentials v5图表组件实现科学图表绘制》

本文由职称驿站首发,您身边的高端学术顾问

文章名称: VC6中调用ProEssentials v5图表组件实现科学图表绘制

文章地址: https://m.zhichengyz.com/p-23981

相关内容推荐
肠道免疫相关的SCI期刊推荐9本
高级工程师职称评定要发论文还是出版著作
41本民族学与文学方向AMI收录期刊
土木工程2区sci期刊推荐9本
A类核心学术论文难发吗
教师职称专著对第一作者单位有要求吗
博士出书的最佳时间,理清3个环节,出版会及时
公共卫生、环境卫生与职业卫生SSCI期刊推荐6本
未能解决您的问题?马上联系学术顾问

未能解决您的问题?

不要急哦,马上联系学术顾问,获取答案!

免费获取
扫码关注公众号

扫码关注公众号

微信扫码加好友

微信扫码加好友

职称驿站 www.zhichengyz.com 版权所有 仿冒必究
冀ICP备16002873号-3