📄 dlgchart.cpp
字号:
// DlgChart.cpp : implementation file
//
#include "stdafx.h"
#include "Project.h"
#include "DlgChart.h"
#include "DlgLogin.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CString GetTime();
/////////////////////////////////////////////////////////////////////////////
// CDlgChart dialog
CDlgChart::CDlgChart(CWnd* pParent /*=NULL*/)
: CDialog(CDlgChart::IDD, pParent)
{
}
void CDlgChart::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgChart)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgChart, CDialog)
//{{AFX_MSG_MAP(CDlgChart)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgChart message handlers
BOOL CDlgChart::OnInitDialog()
{
CDlgLogin dlgLogin;
try
{ //连接数据源
_bstr_t Conn = "DSN="+_bstr_t(dlgLogin.m_LoginDSN)+";";
pConn.CreateInstance(__uuidof(Connection));
HRESULT hr=pConn->Open(Conn,_bstr_t(""),_bstr_t(""),adModeUnknown); //
}
catch(_com_error& ex)
{
AfxMessageBox(ex.Description());
}
CDialog::OnInitDialog();
for(int j = 0; j < 31; j++)
{
RunInfor[j] = 0.0; //数组初始化
}
OnRefreshData();
return TRUE;
}
void CDlgChart::OnPaint()
{
CPaintDC dc(this); // device context for painting
CBrush brush;
brush.CreateSolidBrush(RGB(240,0,0));
CBrush *pOldBrush = dc.SelectObject(&brush);
//绘制坐标系
dc.SetBkColor(RGB(214,215,206));
dc.MoveTo(20,20);
dc.LineTo(20,220);
dc.MoveTo(20,220);
dc.LineTo(650,220);
//绘制两个箭头
dc.MoveTo(15,30);
dc.LineTo(20,20);
dc.MoveTo(25,30);
dc.LineTo(20,20);
dc.MoveTo(635,215);
dc.LineTo(650,220);
dc.MoveTo(635,225);
dc.LineTo(650,220);
dc.TextOut(25,15,"营业额");
dc.TextOut(640,190,"日期");
//OnRefreshData();
CString date;
double CoeY = m_Peak-m_Bottom;
for(int i = 0; i < 30; i++)
{
//绘制刻度线
date.Format("%d",i+1);
int x = 20+i*20;
dc.MoveTo(x,220);
dc.LineTo(x,215);
dc.TextOut(x-5,225,date);
//绘制曲线
int X,Y;
X= 20*i+10;
Y= 220-RunInfor[i]*200/CoeY ; //200/Peak 作为Y方向归一化系数
dc.MoveTo(X,220);
dc.LineTo(X,Y);
CString s;
s.Format("%5.0f",RunInfor[i]);
if(RunInfor[i]>0.0) dc.TextOut(X-20,Y-25,s);
else if(RunInfor[i]<0.0) dc.TextOut(X-20,Y+5 ,s);
else;
}
CDialog::OnPaint();
}
void CDlgChart::OnRefreshData()
{
_RecordsetPtr pRst;
CString sql;
CString sMonth;
CTime t = CTime::GetCurrentTime();
int iMonth = t.GetMonth(); //获取当前年月
if(iMonth<10) sMonth.Format("0%d",iMonth);
else sMonth.Format("%d",iMonth); //补齐两位月份数
int i=0;
try
{
pRst = pConn->Execute("Select * FROM TableInfo ",NULL,adCmdText);//读出所有数据
while(!pRst->End)
{
_variant_t vTime = pRst->Fields->GetItem("Date")->Value; //!!!
_variant_t vIncome = pRst->Fields->GetItem("Income")->Value;
_variant_t vPayout = pRst->Fields->GetItem("Payout")->Value;
CString sTime = (char*) _bstr_t(vTime); //!!! 取日期时间
double income = vIncome.dblVal;
double payout = vPayout.dblVal;
if(sMonth.GetAt(0) == sTime.GetAt(4)&&sMonth.GetAt(1) == sTime.GetAt(5)) //如果月份相同
{
CString sDate= sTime.Mid(6,2);
int iDate = atoi(sDate);
if(iDate>0 && iDate<31) //将每日的每一笔交易累加到该日Infor
RunInfor[iDate] +=(income-payout);
}
pRst->MoveNext();
}
}
catch(_com_error& e)
{
AfxMessageBox(e.Description());
}
m_Peak = m_Bottom = 0; //冒泡法找出当月每日盈利峰值和负峰值
for(int j= 0; j< 30; j++)
{
if(m_Peak < RunInfor[j]) m_Peak = RunInfor[j];
else m_Peak = m_Peak;
if(m_Bottom > RunInfor[j]) m_Bottom = RunInfor[j];
else m_Bottom = m_Bottom;
}
pRst->Close();
pRst.Release();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -