在Origin等成熟的商業軟件中,分層功能對於具有多個比例尺的圖像繪制來說,是必不可少的。
CChart目前包含了兩種具有分層功能的視圖。一種名字就叫分層視圖,這種視圖所有圖層共享繪圖區域,每個圖層單獨繪制自己的坐標軸。另一種的名字叫共享X軸視圖,這種視圖的所有圖層除了共享繪圖區域外,X坐標軸也是共享的,每個圖層單獨繪制自己的Y軸。
本節課先介紹分層視圖。
按照第一課的方式建立一個VC6項目,名為Lesson11。對於WM_CREATE的響應例程,如下填寫。
case WM_CREATE: chartWnd.Attach(hWnd, kTypeLayered); chartWnd.GetChart()->ResizePlots(2); double pX[200], pY[200]; int i; for(i=0; i<200; i++) { pX[i] = i+1; pY[i] = (i+1)*(i+1); } chartWnd.GetChart()->AddCurve(pX, pY, 200, 0); for(i=0; i<200; i++) { pX[i] = (i+1)*10; pY[i] = sin(i*2.0*3.1415926536/200.0); } chartWnd.GetChart()->AddCurve(pX, pY, 200, 1); chartWnd.GetChart()->SetTitle(_T("圖層1"),0); chartWnd.GetChart()->SetTitle(_T("圖層2"),1); break;
分層視圖的代號是kTypeLayered。
上圖中又出現了一個函數ResizePlots,這個函數在上一課也出現過。本課中ResizePlots函數的定義為:
void ResizePlots(int nLayers);
這個函數非常好理解,其參數nLayers表示圖層數量。
上面的代碼中設置了兩個圖層。
由於前面使用了數學庫的正弦函數,請在Lesson11.cpp的頭部加上頭文件的引用。
#include <math.h>
運行程序,效果如圖。
我們看到,比例尺差別非常大的兩條曲線繪制到同一張圖上了。
注意目前笨笨區分不同圖層的方式是顏色,同一圖層所有圖元,包括標題、曲線、坐標軸的顏色都一樣。
同學們可以用鼠標試試分層視圖的交互功能。