// AreaClient.cpp : implementation file #include "stdafx.h" #include "ylgl.h" #include "AreaClient.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" #include "ShowMschart.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // AreaClient IMPLEMENT_DYNCREATE(AreaClient, MyFormView) AreaClient::AreaClient() : MyFormView(AreaClient::IDD) { //{{AFX_DATA_INIT(AreaClient) 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; //}}AFX_DATA_INIT } AreaClient::~AreaClient() { } void AreaClient::DoDataExchange(CDataExchange* pDX) { MyFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(AreaClient) 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_MSCHART1, m_Chart); DDX_Radio(pDX, IDC_RADIO3, m_radio1); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(AreaClient, MyFormView) //{{AFX_MSG_MAP(AreaClient) 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) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // AreaClient diagnostics #ifdef _DEBUG void AreaClient::AssertValid() const { MyFormView::AssertValid(); } void AreaClient::Dump(CDumpContext& dc) const { MyFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // AreaClient message void AreaClient::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); m_Chart.GetBackdrop().GetFill().SetStyle(1); m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255); // m_Chart.SetShowLegend(TRUE); m_Chart.SetColumn(1); m_Chart.SetChartType(1); // 栈模式 m_Chart.SetStacking(FALSE); VARIANT var; 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(1); m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetBrush().GetFillColor().Set(255, 0, 0); // 线宽(对点线图有效) m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth(30); // 数据点类型显示数据值的模式(对柱柱状图和点线图有效) // 0: 不显示 1: 显示在柱状图外 // 2: 显示在柱状图内上方 3: 显示在柱状图内中间 4: 显示在柱状图内下方 m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); ////////////////////// GetDlgItem(IDC_STATIC2)->GetWindowRect(rc2); ScreenToClient(rc2); m_Chart.MoveWindow(rc2); m_bInit = 1; DateChange(); } void AreaClient::FillGrid() { } void AreaClient::OnBUTclose() { // TODO: Add your control notification handler code GetParent()->SendMessage(WM_CLOSE); } void AreaClient::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 AreaClient::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 AreaClient::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 AreaClient::DateChange() { if (m_bInit == 0)return; UpdateData(); m_spinyear.EnableWindow(0); m_spinmonth.EnableWindow(0); m_spinday.EnableWindow(0); int g_nYearposTemp = g_nYearpos; #if JEFF_TEST_ON // 2015开始禁用跨年数据; if (m_year >= 2014 && m_year <= atoi(g_date.Left(4)) && g_hisyeararray.GetSize()) { g_nYearpos = -1; } else if (m_year <= 2013 && g_hisyeararray.GetSize()) { g_nYearpos = GetYearPos(m_year); } if ( g_nYearpos == -1 && m_year <=2013 ) #else g_nYearpos = GetYearPos(m_year); if (g_nYearpos == -1 && m_year != atoi(g_date.Left(4))) #endif { m_List1array.RemoveAll(); g_nYearpos = g_nYearposTemp; KindChange(); m_spinyear.EnableWindow(1); m_spinmonth.EnableWindow(1); m_spinday.EnableWindow(1); return; } g_sendhead.bsql = 0; g_sendhead.code[0] = 52; g_sendhead.tabcount = 1; g_pMainWnd->ProcessChatMessageRequest2(1); if (g_bSendOK == 0) { g_nYearpos = g_nYearposTemp; m_spinyear.EnableWindow(1); m_spinmonth.EnableWindow(1); m_spinday.EnableWindow(1); return; } DataToArray(&m_List1array); g_nYearpos = -1; g_sendhead.bsql = 0; g_sendhead.code[0] = 82; g_sendhead.tabcount = 1; g_pMainWnd->ProcessChatMessageRequest2(1); if (g_bSendOK == 0) { g_nYearpos = g_nYearposTemp; m_spinyear.EnableWindow(1); m_spinmonth.EnableWindow(1); m_spinday.EnableWindow(1); return; } DataToArray(&m_List2array); g_nYearpos = g_nYearposTemp; KindChange(); m_spinyear.EnableWindow(1); m_spinmonth.EnableWindow(1); m_spinday.EnableWindow(1); } void AreaClient::KindChange() { if (m_List2array.GetSize() == 0)return; int *pData = new int[m_List2array.GetSize()]; memset(pData, 0, sizeof(int)*m_List2array.GetSize()); for (int i = 0; i < m_List1array.GetSize(); i++) { if (m_List1array.ElementAt(i).ElementAt(13).IsEmpty() && m_List1array.ElementAt(i).ElementAt(14).IsEmpty())continue; for (int j = 0; j < m_List2array.GetSize(); j++) { if (m_List2array.ElementAt(j).ElementAt(0) == m_List1array.ElementAt(i).ElementAt(13)) pData[j]++; else if (m_List2array.ElementAt(j).ElementAt(0) == m_List1array.ElementAt(i).ElementAt(14)) pData[j]++; } } int nRowCount = m_List2array.GetSize(); m_Chart.SetRowCount(nRowCount); for (int row = 1; row <= nRowCount; ++row) { m_Chart.SetRow(row); m_Chart.SetRowLabel(m_List2array.ElementAt(row - 1).ElementAt(0)); m_Chart.GetDataGrid().SetData(row, 1, pData[row - 1], 0); } m_Chart.Refresh(); delete[]pData; } void AreaClient::OnRadio3() { // TODO: Add your control notification handler code here UpdateData(); if (m_radio1 == 0) { m_Chart.SetChartType(3); } else if (m_radio1 == 1) { m_Chart.SetChartType(1); } else if (m_radio1 == 2) { m_Chart.SetChartType(14); } } void AreaClient::OnRadio4() { // TODO: Add your control notification handler code here OnRadio3(); } void AreaClient::OnRadio5() { // TODO: Add your control notification handler code here OnRadio3(); } BEGIN_EVENTSINK_MAP(AreaClient, MyFormView) //{{AFX_EVENTSINK_MAP(AreaClient) ON_EVENT(AreaClient, IDC_MSCHART1, -601 /* DblClick */, OnDblClickMschart1, VTS_NONE) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP() extern BOOL g_bShowMsChart; extern HWND g_hShowChartWnd; void AreaClient::OnDblClickMschart1() { // TODO: Add your control notification handler code here if (g_bShowMsChart) { ::SendMessage(g_hShowChartWnd, WM_CLOSE, 0, 0); return; } g_bShowMsChart = 1; CRect rc; m_Chart.GetWindowRect(rc); ScreenToClient(rc); ShowMschart dlg; dlg.m_pParent = this; dlg.m_pChart = &m_Chart; dlg.DoModal(); m_Chart.MoveWindow(rc); g_bShowMsChart = 0; } // g_sendhead.code[0]=193;