上節課笨笨給大家介紹了CChart在微軟MFC框架下的應用,本節課的內容仍然和百年老店微軟相關,只不過主角換成WTL了。
不了解WTL的同學可以先找度娘溫習一下。度娘在懷,今生何求。郎君啊,你是不是悶得慌,如果你悶得慌給我十娘講,十娘我為你解憂傷。哦,對不起,笨笨剛才走神了,把度娘當成杜十娘了。
哦,對了,要是女同學嘛,可以找谷哥切磋切磋喲。
要在WTL下使用CChart,當然首先需要安裝WTL。由於笨笨使用的是VC6,笨笨下載的是WTL8.0,並下載了WTL7.1用於輔助安裝,具體的方法還得找度娘。
如果同學們使用高版本VC,可以下載WTL8.5。
現在我們開始。
第一步,用VC建立一個基於ATL/WTLWizard向導的程序,名為Lesson16。在余下的向導步驟中選擇默認值,不做任何修改。
第二步,拷貝五個庫文件到Lesson16文件夾。
第三步,在VC中打開Lesson16View.h文件,在其頭部添加如下代碼。
#include "Chart.h" #ifdef _DEBUG #pragma comment(lib, "PlotDll_d.lib") #else #pragma comment(lib, "PlotDll.lib") #endif
第四步,在Lesson16View.h文件裡面,為CLesson16View類添加一個CChartWnd類型的成員變量。
CChartWnd m_ChartWnd;第五步,找到Lesson16View.h中如下代碼。
BEGIN_MSG_MAP(CLesson16View) MESSAGE_HANDLER(WM_PAINT, OnPaint) END_MSG_MAP()修改成下面這樣。
BEGIN_MSG_MAP(CLesson16View) //MESSAGE_HANDLER(WM_PAINT, OnPaint) MESSAGE_HANDLER(WM_CREATE, OnCreate) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) END_MSG_MAP()這就是WTL的消息響應,呵呵。
第六步,找到Lesson16View.h中如下代碼,刪除掉或者屏蔽掉它。
LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd);
//TODO: Add your drawing code here
return 0;
}
第七步,在Lesson16View.h中加入如下代碼。LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
double *pX, *pY;
int i;
if(m_ChartWnd.Attach(m_hWnd, kTypeXY))
{
pX=new double[200];
pY=new double[200];
for(i=0; i<200; i++)
{
pX[i]=(i-100.0)/100.0;
pY[i]=pX[i]*pX[i];
}
m_ChartWnd.GetChart()->AddCurve(pX, pY, 200);
delete []pY;
delete []pX;
m_ChartWnd.GetChart()->SetTitle(_TEXT("在WTL框架中測試CChart"));
}
return 0;
}
LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
m_ChartWnd.Detach();
return 0;
}
完成了!編譯並運行程序,效果如圖。在WTL中編程總的感覺和用Win32Application向導差不多,同學們覺得呢?
上面笨笨采用的是CChartWnd類編程,同學們可以試著改用CChart類完成。