在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>
運行程序,效果如圖。
我們看到,比例尺差別非常大的兩條曲線繪制到同一張圖上了。
注意目前笨笨區分不同圖層的方式是顏色,同一圖層所有圖元,包括標題、曲線、坐標軸的顏色都一樣。
同學們可以用鼠標試試分層視圖的交互功能。