// Card2RegChart.cpp : implementation file
//
#include "stdafx.h"
#include "ylgl.h"
#include "Card2RegChart.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

/////////////////////////////////////////////////////////////////////////////
// Card2RegChart

IMPLEMENT_DYNCREATE(Card2RegChart, MyFormView)

Card2RegChart::Card2RegChart()
	: MyFormView(Card2RegChart::IDD)
{
	//{{AFX_DATA_INIT(Card2RegChart)
	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_bInit=0;
	m_radio1 = 1;
	//}}AFX_DATA_INIT
	//m_date = CTime::GetCurrentTime ().Format ("%Y-%m-%d");
}

Card2RegChart::~Card2RegChart()
{
}

void Card2RegChart::DoDataExchange(CDataExchange* pDX)
{
	MyFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Card2RegChart)
	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_Control(pDX, IDC_MSCHART2, m_Chart2);
	DDX_Radio(pDX, IDC_RADIO3, m_radio1);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(Card2RegChart, MyFormView)
	//{{AFX_MSG_MAP(Card2RegChart)
	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()

/////////////////////////////////////////////////////////////////////////////
// Card2RegChart diagnostics

#ifdef _DEBUG
void Card2RegChart::AssertValid() const
{
	MyFormView::AssertValid();
}

void Card2RegChart::Dump(CDumpContext& dc) const
{
	MyFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// Card2RegChart message handlers

void Card2RegChart::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.SetColumnCount(2); 
	m_Chart.SetColumn(1);
	m_Chart.SetColumnLabel((LPCTSTR)"���Ÿ�����");
	m_Chart.SetColumn(2);
	m_Chart.SetColumnLabel((LPCTSTR)"�ջظ�����");


	m_Chart.SetChartType(3);
	// ջģʽ
	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.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(1).GetPen().SetWidth(30);
		m_Chart.GetPlot().GetSeriesCollection().GetItem(2).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_Chart2.GetBackdrop().GetFill().SetStyle(1);
	m_Chart2.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255);
	m_Chart2.SetShowLegend(TRUE);
	m_Chart2.SetColumn(1);
	m_Chart2.SetColumnLabel((LPCTSTR)"ת���ܻ���");
 
	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_STATIC2)->GetWindowRect(rc2);
	ScreenToClient(rc2);
	m_Chart.MoveWindow (rc2);

	GetDlgItem(IDC_STATIC3)->GetWindowRect(rc2);
	ScreenToClient(rc2);
	m_Chart2.MoveWindow (rc2);
	   m_Chart.SetChartType(1);
	   m_Chart2.SetChartType(1);
	m_bInit=1;
	DateChange();
}

void Card2RegChart::OnBUTclose() 
{
	// TODO: Add your control notification handler code here
	GetParent()->SendMessage(WM_CLOSE);
}

void Card2RegChart::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 Card2RegChart::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 Card2RegChart::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 Card2RegChart::DateChange()
{
	if(m_bInit==0)return;
	m_spinyear.EnableWindow(0);
	m_spinmonth.EnableWindow(0);
	m_spinday.EnableWindow(0);
	UpdateData();
 
 	g_sendhead.bsql=0;
	g_sendhead.code[0]=129;
	g_sendhead.tabcount=1;
	CString sql,strdate;
	strdate.Format ("%04d", m_year);
 
 
	m_static1.SetWindowText (strdate+"ת���ܻ���");
 
	g_pMainWnd->ProcessChatMessageRequest2(strdate);
	if(g_bSendOK==0)
	{
		m_spinyear.EnableWindow(1);
	    m_spinmonth.EnableWindow(1);
	    m_spinday.EnableWindow(1);
		return;
	}
	DataToArray(&m_List1array); 
 	KindChange();
	m_spinyear.EnableWindow(1);
    m_spinmonth.EnableWindow(1);
    m_spinday.EnableWindow(1);
}

void Card2RegChart::KindChange()
{
	int i=0;

	int nsum[12]={0};
	int nret[12]={0};
	int npoint[12]={0};
 
	int scount=0;
	int nsret=0;
	int spoint=0;

	CString stryear[12]={"1��","2��","3��","4��","5��","6��","7��","8��","9��","10��","11��","12��"};

 	  
    for( i=0; i<m_List1array.GetSize (); i++)
	{
		if(m_List1array.ElementAt (i).ElementAt (9)!="")
		{
			nsret++;
			spoint+=atoi(m_List1array.ElementAt (i).ElementAt (8));
			nret[atoi(m_List1array.ElementAt (i).ElementAt (5).Mid (5, 2))-1]+=1;
			npoint[atoi(m_List1array.ElementAt (i).ElementAt (5).Mid (5, 2))-1]+=atoi(m_List1array.ElementAt (i).ElementAt (8));
		}
		nsum[atoi(m_List1array.ElementAt (i).ElementAt (5).Mid (5, 2))-1]+=1;
		scount++;
	}
 
 
	int nRowCount=12;//	VARIANT var;
 	m_Chart.SetRowCount(nRowCount);
 	m_Chart2.SetRowCount(nRowCount);
 
	for(int row = 1; row <= nRowCount; ++row)
	{
		m_Chart.SetRow(row);
		m_Chart.SetRowLabel(stryear[row-1]);
		m_Chart.GetDataGrid().SetData(row, 1, nsum[row-1], 0);
		m_Chart.GetDataGrid().SetData(row, 2, nret[row-1], 0);


		m_Chart2.SetRow(row);
		m_Chart2.SetRowLabel(stryear[row-1]);
		m_Chart2.GetDataGrid().SetData(row, 1, npoint[row-1], 0);
	}

	m_Chart.Refresh();
	m_Chart2.Refresh();

 
	CString str;
 	str.Format ("%d", scount);
 	SetDlgItemText(IDC_EDITmoney1, str);

 	str.Format ("%d", nsret);
 	SetDlgItemText(IDC_EDITmoney2, str);

  	str.Format ("%d", spoint);
 	SetDlgItemText(IDC_EDITmoney3, str);
}

BOOL Card2RegChart::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	try
	{
	if(pMsg->message==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 Card2RegChart::OnRadio3() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	if(m_radio1==0)
	{
	   m_Chart.SetChartType(3);
	   m_Chart2.SetChartType(3);
	}
	else if(m_radio1==1)
	{
	   m_Chart.SetChartType(1);
	   m_Chart2.SetChartType(1);
	}
	else if(m_radio1==2)
	{
	   m_Chart.SetChartType(14);
	   m_Chart2.SetChartType(14);
	}
}

void Card2RegChart::OnRadio4() 
{
	// TODO: Add your control notification handler code here
	OnRadio3();
}

void Card2RegChart::OnRadio5() 
{
	// TODO: Add your control notification handler code here
	OnRadio3();
}