程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 深入淺出CChart 每日一課——第十課 分裂視圖,錘子肖哥之錯位人格

深入淺出CChart 每日一課——第十課 分裂視圖,錘子肖哥之錯位人格

編輯:關於C語言

從這節課開始,笨笨給大家介紹幾種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時候才起作用,其它時候被忽略。

上面編寫的代碼中進行了左一右二的視圖分裂。

運行程序,效果如圖。

SouthEast

果然按左一右二的方式,分區繪制了三個圖形。

下面給左邊的視圖添加標題。在上面代碼的break;的上一行,填寫如下代碼。

chartWnd.GetChart()->SetTitle(_T("第一個子圖的標題"), 0);
 


運行效果如圖。
SouthEast

下面再給整個視圖添加總標題。在上一句代碼的下一行,填寫如下代碼。

chartWnd.GetChart()->SetTitle(_T("總標題"));
 


運行效果如圖。

SouthEast

分裂視圖實現的交互功能中,分割線是可以拖動的,同學們可以用鼠標試試看。

下面是上圖拖動後的一個結果。

SouthEast

本課的編程采用的是CChartWnd類,同學們可以試著改用CChart類實現一下。

本節課到此結束。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved