上節課笨笨給大家介紹了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類完成。