teechartdlg.cpp

来自「对Teechart进行封装」· C++ 代码 · 共 269 行

CPP
269
字号
// TestDlg.cpp : implementation file
//
#include "stdafx.h"
#include "TeeChartDlg.h"
#include "Resource.h"
#include <afxcmn.h>
#include <afxcmn.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#include "TeeChart_h\panel.h"
#include "TeeChart_h\gradient.h"
#include "TeeChart_h\strings.h"
#include "TeeChart_h\titles.h"
#include "TeeChart_h\export.h"
/////////////////////////////////////////////////////////////////////////////
// CTeeChartDlg dialog

CTeeChartDlg::CTeeChartDlg(CWnd* pParent /*=NULL*/)
	: CDialog(IDD_DLALOG_CHART, pParent)
{
	//{{AFX_DATA_INIT(CTeeChartDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_pTChart = NULL;
	m_pWndToolBar = NULL;
}


void CTeeChartDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTeeChartDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTeeChartDlg, CDialog)
	//{{AFX_MSG_MAP(CTeeChartDlg)
	ON_WM_CREATE()
	ON_WM_SHOWWINDOW()
	ON_WM_PAINT()
	ON_WM_VSCROLL()
	ON_WM_HSCROLL()
	ON_COMMAND(ID_BUTTON_ZOOMIN, OnButtonZoomin)
	ON_COMMAND(ID_BUTTON_ZOOMOUT, OnButtonZoomout)
	ON_WM_SIZE()
	ON_COMMAND(IDD_EXPORT_BMP, OnExportBmp)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTeeChartDlg message handlers
void CTeeChartDlg::Create(CWnd* pParent)
{
	CDialog::Create(IDD_DLALOG_CHART, pParent);
}

int CTeeChartDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	
  //if(!m_pWndToolBar->CreateEx(this,TBSTYLE_FLAT | TBSTYLE_TRANSPARENT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_TOOLTIPS|CBRS_SIZE_DYNAMIC)||!m_pWndToolBar->LoadToolBar(IDR_TOOLBAR_CHART))
	//
	return 0;
}

BOOL CTeeChartDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	//if(m_pWndToolBar->m_hWnd != 0) return TRUE;
	m_pWndToolBar = new CToolBar();
	if(!m_pWndToolBar->Create(this, WS_CHILD|WS_VISIBLE|CBRS_TOP|CCS_NODIVIDER )
		||!m_pWndToolBar->LoadToolBar(IDR_TOOLBAR_CHART))
	{
		TRACE0("创建工具条失败\n");
		return TRUE;//不能创建,返回报-1
	} 
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);//位工具条
	
	CRect rect;
	this->GetClientRect(&rect);
	CRect rectToolBar;
	m_pWndToolBar->GetClientRect(&rectToolBar);
	
	CRect ChartRect(0,rectToolBar.Height() + 10,rect.Width(),rect.Height());
	//if(m_pTChart->m_hWnd != 0) return TRUE;
		// 声明窗口类型
	LPCTSTR  lpClass = AfxRegisterWndClass(CS_HREDRAW | 
		CS_VREDRAW | CS_DBLCLKS, NULL, NULL, NULL);
	
	m_pTChart = new CTChart();
	m_pTChart->Create(NULL, lpClass, WS_CHILD | WS_VISIBLE, //AFX_WS_DEFAULT_VIEW
		ChartRect, this, 0, NULL);
	m_pTChart->GetPanel().GetGradient().SetVisible(true);	
	CTitles title;
	title = m_pTChart->GetHeader();
	CStrings strs = title.GetText();
	strs.Clear();
	strs.Add(COleVariant("统计图"));
	//计算滚动的大小
	CalcScrollUnit();

	return TRUE;  
}

void CTeeChartDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);

}

void CTeeChartDlg::OnPaint() 
{
	CPaintDC dc(this); 
}

CScrollBar* CTeeChartDlg::GetScrollBarCtrl(int nBar) const
{
	return CDialog::GetScrollBarCtrl(nBar);
}

void CTeeChartDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
}

void CTeeChartDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	int nDelta;
	int nScrollPos;
	nScrollPos = GetScrollPos(SB_HORZ);
	
	SCROLLINFO si;
	GetScrollInfo(SB_HORZ,&si);
	int nOldPos = si.nPos;

	switch(nSBCode)
	{
	case SB_LINELEFT:
		nDelta = -m_nHScrollUnit;
		break;
	case SB_LINERIGHT:
		nDelta = m_nHScrollUnit;
		break;
	case SB_PAGELEFT:
		nDelta = -m_nHScrollPageUnit;
		break;
	case SB_PAGERIGHT:
		nDelta = m_nHScrollPageUnit;;
		break;
	case SB_THUMBPOSITION:
	case SB_THUMBTRACK:
		nDelta = (int)nPos - nScrollPos;
		break;
	default:
		return;
		break;
	}

	int nNewScrollPos;
	nNewScrollPos = nScrollPos + nDelta;
	if(nNewScrollPos<0)	nNewScrollPos =0;
	else if(nNewScrollPos+m_nHScrollPageUnit>m_nHMaxPos) nNewScrollPos = m_nHMaxPos;
	nDelta = nNewScrollPos - nScrollPos;
		
	SetScrollPos(SB_HORZ,nNewScrollPos,TRUE);
	ScrollWindow(-nDelta, 0);
	
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
	
}

void CTeeChartDlg::OnButtonZoomin() 
{//放大
	CRect rect;
	m_pTChart->GetWindowRect(&rect);
	ScreenToClient(&rect);
	rect.right += rect.Width()/5;
	m_pTChart->MoveWindow(rect);
	CalcScrollUnit();
}

void CTeeChartDlg::OnButtonZoomout() 
{//缩小
	CRect rect;
	m_pTChart->GetWindowRect(&rect);
	ScreenToClient(&rect);
	rect.right -=  rect.Width()/5;

	CRect rt;
	this->GetClientRect(&rt);
	if(rt.Width() >= rect.Width())
	{
		rect.right = rt.right;
	}

	m_pTChart->MoveWindow(rect);
	CalcScrollUnit();
}


void CTeeChartDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
  if (m_pTChart == NULL || m_pWndToolBar ==NULL) return;
  if (m_pTChart->m_hWnd == 0 || m_pWndToolBar->m_hWnd == 0) return;
		
	CRect rect;
	this->GetClientRect(&rect);
	CRect rectToolBar;
	m_pWndToolBar->GetClientRect(&rectToolBar);
	CRect ChartRect(0,rectToolBar.Height() + 10 ,rect.Width(),rect.Height());
	m_pTChart->MoveWindow(ChartRect);

}

void CTeeChartDlg::CalcScrollUnit()
{
	CRect rect;
	this->GetClientRect(&rect);
	m_nHScrollUnit = rect.Width() / 10;
	m_nHScrollPageUnit = m_nHScrollUnit;
  if(m_pTChart->m_hWnd == 0) return;
  m_nHMaxPos = (int)m_pTChart->GetWidth() -  rect.Width();
	SetScrollInfo();
}

void CTeeChartDlg::SetScrollInfo()
{
	SCROLLINFO si;
	GetScrollInfo(SB_HORZ,&si);
	si.nMin = 0;
	si.nMax = m_nHMaxPos;
	CDialog::SetScrollInfo(SB_HORZ, &si, TRUE); 	
}

void CTeeChartDlg::OnExportBmp() 
{
	CFileDialog dlg(FALSE, "BMP", "*.BMP", OFN_HIDEREADONLY, _T("位图文件(*.BMP)|*.BMP|"), this);
	if(dlg.DoModal() == IDOK)
	{
		m_pTChart->GetExport().SaveToBitmapFile(dlg.GetPathName());
	}
}

void CTeeChartDlg::OnDestroy() 
{
	if(m_pTChart != NULL) 
	{
		delete m_pTChart;
		m_pTChart = NULL;
	}
	if(m_pWndToolBar != NULL)
	{
		delete m_pWndToolBar;
		m_pWndToolBar = NULL;
	}
	CDialog::OnDestroy();

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?