程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 深入淺出CChart 每日一課——第十八課 女神的套娃,玩轉對話框

深入淺出CChart 每日一課——第十八課 女神的套娃,玩轉對話框

編輯:關於C語言

前面笨笨已經給大家展示了CChart編程的N個例子。這些例子中,我們的CChart圖像都是繪制在程序的主窗口中的。

在很多情況下,我們面對的情形不是這樣的。這節課笨笨就給大家介紹一下怎樣在對話框中用CChart畫圖。

這裡要說明一點,本節課的內容需要CChart的版本號不小於2.5.1.4,否則運行會不正常。請到CSDN網站笨笨的下載頻道下載。點擊打開鏈接

第一步,打開VC,建立一個基於MFCAppWizard(exe)向導的項目Lesson18。向導中選擇DialogBased,其它不做任何更改,直接點Finish。

第二步,把CChart的五個庫文件Chart.h、PlotDll_d.lib、PlotDll_d.dll、PlotDll.lib、PlotDll.dll拷貝到Lesson18文件夾中,

第三步,在VC界面的資源編輯器中,刪除掉對話框中間的“TODO:在這裡設置對話控制。”這個標簽,然後再對話框中放置一個Picture控件,並把這個控件的ID設置為ID_CANVAS。

SouthEast

第四步,在VC中打開Lesson18Dlg.h文件,在其頭部加入CChart頭文件和庫文件的引用。

#include "Chart.h"
#ifdef _DEBUG
#pragma comment(lib, "PlotDll_d.lib")
#else
#pragma comment(lib, "PlotDll.lib")
#endif
第五步,在Lesson18Dlg.h文件中給CLesson18Dlg類添加一個CChartWnd類型的成員變量。
CChartWnd m_ChartWnd;
第六步,在Lesson18Dlg.cpp的頭部加入數學庫頭文件引用。
#include <math.h>
第七步,利用ClassWizard給CLesson18Dlg類添加WM_DESTROY消息的響應函數。

第八步,修改OnInitDialog函數,在“//TODO:Addextrainitializationhere”這一行下面,添加如下代碼。

CWnd *pWnd = GetDlgItem(IDC_CANVAS);
if(pWnd)
{
	CRect rtWCtrl, rtWParent;
	pWnd->GetWindowRect(&rtWCtrl);
	GetWindowRect(&rtWParent);
	
	int capH = GetSystemMetrics(SM_CYCAPTION);
	int dx = GetSystemMetrics(SM_CXBORDER);
	
	int offsetx = (rtWCtrl.left - rtWParent.left - dx);
	int offsety = (rtWCtrl.top - rtWParent.top - capH);

	CRect rtCtrlClient;
	pWnd->GetClientRect(&rtCtrlClient);
	OffsetRect(&rtCtrlClient, offsetx, offsety);

	m_ChartWnd.Attach(m_hWnd, kTypeXY, rtCtrlClient);
	
	int i;
	double pX[360], pY[360];
	for(i=0; i<360; i++)
	{
		pX[i] = i*2.0*3.1415926536/360.0;
		pY[i] = sin(pX[i]);
	}
	m_ChartWnd.GetChart()->AddCurve(pX, pY, 360);

	m_ChartWnd.GetChart()->SetTitle(_T("對話框中的CChart"));
}
這裡注意,我們在“粘窗口”的時候,粘到的不是Picture控件上,而是粘到了對話框的主窗口上。這樣做的原因是由於對話框會攔截控件的消息,直接把窗口粘到Picture控件上程序工作會不正常。

前面一大段代碼主要是為了計算Picture控件相對於主窗口的偏移,以便正確繪制圖形。

第九步,修改OnDestroy函數,在“//TODO:Addyourmessagehandlercodehere”這一行下面,加入下面的代碼。

m_ChartWnd.Detach();
OK,收工了。我們程序的運行結果如下。

SouthEast

我們看到,在對話框裡面嵌套了一個CChart窗口。利用CChart的交互功能,還可以調出CChart的屬性對話框窗口,這個窗口是CChart窗口的子窗口。哈哈,這是不是類似俄羅斯套娃呀。

SouthEast

原來CChart在對話框中使用也不難嘛,哈哈。

下課啦!

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