1. 程式人生 > >MSCHART全部屬性方法介紹

MSCHART全部屬性方法介紹

void CMoreDMcode::OnCacluteDelta(int nRow)
{
m_Chart.SetRedraw(false);
m_Chart.SetRow(1);
for(int i=1;i<=64;i++)
{
m_Chart.GetDataGrid().SetData(i,1,nDelta[i-1],0);
}
CRgn rgn;
m_Chart.GetUpdateRgn(&rgn);

m_Chart.SetRedraw(true);
m_Chart.InvalidateRgn(&rgn,false) ;
}

void CMoreDMcode::InitChart()
{
VARIANT var;

m_Chart.SetColumnCount(1); //設定曲線條數
m_Chart.SetRowCount(64); //一條曲線有64個點
m_Chart.SetTitleText("二位形態碼△t變化趨勢";
m_Chart.SetChartType(1|2);//
//m_Chart.SetShowLegend(TRUE);


//設定X軸
m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(FALSE); // 不自動標註X軸刻度
m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerLabel(8);// 每四刻度一個標註
m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerTick(8); // 每刻度一個刻度線

//m_Chart.GetPlot().GetAxis(0,var).GetValueScale().SetMinorDivision(1); // 每刻度一個刻度線
m_Chart.GetPlot().GetAxis(0,var).GetValueScale().SetMaximum(64); // X軸最大刻度
m_Chart.GetPlot().GetAxis(0,var).GetValueScale().SetMinimum(0); // X軸最小刻度
m_Chart.GetPlot().GetAxis(0,var).GetAxisTitle().SetText("二位形態碼";

//設定Y軸
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetAuto(FALSE); // 不自動標註Y軸刻度
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMaximum(100); // Y軸最大刻度
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinimum(0); // Y軸最小刻度
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMajorDivision(10); // Y軸刻度10等分
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinorDivision(1); // 每刻度一個刻度線
//m_Chart.GetPlot().GetAxis(1,var).GetAxisTitle().SetText("△t變化趨勢"; // Y軸名稱
//m_Chart.GetPlot().GetAxis(1,var).GetAxisTitle().GetTextLayout().SetOrientation(2);//Y軸名稱排列方式

m_Chart.GetPlot().SetUniformAxis(FALSE);


}

void CMoreDMcode::OnMSChartDraw()
{

CString str;
int nRow = m_Grid.GetFocusCell().row;
if (nRow<0)
{
MessageBox("請在左表選擇要排序的行!","操作錯誤",MB_OK|MB_ICONWARNING);
return;
}

for(int i=0;i<64;i++)
{
str = m_Grid.GetItemText(nRow,i+3);
nDelta = atoi(str.GetBuffer(0));
}

InitChart();//初始化座標軸

// 根據不同的資料設定不同的Y軸最大刻度
int m = GetMaxData(nDelta);
m=(m/50)*50+50;//取靠近M的比M大的50的倍數
str = m_Grid.GetItemText(nRow,0);
VARIANT var;
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMaximum(m);

OnCacluteDelta(nRow);//繪圖
str = "當前繪製的是第"+str+"期的△t變化趨勢";
m_Tip.SetWindowText(str);
}

函式名字取得不好,大家見笑了,開始取名字錯誤,後來不想該了,呵呵^_^



====================================================
圖表由於其直觀明瞭的特性,在實際應用中十分很廣泛。我們常常希望資料能通過圖表來顯示其特性。例如在Delphi和C++Builder程式設計中,我們可以很方便地實現資料圖表。MsChart(6.0或5.0版)是Windows系統中Visual studio自帶的一個ACTIVEX控制元件,它功能強大,應用廣泛,具有以下特點:

· 支援隨機資料和隨機陣列,動態顯示。
· 支援所有主要的圖表型別。
· 支援三維顯示。

MsChart具有45個屬性,9個方法,49 事件,可靈活程式設計,可實現各類表的顯示。

1 MsChart 應用程式設計
首先插入MsChart 控制元件,
在工程中加入 mschart
選單->Project->Add To Project->Components and Controls->Registered ActiveX Controls->Microsoft Chart Control, version 6.0 (OLEDB)

1.1 座標系屬性的設定

a)縱軸初始化屬性

Mschart 預設支援自動標準,將自動調整,可以預設設定。

#i nclude "mschart.h" //新增相關的標頭檔案
#i nclude "VcAxis.h"
#i nclude "VcAxisTitle.h"
#i nclude "VcTextLayout.h"
#i nclude "VcDataGrid.h"
#i nclude "VcPlot.h"
#i nclude "VcValueScale.h"
#i nclude "VcSeriesCollection.h"
#i nclude "VcSeries.h"
#i nclude "VcPen.h"
#i nclude "VcCategoryScale.h"
#i nclude "VcColor.h"
#i nclude "VcDataGrid.h"
#i nclude "VcBackdrop.h"
#i nclude "VcFill.h"
#i nclude "VcBrush.h"
#i nclude "VcDataPoints.h"
#i nclude "VcDataPoint.h"
#i nclude "VcDataPointLabel.h"
#i nclude "VcAxisTitle.h"
//最好新增全部頭函式,
CMSChart m_Chart;//m_Chart 為圖表變數

VARIANT var;

m_Chart.GetPlot().GetAxis(1,var)//獲取縱軸

//設定是否支援自動標準;控制元件預設支援自動標準。

m_Chart.GetPlot().GetAxis().GetValuesScale().SetAuto(FALSE);

//設定最大刻度為M;

m_Chart.GetPlot().GetAxis().GetValuesScale().SetMaximum(M);

//設定最小刻度為m;

m_Chart.GetPlot().GetAxis().GetValuesScale().SetMinimum(m);

//設定軸的等分數D;

m_Chart.GetPlot().GetAxis().GetValuesScale().SetMajorDivision(D);

//設定每等分的刻度線數n;

m_Chart.GetPlot().GetAxis().GetValuesScale().SetMinorDivision(n);

b)橫軸初始化屬性

