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 + -
显示快捷键?