ProEssentialsv5圖表組件研究論文

時間:2022-03-20 02:18:00

導(dǎo)語:ProEssentialsv5圖表組件研究論文一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

ProEssentialsv5圖表組件研究論文

1proessentialsv5簡介:

ProEssentialsv5是于windows服務(wù)器端和客戶端開發(fā)的一系列圖表組件,它是對繪制圖表以及圖表功能所需要的數(shù)據(jù)和的簡單封裝??梢蕴峁¦informs、Webforms、ActiveX、VCL和DLL五種界面。它的圖表類型很多,包括:一般圖表、圖表、3維圖表、極坐標(biāo)圖表、餅狀圖表,幾乎覆蓋了所有常見的圖表類型論文。我們可以很方便的調(diào)用ProEssentialsv5的函數(shù)庫,添加繪制圖表的功能,并可以對圖表進(jìn)行分析,如:回歸,求最大值,擬合曲線等。我們還可以很方便的將圖表文件的數(shù)據(jù)文件進(jìn)行保存,或者導(dǎo)出我們希望格式的圖片,如bmp、jpg、png。注:一般圖表與科學(xué)圖表之間的區(qū)別在于,一般圖表僅提供一維坐標(biāo)數(shù)據(jù)繪圖,而另一維坐標(biāo)數(shù)據(jù)是等間距的??茖W(xué)圖表提供二維坐標(biāo)數(shù)據(jù),繪制任意的散點數(shù)據(jù)。

2具體應(yīng)用方法:

(1)無論開發(fā)的是OCX的應(yīng)用程序、DLL的應(yīng)用程序還是VCL的應(yīng)用程序,首先要做的就是根據(jù)開發(fā)環(huán)境的操作系統(tǒng)類型,拷貝PEGRP32C.DLL到相應(yīng)的在本地硬盤系統(tǒng)盤中去。如果是win95或者win98操作系統(tǒng),拷貝PEGRP32C.DLL到System目錄下;如果是win2000操作系統(tǒng),拷貝PEGRP32C.DLL到System32目錄下。PEGRAPHS.HLP文件是可選的

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

選擇需要調(diào)用的函數(shù),完成圖表的繪制功能。在此簡介,ProEssentialsv5函數(shù)和變量的命名規(guī)則。以PEP_為前綴的變量類型如下:

PEP_bBoolean(4bytes)

PEP_nInteger(4bytes)

PEP_dwDoubleWord(4bytes)

PEP_szNullTerminatedarrayofcharacters.

PEP_fSingle(4bytes)orDouble(8bytes)floatingpoint.

PEP_naArrayofInteger(4bytes)

PEP_dwaArrayofDoubleWord(4bytes)

PEP_szaArrayofNullTerminatedstrings.

PEP_faArrayofSingle(4bytes)orDouble(8bytes)floatingpoint.

PEP_structVariousstructures

要用DLL調(diào)用來設(shè)定獲取以上變量類型的值,可以根據(jù)以上變量類型的前綴來判斷應(yīng)該:

PEP_bPEnset/PEnget

PEP_nPEnset/PEnget

PEP_dwPElset/PElget(16bit)PEnset/PEnget(32bit)

PEP_szPEszset/PEszget.

PEP_fPEvset/PEvget

PEP_naPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx

PEP_dwaPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx

PEP_szaPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx

PEP_faPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx

PEP_structPEvset,/Pevget

(3)選擇適當(dāng)?shù)淖兞?,將?shù)據(jù)賦予這些變量。

一般圖表需要給PEP_faYDATA、PEP_szaPOINTLABELS賦值。

科學(xué)圖表和極坐標(biāo)圖表需要給PEP_faXDATA、PEP_faYDATA和PEP_faZDATA賦值。

3D的科學(xué)圖表需要給PEP_faXDATA,PEP_faYDATA,PEP_faZDATA賦值,但是3D的柱狀圖僅需要PEP_faYDATA。

餅狀圖用PEP_faXDATA來控制“餅”的厚度,

有以下的幾個DLL函數(shù)可以為圖表賦值:

PEvset():一次可以全部的完成所有數(shù)據(jù)的賦值。

PEvsetEx():一次可以完成部分?jǐn)?shù)據(jù)的賦值。.

Pevsetcell():一次僅可以為一維數(shù)據(jù)賦值。

PevsetcellEx():一次僅可以為一個點賦值。

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

(4)選擇選擇圖表中線(點)顏色的方法

顏色是由PEP_dwaSUBSETCOLORS控制的,線型是由PEP_naSUBSETLINETYPES控制的,點型是由PEP_naSUBSETPOINTTYPES控制的。

以下代碼是在C/C++中實現(xiàn)線型設(shè)定方法。

intnTmpStyles[3];

nTmpStyles[0]=PELT_THINSOLID;

nTmpStyles[1]=PELT_DASH;

nTmpStyles[2]=PELT_DOT;

PEvset(hPE,PEP_naSUBSETLINETYPES,nTmpStyles,3);

注:以上代碼使用的Pevset()函數(shù),也可以使用Pevsetcell()函數(shù)來實現(xiàn)線型的設(shè)定方法。代碼如下:

intnTmpStyle;

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);

其他設(shè)定顏色和點類型的方法與以上方法類似,在此不再贅述。

3實現(xiàn)結(jié)果:

繪制了一個圖表,帶游標(biāo)和坐標(biāo)顯示功能,以下函數(shù)分別實現(xiàn)基本圖表功能和游標(biāo)顯示功能。

voidCPEView::CreateSimpleSGraph()

{

RECTrect;

GetClientRect(&rect)

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

if(m_hPE)

{

floatfY;

floatfX;

//設(shè)置子集數(shù)和每個子集的點數(shù)//

PEnset(m_hPE,PEP_nSUBSETS,4);

PEnset(m_hPE,PEP_nPOINTS,12);

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

{for(intp=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);

}

}

//設(shè)置陰影

PEnset(m_hPE,PEP_nDATASHADOWS,PEDS_SHADOWS);

PEszset(m_hPE,PEP_szMAINTITLE,"ExampleData");

PEszset(m_hPE,PEP_szSUBTITLE,"");//nosubtitle

PEszset(m_hPE,PEP_szYAXISLABEL,"UnitsSold");

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);

//子集的標(biāo)識

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

DWORDdwArray[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);

//子集點的線型

intnLineTypes[]={PELT_MEDIUMSOLID,PELT_MEDIUMSOLID,PELT_MEDIUMSOLID,PELT_MEDIUMSOLID};

PEvset(m_hPE,PEP_naSUBSETLINETYPES,nLineTypes,4);

//子集點的類型

intnPointTypes[]={PEPT_DOTSOLID,PEPT_UPTRIANGLESOLID,PEPT_SQUARESOLID,PEPT_DOWNTRIANGLESOLID};

PEvset(m_hPE,PEP_naSUBSETPOINTTYPES,nPointTypes,4)

//Version4.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);

//設(shè)置其他屬性//

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);}

}

voidCPEView::CreateDataCursor()

{

CreateSimpleSGraph();

//創(chuàng)建游標(biāo)//

PEnset(m_hPE,PEP_nCURSORMODE,PECM_DATACROSS);

//可以方便的查看數(shù)據(jù)點//

PEnset(m_hPE,PEP_bMARKDATAPOINTS,TRUE);

//可以點擊數(shù)據(jù)點來移動游標(biāo)//

PEnset(m_hPE,PEP_bMOUSECURSORCONTROL,TRUE);

PEnset(m_hPE,PEP_bALLOWDATAHOTSPOTS,TRUE);

//Cursorpromptingintopleftcorner//

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);

//其他可能的游標(biāo)模式如下:

//PECM_NOCURSOR=0

//PECM_POINT=1

//PECM_DATACROSS=2

//PECM_DATASQUARE=3

//PECM_FLOATINGY=4

//PECM_FLOATINGXY=5

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

elseif((m_nLastSelection==105)&&(HIWORD(wp)==PEWN_CURSORMOVE))

{intnSubset,nPoint;

floatxvalue,yvalue;

charbuffer[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,"Cursorat%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");

returnTRUE;

}

}

以上代碼在Win2000,VC6環(huán)境下調(diào)試通過。