// Other2SaleChart.cpp : implementation file // #include "stdafx.h" #include "ylgl.h" #include "Other2SaleChart.h" #include "VcPlot.h" #include "VcAxis.h" #include "VcValueScale.h" #include "VcSeriesCollection.h" #include "VcSeries.h" #include "VcPen.h" #include "VcCategoryScale.h" #include "VcColor.h" #include "VcDataGrid.h" #include "VcBackdrop.h" #include "VcFill.h" #include "VcBrush.h" #include "VcDataPoints.h" #include "VcDataPoint.h" #include "VcDataPointLabel.h" #include "VcAxisTitle.h" #include "ShowMschart.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // Other2SaleChart dialog Other2SaleChart::Other2SaleChart(CWnd* pParent /*=NULL*/) : CDialog(Other2SaleChart::IDD, pParent) { //{{AFX_DATA_INIT(Other2SaleChart) m_year = atoi(g_date.Mid (0,4)); m_bInit=0; //}}AFX_DATA_INIT } void Other2SaleChart::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(Other2SaleChart) DDX_Control(pDX, IDC_LIST1, m_List1); DDX_Control(pDX, IDC_SPIN1, m_spinyear); DDX_Control(pDX, IDC_MSCHART1, m_Chart); DDX_Text(pDX, IDC_EDITyear, m_year); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(Other2SaleChart, CDialog) //{{AFX_MSG_MAP(Other2SaleChart) ON_EN_CHANGE(IDC_EDITyear, OnChangeEDITyear) ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Other2SaleChart message handlers BOOL Other2SaleChart::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_spinyear.SetRange (1900, 3000); VARIANT var; m_Chart.GetBackdrop().GetFill().SetStyle(1); m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255); m_Chart.SetShowLegend(TRUE); m_Chart.SetChartType(1); // 栈模式 m_Chart.SetStacking(FALSE); m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetAuto(1); // 不自动标注Y轴刻度 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(0); // 不自动标注X轴刻度 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerLabel(1);// 每刻度一个标注 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerTick(1); // 每刻度一个刻度线 m_Chart.SetColumnCount(6); m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(255, 0, 0); m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(0, 255, 0); m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(0, 0, 255); m_Chart.GetPlot().GetSeriesCollection().GetItem(4).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(0, 255, 255); m_Chart.GetPlot().GetSeriesCollection().GetItem(5).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(255, 255, 0); m_Chart.GetPlot().GetSeriesCollection().GetItem(6).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(255, 0, 255); // 线宽(对点线图有效) m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth(30); m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetPen().SetWidth(30); m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetPen().SetWidth(30); m_Chart.GetPlot().GetSeriesCollection().GetItem(4).GetPen().SetWidth(30); m_Chart.GetPlot().GetSeriesCollection().GetItem(5).GetPen().SetWidth(30); m_Chart.GetPlot().GetSeriesCollection().GetItem(6).GetPen().SetWidth(30); // 数据点类型显示数据值的模式(对柱柱状图和点线图有效) // 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); m_Chart.GetPlot().GetSeriesCollection().GetItem(4).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); m_Chart.GetPlot().GetSeriesCollection().GetItem(5).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); m_Chart.GetPlot().GetSeriesCollection().GetItem(6).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); m_bInit=1; GetData(); MoveWindow(g_rc); CRect rc,rc2,rc3; GetClientRect(rc); GetDlgItem(IDC_EDITyear)->GetWindowRect(rc2); ScreenToClient(rc2); int top=rc2.bottom +5; m_List1.GetWindowRect(rc2); ScreenToClient(rc2); rc2.top =top; rc2.bottom =rc.bottom ; m_List1.MoveWindow (rc2); rc2.left =rc2.right ; rc2.right =rc.right ; m_Chart.MoveWindow (rc2); GetDlgItem(IDC_STATIC2)->GetWindowRect(rc2); ScreenToClient(rc2); int dt=rc.right -rc2.right ; rc2.left +=dt; rc2.right +=dt; GetDlgItem(IDC_STATIC2)->MoveWindow(rc2); GetDlgItem(IDC_EDITyear)->GetWindowRect(rc2); ScreenToClient(rc2); rc2.left +=dt/2; rc2.right +=dt/2; GetDlgItem(IDC_EDITyear)->MoveWindow(rc2); GetDlgItem(IDC_STATIC1)->GetWindowRect(rc2); ScreenToClient(rc2); rc2.left +=dt/2; rc2.right +=dt/2; GetDlgItem(IDC_STATIC1)->MoveWindow(rc2); m_spinyear.GetWindowRect(rc2); ScreenToClient(rc2); rc2.left +=dt/2; rc2.right +=dt/2; m_spinyear.MoveWindow(rc2); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void Other2SaleChart::GetData() { if(m_bInit==0)return; m_spinyear.EnableWindow(0); UpdateData(); int i; int g_nYearposTemp=g_nYearpos; BOOL bLastYear=0; BOOL bThisYear=0; if(m_year==atoi(g_date.Left (4)) && g_hisyeararray.GetSize () ) bThisYear=1; else if(m_year<=atoi(g_date.Left (4))-1 && g_hisyeararray.GetSize ()) bLastYear=1; g_nYearpos=GetYearPos(m_year); g_sendhead.bsql=0; g_sendhead.code[0]=198; g_sendhead.tabcount=1; CString sql,strdate,strdate2; strdate.Format ("%04d-%02d-%02d", m_year, 1, 1); strdate2.Format ("%04d-%02d-%02d", m_year, 12, 31); sql.Format ("date>='"+strdate+"' and date<='"+strdate2+"'"); g_pMainWnd->ProcessChatMessageRequest2(sql); if(g_bSendOK==0) { g_nYearpos=g_nYearposTemp; m_spinyear.EnableWindow(1); return; } DataToArray(&other2salearray); if(bLastYear)//如果是去年, 则加今年的补款 { g_nYearpos=-1;//今年 g_sendhead.bsql=0; g_sendhead.code[0]=198; g_sendhead.tabcount=1; g_pMainWnd->ProcessChatMessageRequest2(sql); if(g_bSendOK==0) { g_nYearpos=g_nYearposTemp; m_spinyear.EnableWindow(1); return; } CArrayThisYearother2salearray; DataToArray(&ThisYearother2salearray); int oldsize; oldsize=other2salearray.GetSize (); other2salearray.SetSize(oldsize+ThisYearother2salearray.GetSize ()); for(i=oldsize; iProcessChatMessageRequest2(sql); if(g_bSendOK==0) { g_nYearpos=g_nYearposTemp; m_spinyear.EnableWindow(1); return; } CArrayThisYearother2salearray; DataToArray(&ThisYearother2salearray); int oldsize; oldsize=other2salearray.GetSize (); other2salearray.SetSize(oldsize+ThisYearother2salearray.GetSize ()); for(i=oldsize; i6) array.RemoveAt (array.GetSize ()-1); if(array.GetSize ()<6) { for(int i=0; i=6)break; } } } m_Chart.SetColumnCount(array.GetSize ()); for(i=0; i0) { if(other2salearray.ElementAt (i).ElementAt (0)==array.ElementAt (0)) incomedata1[atoi(other2salearray.ElementAt (i).ElementAt (5).Mid (5, 2))-1]+=atof(other2salearray.ElementAt (i).ElementAt (4)); } if(array.GetSize ()>1) { if(other2salearray.ElementAt (i).ElementAt (0)==array.ElementAt (1)) incomedata2[atoi(other2salearray.ElementAt (i).ElementAt (5).Mid (5, 2))-1]+=atof(other2salearray.ElementAt (i).ElementAt (4)); } if(array.GetSize ()>2) { if(other2salearray.ElementAt (i).ElementAt (0)==array.ElementAt (2)) incomedata3[atoi(other2salearray.ElementAt (i).ElementAt (5).Mid (5, 2))-1]+=atof(other2salearray.ElementAt (i).ElementAt (4)); } if(array.GetSize ()>3) { if(other2salearray.ElementAt (i).ElementAt (0)==array.ElementAt (3)) incomedata4[atoi(other2salearray.ElementAt (i).ElementAt (5).Mid (5, 2))-1]+=atof(other2salearray.ElementAt (i).ElementAt (4)); } if(array.GetSize ()>4) { if(other2salearray.ElementAt (i).ElementAt (0)==array.ElementAt (4)) incomedata5[atoi(other2salearray.ElementAt (i).ElementAt (5).Mid (5, 2))-1]+=atof(other2salearray.ElementAt (i).ElementAt (4)); } if(array.GetSize ()>5) { if(other2salearray.ElementAt (i).ElementAt (0)==array.ElementAt (5)) incomedata6[atoi(other2salearray.ElementAt (i).ElementAt (5).Mid (5, 2))-1]+=atof(other2salearray.ElementAt (i).ElementAt (4)); } } int nRowCount=12;// VARIANT var; m_Chart.SetRowCount(nRowCount); float ftemp; for(int row = 1; row <= nRowCount; ++row) { m_Chart.SetRow(row); m_Chart.SetRowLabel(stryear[row-1]); if(array.GetSize ()>0) m_Chart.GetDataGrid().SetData(row, 1, incomedata1[row-1], 0); if(array.GetSize ()>1) m_Chart.GetDataGrid().SetData(row, 2, incomedata2[row-1], 0); if(array.GetSize ()>2) m_Chart.GetDataGrid().SetData(row, 3, incomedata3[row-1], 0); if(array.GetSize ()>3) m_Chart.GetDataGrid().SetData(row, 4, incomedata4[row-1], 0); if(array.GetSize ()>4) m_Chart.GetDataGrid().SetData(row, 5, incomedata5[row-1], 0); if(array.GetSize ()>5) m_Chart.GetDataGrid().SetData(row, 6, incomedata6[row-1], 0); } m_Chart.Refresh(); } void Other2SaleChart::OnChangeEDITyear() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. GetData(); // TODO: Add your control notification handler code here } void Other2SaleChart::OnSelchangeList1() { // TODO: Add your control notification handler code here UpdateData(); int count= m_List1.GetSelCount() ; if(count==0)return; m_selarray.RemoveAll (); int *pIndex=new int[count]; m_List1.GetSelItems(count, pIndex); CString str; for(int i=0; i