VARIANT var;

m_Chart.GetPlot().GetAxis(0,var)//獲取橫軸

其他屬性設定跟縱軸相同。

1.2 資料顯示

a)設定標題欄和標籤

m_Chart.SetTitleText(“標題”);//設定標題欄

m_Chart.SetRowLabel((“第I行”);//設定第i行標籤

m_Chart.SetColumnLabel((“第j列”);//設定第j列標籤

b)行列的顯示佈局

MSChart的行列顯示佈局有其自身的特點:下面顯示是一個行列4×3(矩形圖),即(四行,三列)的佈局示意圖。

m_Chart.SetRowCount(4); //沒條曲線三個四個點 (曲線圖)

m_Chart.SetColumnCount(3); //設定曲線條數為三條(曲線圖)

c)行列操作

// 操作行列第i行、第j列

m_Chart.SetRow(i);// 第i行

m_Chart.SetColumn(j);//第j行

m_Chart.SetRowLabel((“第i行”);//設定第i行標籤

CString str=”90.5”;

m_Chart.SetData((LPCTSTR(str)); //設定行列,j>的顯示資料

m_Chart.Refresh();//重新整理檢視

d)顯示方式

獲取當前的顯示方式:

long nType =m_Chart.GetChartType();

設定顯示方式:

m_Chart.SetChartType(0);//3D(三維) 顯示

m_Chart.SetChartType(1);//2D(二維) 顯示

m_Chart.Refresh();

其它常用組合方式為:

m_Chart.SetChartType(1|0) //2D柱(條)形,

m_Chart.SetChartType(0|0) //3D柱(條)形

m_Chart.SetChartType(1|2) //2D線條型

m_Chart.SetChartType(0|2) //3D線條型

m_Chart.SetChartType(1|4) //2D區域型

m_Chart.SetChartType(0|4) //3D區域型

m_Chart.SetChartType(1|6) //2D階梯型

m_Chart.SetChartType(0|6) //3D階梯型

m_Chart.SetChartType(1|8) //2D復(混)合型

m_Chart.SetChartType(0|8) //3D復(混)合型

另外,在2D方式中,還有兩類:餅型和XY型

m_Chart.SetChartType(14) //2D 餅型

m_Chart.SetChartType(16) //2DXY型

e)其他

