// MemberChart.cpp : implementation file // #include "stdafx.h" #include "ylgl.h" #include "MemberChart.h" #include "MyMdi.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" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // MemberChart IMPLEMENT_DYNCREATE(MemberChart, MyFormView) MemberChart::MemberChart() : MyFormView(MemberChart::IDD) { //{{AFX_DATA_INIT(MemberChart) m_year = atoi(g_date.Mid (0,4)); m_month = atoi(g_date.Mid (5,2)); m_day = atoi(g_date.Mid (8,2)); m_radio1 = 1; m_bInit=0; m_radio2 = 0; //}}AFX_DATA_INIT } MemberChart::~MemberChart() { } void MemberChart::DoDataExchange(CDataExchange* pDX) { MyFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(MemberChart) DDX_Control(pDX, IDC_SPIN3, m_spinday); DDX_Control(pDX, IDC_SPIN2, m_spinmonth); DDX_Control(pDX, IDC_SPIN1, m_spinyear); DDX_Control(pDX, IDC_STATIC1, m_static1); DDX_Text(pDX, IDC_EDITyear, m_year); DDV_MinMaxUInt(pDX, m_year, 1900, 3000); DDX_Text(pDX, IDC_EDITmonth, m_month); DDV_MinMaxUInt(pDX, m_month, 1, 12); DDX_Text(pDX, IDC_EDITday, m_day); DDV_MinMaxUInt(pDX, m_day, 1, 31); DDX_Control(pDX, IDC_MSCHART2, m_Chart2); DDX_Radio(pDX, IDC_RADIO3, m_radio1); DDX_Radio(pDX, IDC_RADIO6, m_radio2); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(MemberChart, MyFormView) //{{AFX_MSG_MAP(MemberChart) ON_BN_CLICKED(IDC_BUTclose, OnBUTclose) ON_EN_CHANGE(IDC_EDITyear, OnChangeEDITyear) ON_EN_CHANGE(IDC_EDITmonth, OnChangeEDITmonth) ON_EN_CHANGE(IDC_EDITday, OnChangeEDITday) ON_BN_CLICKED(IDC_RADIO3, OnRadio3) ON_BN_CLICKED(IDC_RADIO4, OnRadio4) ON_BN_CLICKED(IDC_RADIO5, OnRadio5) ON_BN_CLICKED(IDC_RADIO6, OnRadio6) ON_BN_CLICKED(IDC_RADIO7, OnRadio7) ON_BN_CLICKED(IDC_RADIO8, OnRadio8) ON_BN_CLICKED(IDC_RADIO10, OnRadio10) ON_BN_CLICKED(IDC_RADIO11, OnRadio11) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // MemberChart diagnostics #ifdef _DEBUG void MemberChart::AssertValid() const { MyFormView::AssertValid(); } void MemberChart::Dump(CDumpContext& dc) const { MyFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // MemberChart message handlers void MemberChart::OnInitialUpdate() { MyFormView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class CMyMdi Mdi; Mdi.SetSubView((CWnd*)GetParent(), (CWnd*)this); // Here we create the outbar control using the splitter as its parent // and setting its id to the first pane. CRect rc2; GetWindowRect(rc2); ::MoveWindow(m_hWnd,g_rc.left,g_rc.top,g_rc.Width(),g_rc.Height(),TRUE); EnumChildWindows(m_hWnd,(WNDENUMPROC)EnumChildProc,0); m_static1.SetFont (&g_titlefont); m_spinyear.SetRange (1900, 3000); m_spinmonth.SetRange (1, 12); m_spinday.SetRange (1, 31); VARIANT var; m_Chart2.GetBackdrop().GetFill().SetStyle(1); m_Chart2.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255); m_Chart2.SetShowLegend(0); m_Chart2.SetChartType(3); // 栈模式 m_Chart2.SetStacking(FALSE); m_Chart2.GetPlot().GetAxis(1,var).GetValueScale().SetAuto(1); // 不自动标注Y轴刻度 m_Chart2.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(0); // 不自动标注X轴刻度 m_Chart2.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerLabel(1);// 每刻度一个标注 m_Chart2.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerTick(1); // 每刻度一个刻度线 m_Chart2.SetColumnCount(1); m_Chart2.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(255, 0, 0); // 线宽(对点线图有效) m_Chart2.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth(30); // 数据点类型显示数据值的模式(对柱柱状图和点线图有效) // 0: 不显示 1: 显示在柱状图外 // 2: 显示在柱状图内上方 3: 显示在柱状图内中间 4: 显示在柱状图内下方 m_Chart2.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); /////////////////////////// GetDlgItem(IDC_STATIC3)->GetWindowRect(rc2); ScreenToClient(rc2); m_Chart2.MoveWindow (rc2); m_Chart2.SetChartType(1); m_bInit=1; DateChange(); } void MemberChart::OnBUTclose() { // TODO: Add your control notification handler code here GetParent()->SendMessage(WM_CLOSE); } void MemberChart::OnChangeEDITyear() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the MyFormView::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. DateChange(); // TODO: Add your control notification handler code here } void MemberChart::OnChangeEDITmonth() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the MyFormView::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // DateChange(); // TODO: Add your control notification handler code here } void MemberChart::OnChangeEDITday() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the MyFormView::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // DateChange(); // TODO: Add your control notification handler code here } void MemberChart::DateChange() { if(m_bInit==0)return; m_spinyear.EnableWindow(0); m_spinmonth.EnableWindow(0); m_spinday.EnableWindow(0); UpdateData(); int i = 0; g_sendhead.bsql=0; g_sendhead.tabcount=1; CString filter; filter.Format ("[date]>='%d-01-01' and [date]<='%d-12-31'", m_year, m_year); if(m_radio2==0) g_sendhead.code[0]=68; else if(m_radio2==1 || m_radio2==2) { g_sendhead.code[0]=129; filter.Format ("%04d", m_year); } else if(m_radio2==3) g_sendhead.code[0]=164; else if(m_radio2==4) { g_sendhead.code[0]=165; g_sendhead.code[1]=166; g_sendhead.code[2]=162; filter.Format ("[date]<='%d-12-31'; [date]<='%d-12-31'; [date]<='%d-12-31'", m_year, m_year, m_year); /* filter.Format ("[date]>='%d-01-01' and [date]<='%d-12-31';[date]>='%d-01-01' and [date]<='%d-12-31';[date]>='%d-01-01' and [date]<='%d-12-31'", m_year, m_year, m_year, m_year, m_year, m_year); */ g_sendhead.tabcount=3; } CString strdate; strdate.Format ("%d", m_year); if(m_radio2==0) m_static1.SetWindowText ("发放金卡图表"); else if(m_radio2==1) m_static1.SetWindowText ("发出/收回副卡图表"); else if(m_radio2==2) m_static1.SetWindowText ("副卡积分图表"); else if(m_radio2==3) m_static1.SetWindowText ("发放现金子卡图表"); else if(m_radio2==4) m_static1.SetWindowText ("现金卡消费图表"); g_pMainWnd->ProcessChatMessageRequest2(filter); if(g_bSendOK==0) { m_spinyear.EnableWindow(1); m_spinmonth.EnableWindow(1); m_spinday.EnableWindow(1); return; } if(m_radio2==4) { CArrayList2array; CArrayList3array; DataToArray(&List2array, &List3array, &m_List2array); CString begindate; m_array3.RemoveAll (); for( i=0; i<12; i++) { int j = 0; int charge=0; begindate.Format ("%d-%02d-31", m_year, i+1); for( j=0; jmessage==WM_KEYDOWN) { switch (pMsg->wParam) { case VK_RETURN: return 1; case 0x43: // copy if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) ) { GetFocus()->SendMessage(WM_COPY); return TRUE; } break; case 0x56: //Ctrl + V: if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) ) { GetFocus()->SendMessage(WM_PASTE); return TRUE; } break; case 0x58: // cut if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) ) { GetFocus()->SendMessage(WM_CUT); return TRUE; } break; case 0x5A: //undo case 0x59: //redo if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) ) { GetFocus()->SendMessage(WM_UNDO); return TRUE; } break; } } return MyFormView::PreTranslateMessage(pMsg); } catch(...) { } return true; } void MemberChart::OnRadio3() { // TODO: Add your control notification handler code here UpdateData(); if(m_radio1==0) { m_Chart2.SetChartType(3); } else if(m_radio1==1) { m_Chart2.SetChartType(1); } else if(m_radio1==2) { m_Chart2.SetChartType(14); } } void MemberChart::OnRadio4() { // TODO: Add your control notification handler code here OnRadio3(); } void MemberChart::OnRadio5() { // TODO: Add your control notification handler code here OnRadio3(); } void MemberChart::OnRadio6() { // TODO: Add your control notification handler code here m_Chart2.SetColumnCount(1); m_Chart2.SetShowLegend(0); DateChange(); } void MemberChart::OnRadio7() { // TODO: Add your control notification handler code here m_Chart2.SetShowLegend(TRUE); m_Chart2.SetColumnCount(2); m_Chart2.SetColumn(1); m_Chart2.SetColumnLabel((LPCTSTR)"发放"); m_Chart2.SetColumn(2); m_Chart2.SetColumnLabel((LPCTSTR)"收回"); m_Chart2.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(255, 0, 0); m_Chart2.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(0, 255, 0); // 线宽(对点线图有效) m_Chart2.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth(30); m_Chart2.GetPlot().GetSeriesCollection().GetItem(2).GetPen().SetWidth(30); // 数据点类型显示数据值的模式(对柱柱状图和点线图有效) // 0: 不显示 1: 显示在柱状图外 // 2: 显示在柱状图内上方 3: 显示在柱状图内中间 4: 显示在柱状图内下方 m_Chart2.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); m_Chart2.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); ////////////////////// DateChange(); } void MemberChart::OnRadio8() { // TODO: Add your control notification handler code here m_Chart2.SetColumnCount(1); m_Chart2.SetShowLegend(0); DateChange(); } void MemberChart::OnRadio10() { // TODO: Add your control notification handler code here m_Chart2.SetColumnCount(1); m_Chart2.SetShowLegend(0); DateChange(); } void MemberChart::OnRadio11() { // TODO: Add your control notification handler code here m_Chart2.SetShowLegend(TRUE); m_Chart2.SetColumnCount(3); m_Chart2.SetColumn(1); m_Chart2.SetColumnLabel((LPCTSTR)"消费"); m_Chart2.SetColumn(2); m_Chart2.SetColumnLabel((LPCTSTR)"充值"); m_Chart2.SetColumn(3); m_Chart2.SetColumnLabel((LPCTSTR)"余额"); m_Chart2.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(255, 0, 0); m_Chart2.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(0, 255, 0); m_Chart2.GetPlot().GetSeriesCollection().GetItem(3).GetDataPoints ().GetItem(-1).GetBrush ().GetFillColor ().Set(0, 0, 255); // 线宽(对点线图有效) m_Chart2.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth(30); m_Chart2.GetPlot().GetSeriesCollection().GetItem(2).GetPen().SetWidth(30); m_Chart2.GetPlot().GetSeriesCollection().GetItem(3).GetPen().SetWidth(30); // 数据点类型显示数据值的模式(对柱柱状图和点线图有效) // 0: 不显示 1: 显示在柱状图外 // 2: 显示在柱状图内上方 3: 显示在柱状图内中间 4: 显示在柱状图内下方 m_Chart2.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); m_Chart2.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); m_Chart2.GetPlot().GetSeriesCollection().GetItem(3).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); ////////////////////// DateChange(); }