为了简化起见,这不是一个mfc的例子。如果感兴趣,可以查阅官方关于mfc开发的文档或第七版的例程工程。这和我们现在的例子是一样的。文件FileView.cpp里包含了绘图的相关代码。
为了查找dll的相关信息,可以查看官方的帮助文档。下面我们开始:
1,首先是安装或者说加载。File->New。
拷贝pegrp32c.dll到system32目录下。
2。创建新的工程。创建一个win32的hello world工程。
3。添加pegrp32c.lib和pegrpapi.h到工程中。
4。添加头文件声明和pe的句柄变量。
// petest.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "resource.h"
#include "Pegrpapi.h"
#define MAX_LOADSTRING 100
// Global Variables:
HWND hPE;
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hPE=NULL;
5。然后窗口过程函数中添加一些变量的声明和消息处理代码。
RECT r;
int s,p;
float f;
case WM_DESTROY:
if (hPE)
{
PEdestroy(hPE);
hPE = 0;
}
PostQuitMessage(0);
break;
case WM_SIZE:
if (hPE)
{
GetClientRect(hWnd, &r);
MoveWindow(hPE, 0, 0, r.right, r.bottom, FALSE);
}
break;
case WM_CREATE:
GetClientRect(hWnd, &r);
hPE = PEcreate(PECONTROL_GRAPH, 0, &r, hWnd, 1000);
PEnset(hPE, PEP_bPREPAREIMAGES, TRUE);
PEnset(hPE, PEP_nSUBSETS, 2);
PEnset(hPE, PEP_nPOINTS, 10);
for (s=0; s<2; s++)
{
for (p=0; p<10; p++)
{ f = (rand() % 10) + (rand() % 100) / 100.0F;
PEvsetcellEx(hPE, PEP_faYDATA, s, p, &f);
}
}
PEszset(hPE, PEP_szMAINTITLE, TEXT("My Title"));
PEszset(hPE, PEP_szSUBTITLE, TEXT(""));
PEszset(hPE, PEP_szYAXISLABEL, TEXT("My Data"));
PEszset(hPE, PEP_szXAXISLABEL, TEXT(""));
PEvsetcell(hPE, PEP_szaSUBSETLABELS, 0, TEXT("Hello"));
PEvsetcell(hPE, PEP_szaSUBSETLABELS, 1, TEXT("World"));
PEnset(hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
PEnset(hPE, PEP_nQUICKSTYLE, PEQS_LIGHT_INSET);
PEnset(hPE, PEP_bFIXEDFONTS, TRUE);
PEnset(hPE, PEP_nLEGENDSTYLE, PELS_1_LINE_INSIDE_AXIS);
PEreinitialize(hPE);
PEresetimage(hPE, 0, 0);
break;
case WM_ERASEBKGND://prevent flashing
break;
这里作下说明pecreate类似于windows的创建窗体的函数。如果调用成功,返回一个句柄并存储在hPE中。
penset是pe的一个函数,用于设置32位类型的属性如整形、布尔形或句柄。
然后通过一个嵌套的循环通过pevsetcellex把数据传给属性ydata。注意到变量f为float型。这一点很重要因为pevsetcellex是通过访问一个void指针指向来完成工作的。内存中的数据类型必须是预期的。
然后,peszset是用来设置文本属性的。注意,调用peszseta或peszsetw是分别用于设置short char形或wide char形数据的。
pevsetcell是用来设置子集图例文本的。
然后penset的调用是来控制各种视图。
pereinitialize和peresetimage用来告诉pe你已完成了所有的设置工作。
wm_size消息处理的代码用于始终显示图表。
wm_erasebkgnd的代码用于防止重绘时的闪烁。
wm_destroy的代码用于销毁pe控件并释放资源。
最后让我们看一下结果吧:)
还不错。这个例子很简单。你还可以通过摸索设置其他的属性诸如pointlabels,subsetlinetypes,subsetcolors,plottingmethod等等。从字面意思都很好理解,这里不再赘述。
enjoy ^ ^
参考资料:http://gigasoft.com/netchart/controlcomponentslibrary.htm