其他屬性,比如設定字型,顏色,對齊方式等。









//====================================================
//VC知識庫上的參考文章
http://www.vckbase.com/document/viewdoc/?id=959



3.3 設定 m_Chart void CDemoView::InitChart()
{
// 設定標題
m_Chart.SetTitleText("mschart 示例 by [email protected]";
// 下面兩句改變背景色
m_Chart.GetBackdrop().GetFill().SetStyle(1);
m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255);
// 顯示圖例
m_Chart.SetShowLegend(TRUE);
m_Chart.SetColumn(1);
m_Chart.SetColumnLabel((LPCTSTR)"1號機";
m_Chart.SetColumn(2);
m_Chart.SetColumnLabel((LPCTSTR)"2號機";
m_Chart.SetColumn(3);
m_Chart.SetColumnLabel((LPCTSTR)"3號機";
// 棧模式
// m_Chart.SetStacking(TRUE);
// Y軸設定
VARIANT var;
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetAuto(FALSE); // 不自動標註Y軸刻度
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMaximum(100); // Y軸最大刻度
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinimum(0); // Y軸最小刻度
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMajorDivision(5); // Y軸刻度5等分
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinorDivision(1); // 每刻度一個刻度線
m_Chart.GetPlot().GetAxis(1,var).GetAxisTitle().SetText("小時"; // Y軸名稱
// 3條曲線
m_Chart.SetColumnCount(3);
// 線色
m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().GetVtColor().Set(0, 0, 255);
m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetPen().GetVtColor().Set(255, 0, 0);
m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetPen().GetVtColor().Set(0, 255, 0);
// 線寬(對點線圖有效)
m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth(50);
m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetPen().SetWidth(100);
m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetPen().SetWidth(2);
// 資料點型別顯示資料值的模式(對柱柱狀圖和點線圖有效)
// 0: 不顯示 1: 顯示在柱狀圖外
// 2: 顯示在柱狀圖內上方 3: 顯示在柱狀圖內中間 4: 顯示在柱狀圖內下方
m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1);
m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1);
m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1);
}
3.4 設定資料 void CDemoView:rawChart()
{
int nRowCount = 6;
m_Chart.SetRowCount(nRowCount);
VARIANT var;

// 不自動標註X軸刻度
m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(FALSE);

// 每刻度一個標註
m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerLabel(1);

// 每刻度一個刻度線
m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerTick(1);

// X軸名稱
m_Chart.GetPlot().GetAxis(0,var).GetAxisTitle().SetText("日期";
char buf[32];
srand( (unsigned)time( NULL ) );
for(int row = 1; row <= nRowCount; ++row)
{
m_Chart.SetRow(row);
sprintf(buf, "%d號", row);
m_Chart.SetRowLabel((LPCTSTR)buf);
m_Chart.GetDataGrid().SetData(row, 1, rand() * 100 / RAND_MAX, 0);//設定第一條曲線的第row個點
m_Chart.GetDataGrid().SetData(row, 2, rand() * 100 / RAND_MAX, 0);//設定第二條曲線的第row個點
m_Chart.GetDataGrid().SetData(row, 3, rand() * 100 / RAND_MAX, 0);//設定第三條曲線的第row個點
}
m_Chart.Refresh();
}

/*
SetData (row, column, dataPoint, nullFlag)

SetData 方法語法包括以下組成部分:


row Integer 型別。標識包含資料點值的行。
column Integer 型別。標識包含資料點值的列。
dataPoint Double 型別。資料點值。
nullFlag Integer 型別。指示資料點值是否為空
*/

3.5 改變顯示型別 // 折線圖
void CDemoView::OnChartLine()
{
m_Chart.SetChartType(3);
DrawChart();
}

// 柱狀圖
void CDemoView::OnChartCombi()
{
m_Chart.SetChartType(1);
DrawChart();
}
// 餅狀圖
void CDemoView::OnChartPie()
{
m_Chart.SetChartType(14);
DrawChart();