從這節課開始,笨笨給大家介紹幾種CChart支持的復雜視圖。
本節課首先介紹分裂視圖。
這裡的分裂當然不是灣灣阿扁搞的分裂。所謂分裂視圖,也就是分區視圖,就是把繪圖區域分成幾塊,每一塊單獨繪制圖形。
下面仍然以實例的方式介紹本課內容。
按照第一課的方式建立一個VC6項目,名為Lesson10。下面我們只需要關注WM_CREATE的響應例程。先如下填寫。
case WM_CREATE: chartWnd.Attach(hWnd, kTypeSplit); chartWnd.GetChart()->ResizePlots(2, 2, 2); double pX[20], pY[20]; int i; for(i=0; i<20; i++) { pX[i] = i; pY[i] = i; } chartWnd.GetChart()->AddCurve(pX, pY, 20, 0); for(i=0; i<20; i++) { pY[i] = i*i/20.0; } chartWnd.GetChart()->AddCurve(pX, pY, 20, 1); for(i=0; i<20; i++) { pY[i] = i*i*i/20.0/20.0; } chartWnd.GetChart()->AddCurve(pX, pY, 20, 2); break;
分裂視圖的代號是kTypeSplit。
上面代碼需要重點解釋的函數是ResizePlots。這個函數的定義如下。
void ResizePlots(int mode, int nRows, int nCols);
此函數共有三個參數。
第一個參數mode表示分裂的模式。查看Chart.h文件頭部被注釋掉的代碼可知:mode=0表示不分裂;mode=1表示行列分裂;mode=2表示左一右二分裂;mode=3表示左二右一分裂;mode=3表示上一下二分裂;mode=4表示上二下一分裂。
第二個參數nRows表示分裂的行數,第三個參數nCols表示分裂的列數。這兩個參數只有當mode=1時候才起作用,其它時候被忽略。
上面編寫的代碼中進行了左一右二的視圖分裂。
運行程序,效果如圖。
果然按左一右二的方式,分區繪制了三個圖形。
下面給左邊的視圖添加標題。在上面代碼的break;的上一行,填寫如下代碼。
chartWnd.GetChart()->SetTitle(_T("第一個子圖的標題"), 0);
運行效果如圖。
下面再給整個視圖添加總標題。在上一句代碼的下一行,填寫如下代碼。
chartWnd.GetChart()->SetTitle(_T("總標題"));
運行效果如圖。
分裂視圖實現的交互功能中,分割線是可以拖動的,同學們可以用鼠標試試看。
下面是上圖拖動後的一個結果。
本課的編程采用的是CChartWnd類,同學們可以試著改用CChart類實現一下。
本節課到此結束。