ProEssentials教程1-和MFC集成的教程

ProEssentials v5简介: 

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

具体应用方法: 
[separator]
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 
(bytes

PEP_n Integer (bytes

PEP_dw Double Word (bytes

PEP_sz Null Terminated array of characters

PEP_f Single (bytesor Double (bytesfloating point

PEP_na Array of Integer (bytes

PEP_dwa Array of Double Word (bytes

PEP_sza Array of Null Terminated strings

PEP_fa Array of Single (bytesor Double (bytesfloating point

PEP_struct Various structures 

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

PEP_b PEnset 
PEnget 

PEP_n PEnset 
PEnget 

PEP_dw PElset 
PElget (16 bitPEnset PEnget (32 bit

PEP_sz PEszset PEszget

PEP_f PEvset PEvget 

PEP_na PEvset
PEvsetcellPEvsetcellEx PEvgetPEvgetcellPEvgetcellEx 

PEP_dwa PEvset
PEvsetcellPEvsetcellEx PEvgetPEvgetcellPEvgetcellEx 

PEP_sza PEvset
PEvsetcellPEvsetcellEx PEvgetPEvgetcellPEvgetcellEx 

PEP_fa PEvset
PEvsetcellPEvsetcellEx PEvgetPEvgetcellPEvgetcellEx 

PEP_struct PEvset
/ Pevget 

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

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

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

3D的科学图表需要给PEP_faXDATAPEP_faYDATAPEP_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(hPEPEP_naSUBSETLINETYPESnTmpStyles3); 

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

int nTmpStyle

nTmpStyle PELT_THINSOLID

PEvsetcell(hPEPEP_naSUBSETLINETYPES0, &nTmpStyle); 

nTmpStyle PELT_DASH

PEvsetcell(hPEPEP_naSUBSETLINETYPES1, &nTmpStyle); 

nTmpStyle PELT_DOT

PEvsetcell(hPEPEP_naSUBSETLINETYPES2, &nTmpStyle); 

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

实现结果: 

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

void CPEView::CreateSimpleSGraph() 

  
RECT rect
  
  
GetClientRect( &rect ); 
  
  
m_hPE PEcreate(PECONTROL_SGRAPHWS_VISIBLE, &rectm_hWnd1001); 
  
  
ifm_hPE 
    
  { 
    
float fY
    
float fX
    
    
// 设置子集数和每个子集的点数 // 
    
    
PEnset(m_hPEPEP_nSUBSETS4); 
    
PEnset(m_hPEPEP_nPOINTS12); 
    
forint s=0s<=3s++ ) 
    {
      
forint p=0p<=11p++ ) 
      { 
        
fX = ((float) (p+1)) * 100.0F
        
PEvsetcellEx (m_hPEPEP_faXDATAsp, &fX); 
        
fY = ((float) (p+1) * 1.0F) + GetRandom(1250); 
        
PEvsetcellEx (m_hPEPEP_faYDATAsp, &fY); 
      } 
    } 
    
    
// 设置阴影 
    
    
PEnset(m_hPEPEP_nDATASHADOWSPEDS_SHADOWS); 
    
    
PEszset(m_hPEPEP_szMAINTITLE"Example Data"); 
    
    
PEszset(m_hPEPEP_szSUBTITLE""); 
// no subtitle 
    
    
PEszset(m_hPEPEP_szYAXISLABEL"Units Sold"); 
    
    
PEszset(m_hPEPEP_szXAXISLABEL"Month"); 
    
    
PEnset(m_hPEPEP_bFOCALRECTFALSE); 
    
    
PEnset(m_hPEPEP_bPREPAREIMAGESTRUE); 
    
    
PEnset(m_hPEPEP_bCACHEBMPTRUE); 
    
    
PEnset(m_hPEPEP_nPLOTTINGMETHODPEGPM_POINTSPLUSSPLINE); 
    
    
PEnset(m_hPEPEP_nGRIDLINECONTROLPEGLC_NONE); 
    
    
PEnset(m_hPEPEP_nALLOWZOOMINGPEAZ_HORZANDVERT); 
    
    
PEnset(m_hPEPEP_nZOOMSTYLEPEZS_RO2_NOT); 
    
    
// 子集的标识 
    
    
PEvsetcellm_hPEPEP_szaSUBSETLABELS0"Texas" ); 
    
PEvsetcellm_hPEPEP_szaSUBSETLABELS1"Florida" );
    
PEvsetcellm_hPEPEP_szaSUBSETLABELS2"Washington" ); 
    
PEvsetcellm_hPEPEP_szaSUBSETLABELS3"California" ); 
    
    
// 子集点的颜色s 
    
DWORD dwArray[4] = { RGB(198,0,0), RGB0198198 ), RGB198,198,), RGB(0,198,) }; 
    
PEvsetExm_hPEPEP_dwaSUBSETCOLORS04dwArray); 
    
    
// 子集点的线型 
    
int nLineTypes[] = { PELT_MEDIUMSOLIDPELT_MEDIUMSOLIDPELT_MEDIUMSOLID,PELT_MEDIUMSOLID }; 
    
PEvset(m_hPEPEP_naSUBSETLINETYPESnLineTypes4); 
    
    
// 子集点的类型 
    
int nPointTypes[] = { PEPT_DOTSOLIDPEPT_UPTRIANGLESOLIDPEPT_SQUARESOLID,PEPT_DOWNTRIANGLESOLID }; 
    
PEvset(m_hPEPEP_naSUBSETPOINTTYPESnPointTypes4); 
    
    
// Version 4.0 功能 // 
    
PEnset(m_hPEPEP_bFIXEDFONTSTRUE); 
    
PEnset(m_hPEPEP_bSIMPLEPOINTLEGENDTRUE); 
    
PEnset(m_hPEPEP_bSIMPLELINELEGENDTRUE); 
    
PEnset(m_hPEPEP_nLEGENDSTYLEPELS_1_LINE); 
    
PEnset(m_hPEPEP_nMULTIAXISSTYLEPEMAS_SEPARATE_AXES); 
    
    
// 设置其他属性 // 
    
    
PEnset(m_hPEPEP_bBITMAPGRADIENTMODETRUE); 
    
PEnset(m_hPEPEP_nQUICKSTYLEPEQS_MEDIUM_NO_BORDER); 
    
PEnset(m_hPEPEP_nGRADIENTBARS8); 
    
PEnset(m_hPEPEP_nTEXTSHADOWSPETS_BOLD_TEXT); 
    
PEnset(m_hPEPEP_bMAINTITLEBOLDTRUE); 
    
PEnset(m_hPEPEP_bSUBTITLEBOLDTRUE); 
    
PEnset(m_hPEPEP_bLABELBOLDTRUE); 
    
PEnset(m_hPEPEP_bLINESHADOWSTRUE); 
    
PEnset(m_hPEPEP_nFONTSIZEPEFS_LARGE); 
    
PEnset(m_hPEPEP_bSCROLLINGHORZZOOMTRUE); 
  } 


void CPEView::CreateDataCursor() 

  
CreateSimpleSGraph(); 
  
  
// 创建游标 // 
  
PEnset(m_hPEPEP_nCURSORMODEPECM_DATACROSS); 
  
  
// 可以方便的查看数据点// 
  
PEnset(m_hPEPEP_bMARKDATAPOINTSTRUE); 
  
  
// 可以点击数据点来移动游标 // 
  
PEnset(m_hPEPEP_bMOUSECURSORCONTROLTRUE); 
  
PEnset(m_hPEPEP_bALLOWDATAHOTSPOTSTRUE); 
  
  
// Cursor prompting in top left corner // 
  
PEnset(m_hPEPEP_bCURSORPROMPTTRACKINGTRUE); 
  
PEnset(m_hPEPEP_nCURSORPROMPTSTYLEPECPS_XYVALUES); 
  
PEnset(m_hPEPEP_nCURSORPROMPTLOCATIONPECPL_TOP_RIGHT); 
  
  
// 取消放大功能 
  
PEnset(m_hPEPEP_nALLOWZOOMINGPEAZ_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 nSubsetnPoint
  
float xvalueyvalue
  
char buffer[64]; 
  
nSubset PEnget(m_hPEPEP_nCURSORSUBSET); 
  
nPoint PEnget(m_hPEPEP_nCURSORPOINT); 
  
PEvgetcellEx(m_hPEPEP_faXDATAnSubsetnPoint, &xvalue); 
  
PEvgetcellEx(m_hPEPEP_faYDATAnSubsetnPoint, &yvalue); 
  
sprintf(buffer"Cursor at %d,%d=(%.2f, %.2f)"nSubsetnPointxvalueyvalue); 
  
CWndpParent GetParent()->GetParent(); 
  
if (pParent) {pParent->SetWindowText(buffer);} 
  
pParent AfxGetMainWnd(); 
  
if (pParent) {pParent->SetWindowText("PEWN_CURSORMOVE");} 
  
return TRUE
  
  } 
  

你可能感兴趣的:(ProEssentials)