⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kxiantu.cpp

📁 股票助手的源代码
💻 CPP
字号:
// KXianTu.cpp : implementation file
//

#include "stdafx.h"
#include "Accobook_CE.h"

#include "Accobook_CEDoc.h"
#include "Accobook_CEView.h"

#include "KXianTu.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CDWordArray g_YearArray,g_MonthArray,g_DayArray;
extern CStringArray g_ZuiGaoJiaArray;
extern CStringArray g_ZuiDiJiaArray;
extern CStringArray g_KaiPanJiaArray;
extern CStringArray g_ShouPanJiaArray;
extern int g_nDays;
extern CTime g_time1,g_time2;
float g_nMax=1.8;
float g_nMin=0.3;
float g_nYStep=8;
TCHAR g_cc[120];
//TCHAR a[100];
//swprintf(a,_T("%f    元."),num);
	
int g_nTotalNum=12;
float g_nXStep=0;
float g_Step=0;
int g_nXTop=41;//1
int g_nXOffset=40;//35;
int g_nYOffset1=35;
int g_nYOffset2=15;
int g_i;
int g_len;
double	g_f;
int g_dec;
int g_sign=-1;;
int g_decpnt;
CString g_s,g_temp="0.";
float g_num;
DWORD g_d;
/////////////////////////////////////////////////////////////////////////////
// CKXianTu dialog


CKXianTu::CKXianTu(CWnd* pParent /*=NULL*/)
	: CDialog(CKXianTu::IDD, pParent)
{
	//{{AFX_DATA_INIT(CKXianTu)
	m_sDaiMa = _T("");
	m_sMingChen = _T("");
	m_sRiQi1 = _T("");
	m_sRiQi2 = _T("");
	m_TianShu = 5;
	//}}AFX_DATA_INIT
	m_bHuaKXianTu=1;

	m_nYMax=220;//160;
	
}


void CKXianTu::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CKXianTu)
	DDX_Text(pDX, IDC_EDIT_DAIMA, m_sDaiMa);
	DDX_Text(pDX, IDC_EDIT_MINGCHEN, m_sMingChen);
	DDX_Text(pDX, IDC_EDIT_SearchRIQI1, m_sRiQi1);
	DDX_Text(pDX, IDC_EDIT_SearchRIQI2, m_sRiQi2);
	DDX_Text(pDX, IDC_EDIT_TIANSHU, m_TianShu);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CKXianTu, CDialog)
	//{{AFX_MSG_MAP(CKXianTu)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_BUTTON_HUATU, OnButtonHuatu)
	ON_BN_CLICKED(IDC_BUTTON_HUATU2, OnButtonHuatu2)
	ON_BN_CLICKED(IDC_BUTTON_HUATU3, OnButtonHuatu3)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CKXianTu message handlers

BOOL CKXianTu::OnInitDialog() 
{
	CDialog::OnInitDialog();
//g_nYear1=g_nMonth1=g_nDay1=g_nYear2=g_nMonth2=g_nDay2=
	g_nDays=0;

SYSTEMTIME st;
::GetSystemTime(&st);
TCHAR sYear[10],sMonth[10],sDay[10];
wsprintf(sYear,_T("%d"),st.wYear);
wsprintf(sMonth,_T("%d"),st.wMonth);
wsprintf(sDay,_T("%d"),st.wDay);
CString s=sYear;
s+=_T(".");
s+=sMonth;
s+=_T(".");
s+=sDay;
s+=_T(".");
m_sRiQi1=s;
m_sRiQi2=s;
GetDlgItem(IDC_EDIT_SearchRIQI1)->SetWindowText(m_sRiQi1);
GetDlgItem(IDC_EDIT_SearchRIQI2)->SetWindowText(m_sRiQi2);


	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CKXianTu::OnOK() 
{
	// TODO: Add extra validation here
	
	CDialog::OnOK();
}

void CKXianTu::OnCancel() 
{
	CDialog::OnCancel();
}

void CKXianTu::DrawOneKXianTu(CDC* pDC,float nXpos,
							  float nZuiGaoJia,float nZuiDiJia,
							  float nKaiPanJia,float nShouPanJia) 
{
CBrush brs1(RGB(255,255,255));
CBrush brs2(RGB(0,0,0));
float nShangXian,nXiaXian;
if(nKaiPanJia<=nShouPanJia)
	{
	pDC->SelectObject(&brs1);
	nShangXian=nShouPanJia;
	nXiaXian=nKaiPanJia;
	}
else
	{
	pDC->SelectObject(&brs2);
	nShangXian=nKaiPanJia;
	nXiaXian=nShouPanJia;
	}
nShangXian=(m_nYMax-g_nYOffset1)
		-((nShangXian-g_nMin)/(g_nMax-g_nMin))*g_nYStep*g_Step;
nXiaXian=(m_nYMax-g_nYOffset1)
		-((nXiaXian-g_nMin)/(g_nMax-g_nMin))*g_nYStep*g_Step;
nZuiDiJia=(m_nYMax-g_nYOffset1)
		-((nZuiDiJia-g_nMin)/(g_nMax-g_nMin))*g_nYStep*g_Step;
nZuiGaoJia=(m_nYMax-g_nYOffset1)
		-((nZuiGaoJia-g_nMin)/(g_nMax-g_nMin))*g_nYStep*g_Step;
pDC->Rectangle(nXpos-m_nWidth,nShangXian,
			 nXpos+m_nWidth,nXiaXian);
pDC->MoveTo(nXpos,nXiaXian);
pDC->LineTo(nXpos,nZuiDiJia);
pDC->MoveTo(nXpos,nShangXian);
pDC->LineTo(nXpos,nZuiGaoJia);
}

void CKXianTu::OnButtonHuatu2() 
{
UpdateData();
if((m_sDaiMa=="")&&(m_sMingChen==""))
	{
	//AfxMessageBox(_T("股票代码及名称不能均空!请输入代码或名称!"));
	::MessageBox(GetSafeHwnd(),_T("股票代码及名称不能均空!请输入代码或名称!"),
		_T("StockStar_CE Application"),MB_OK);
	
	return;
	}
if(m_TianShu<1)
	{
	//AfxMessageBox(_T("平均线天数不能小于1!请输入正确的平均线天数!"));
	::MessageBox(GetSafeHwnd(),_T("平均线天数不能小于1!请输入正确的平均线天数!"),
		_T("StockStar_CE Application"),MB_OK);
	
	return;
	}
GetDlgItem(IDC_BUTTON_HUATU)->EnableWindow(0);
GetDlgItem(IDC_BUTTON_HUATU2)->EnableWindow(0);
GetDlgItem(IDC_BUTTON_HUATU3)->EnableWindow(0);
CFrameWnd* pWnd=(CFrameWnd*)AfxGetMainWnd( );
if(pWnd)
	{
	CAccobook_CEView* pView=(CAccobook_CEView*)pWnd->GetActiveView();
	if(pView)
		{
		pView->UpdateListForKXianTu(m_sRiQi1,m_sRiQi2,m_sDaiMa,m_sMingChen);
		pView->PrePareKXianTuValues();
		if(g_ShouPanJiaArray.GetSize()<m_TianShu)
			{
			//AfxMessageBox(_T("交易数据太少不能画均线图!"));
			::MessageBox(GetSafeHwnd(),_T("交易数据太少不能画均线图!"),
				_T("StockStar_CE Application"),MB_OK);

			m_bHuaKXianTu=1;
			}
		else
			m_bHuaKXianTu=2;
		}
	}
Invalidate();
GetDlgItem(IDC_BUTTON_HUATU2)->EnableWindow(1);
GetDlgItem(IDC_BUTTON_HUATU)->EnableWindow(1);
GetDlgItem(IDC_BUTTON_HUATU3)->EnableWindow(1);
}

void CKXianTu::OnButtonHuatu() 
{
UpdateData();
if((m_sDaiMa=="")&&(m_sMingChen==""))
	{
	//AfxMessageBox(_T("股票代码及名称不能均空!请输入代码或名称!"));
	::MessageBox(GetSafeHwnd(),_T("股票代码及名称不能均空!请输入代码或名称!"),
				_T("StockStar_CE Application"),MB_OK);

	return;
	}
GetDlgItem(IDC_BUTTON_HUATU)->EnableWindow(0);
GetDlgItem(IDC_BUTTON_HUATU2)->EnableWindow(0);
GetDlgItem(IDC_BUTTON_HUATU3)->EnableWindow(0);
CFrameWnd* pWnd=(CFrameWnd*)AfxGetMainWnd( );
if(pWnd)
	{
	CAccobook_CEView* pView=(CAccobook_CEView*)pWnd->GetActiveView();
	if(pView)
		{
		pView->UpdateListForKXianTu(m_sRiQi1,m_sRiQi2,m_sDaiMa,m_sMingChen);
		pView->PrePareKXianTuValues();
		m_bHuaKXianTu=1;
		}
	}

Invalidate();
GetDlgItem(IDC_BUTTON_HUATU)->EnableWindow(1);
GetDlgItem(IDC_BUTTON_HUATU2)->EnableWindow(1);
GetDlgItem(IDC_BUTTON_HUATU3)->EnableWindow(1);
}

void CKXianTu::OnButtonHuatu3() 
{
UpdateData();
if((m_sDaiMa=="")&&(m_sMingChen==""))
	{
	//AfxMessageBox(_T("股票代码及名称不能均空!请输入代码或名称!"));
	::MessageBox(GetSafeHwnd(),_T("股票代码及名称不能均空!请输入代码或名称!"),
				_T("StockStar_CE Application"),MB_OK);

	return;
	}
if(m_TianShu<1)
	{
//	AfxMessageBox(_T("平均线天数不能小于1!请输入正确的平均线天数!"));
	::MessageBox(GetSafeHwnd(),_T("平均线天数不能小于1!请输入正确的平均线天数!"),
		_T("StockStar_CE Application"),MB_OK);

	return;
	}
GetDlgItem(IDC_BUTTON_HUATU)->EnableWindow(0);
GetDlgItem(IDC_BUTTON_HUATU2)->EnableWindow(0);
GetDlgItem(IDC_BUTTON_HUATU3)->EnableWindow(0);
CFrameWnd* pWnd=(CFrameWnd*)AfxGetMainWnd( );
if(pWnd)
	{
	CAccobook_CEView* pView=(CAccobook_CEView*)pWnd->GetActiveView();
	if(pView)
		{
		pView->UpdateListForKXianTu(m_sRiQi1,m_sRiQi2,m_sDaiMa,m_sMingChen);
		pView->PrePareKXianTuValues();
		if(g_ShouPanJiaArray.GetSize()<m_TianShu)
			{
			m_bHuaKXianTu=1;
			if(g_ShouPanJiaArray.GetSize()>0)
//				AfxMessageBox(_T("交易数据太少不能画均线图,只能画K线图!"));
				::MessageBox(GetSafeHwnd(),_T("交易数据太少不能画均线图,只能画K线图!"),
					_T("StockStar_CE Application"),MB_OK);
			}
		else
			m_bHuaKXianTu=3;
		}
	}
Invalidate();
GetDlgItem(IDC_BUTTON_HUATU)->EnableWindow(1);
GetDlgItem(IDC_BUTTON_HUATU2)->EnableWindow(1);
GetDlgItem(IDC_BUTTON_HUATU3)->EnableWindow(1);
}

void CKXianTu::DrawJunXianTu(CDC* pDC) 
{
int i,j,Num=g_ShouPanJiaArray.GetSize();
if(Num<5)return;
double dShouPanJia;
TCHAR* stopstring;
//int nFind=0;
//while(nFind<4)
//dShouPanJia=_tcstod(g_ShouPanJiaArray[4],&stopstring);
dShouPanJia=wcstod(g_ShouPanJiaArray[m_TianShu-1],&stopstring);
//for(j=3;j>=0;j--)
for(j=m_TianShu-2;j>=0;j--)
	{
	dShouPanJia+=wcstod(g_ShouPanJiaArray[j],&stopstring);
	}
dShouPanJia=dShouPanJia/(double)m_TianShu;
dShouPanJia=(m_nYMax-g_nYOffset1)
		-((dShouPanJia-g_nMin)/(g_nMax-g_nMin))*g_nYStep*g_Step;
//pDC->MoveTo(g_nXOffset+(4+1)*g_nXStep,dShouPanJia);
pDC->MoveTo(g_nXOffset+(m_TianShu)*g_nXStep,dShouPanJia);
//for(i=5;i<Num;i++)
for(i=m_TianShu;i<Num;i++)
	{
	dShouPanJia=wcstod(g_ShouPanJiaArray[i],&stopstring);
	//while(nFind<4)
	//for(j=i-1;j>i-5;j--)
	for(j=i-1;j>i-m_TianShu;j--)
		{
		dShouPanJia+=wcstod(g_ShouPanJiaArray[j],&stopstring);
		}
	dShouPanJia=dShouPanJia/(double)m_TianShu;
	dShouPanJia=(m_nYMax-g_nYOffset1)
		-((dShouPanJia-g_nMin)/(g_nMax-g_nMin))*g_nYStep*g_Step;
	pDC->LineTo(g_nXOffset+(i+1)*g_nXStep,dShouPanJia);
	}
}

void CKXianTu::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	g_nTotalNum=g_ZuiGaoJiaArray.GetSize();
	g_nDays+=1;
	CRect rc;
	GetClientRect(&rc);
	//m_nYMax=160;
	m_nWidth=(rc.Width()-3)/(2*g_nDays);//g_nXStep;
	//m_nWidth=5;//(rc.Width()-3)/(2*g_nDays);
//	if(m_nWidth<2)m_nWidth=2;
	if(m_nWidth>5)m_nWidth=5;
	TCHAR* stopstring;
	int i,KNum;
	DrawZuoBiaoXi(&dc,rc);
if(m_bHuaKXianTu==1)
	{
	KNum=g_ZuiGaoJiaArray.GetSize();
	for(i=0;i<KNum;i++)
		{
//		i=0;
//		dc.Rectangle(50,50,150,100);
//		dc.Rectangle(70,50,150,100);

//		DrawOneKXianTu(&dc,70,140,100,138,110);
		DrawOneKXianTu(&dc,g_nXOffset+(i+1)*g_nXStep,
				  wcstod(g_ZuiGaoJiaArray[i],&stopstring),
				  wcstod(g_ZuiDiJiaArray[i],&stopstring),
				  wcstod(g_KaiPanJiaArray[i],&stopstring),
				  wcstod(g_ShouPanJiaArray[i],&stopstring)) ;
		}

	}

if(m_bHuaKXianTu==2)
	{
	DrawJunXianTu(&dc);
	}
if(m_bHuaKXianTu==3)
	{
	DrawJunXianTu(&dc);
	KNum=g_ZuiGaoJiaArray.GetSize();
	for(i=0;i<KNum;i++)
		{
		DrawOneKXianTu(&dc,g_nXOffset+(i+1)*g_nXStep,
				  wcstod(g_ZuiGaoJiaArray[i],&stopstring),
				  wcstod(g_ZuiDiJiaArray[i],&stopstring),
				  wcstod(g_KaiPanJiaArray[i],&stopstring),
				  wcstod(g_ShouPanJiaArray[i],&stopstring)) ;
		}
	}

}


void CKXianTu::DrawZuoBiaoXi(CDC* pDC,CRect rc)
{
pDC->MoveTo(g_nXOffset,g_nXTop);//1
pDC->LineTo(g_nXOffset,m_nYMax);//rc.Height());
pDC->LineTo(rc.Width()-3,m_nYMax);
pDC->LineTo(rc.Width()-6,m_nYMax+3);
pDC->MoveTo(rc.Width()-3,m_nYMax);
pDC->LineTo(rc.Width()-6,m_nYMax-3);
pDC->MoveTo(g_nXOffset,g_nXTop);//1
pDC->LineTo(g_nXOffset-3,g_nXTop+3);//4
pDC->MoveTo(g_nXOffset,g_nXTop);//1
pDC->LineTo(g_nXOffset+3,g_nXTop+3);//4
ExtTextOut(pDC->GetSafeHdc(),g_nXOffset-6,m_nYMax, ETO_OPAQUE,NULL,_T("o"),1,NULL);
//////////////////////////////////////^
////////////////////Draw KE DU:Y Zhou |
g_num=(g_nMax-g_nMin)/g_nYStep;
//g_Step=(m_nYMax-50)/g_nYStep;
g_Step=(m_nYMax-90)/g_nYStep;
if(g_nTotalNum>0)
	{
	for(g_i=0;g_i<(g_nYStep+1);g_i++)
		{
		pDC->MoveTo(g_nXOffset-2,m_nYMax-g_nYOffset1-g_i*g_Step);
		pDC->LineTo(g_nXOffset+2,m_nYMax-g_nYOffset1-g_i*g_Step);
		swprintf(g_cc,_T("%f"),g_nMin+g_i*g_num);
		g_s=g_cc;
		g_len=g_s.GetLength();
		while(g_s[g_len-1]=='0')
			{
			g_s=g_s.Left(g_len-1);
			g_len=g_s.GetLength();
			}
		g_len=min(g_len,6);
		g_s=g_s.Left(g_len);
		ExtTextOut(pDC->GetSafeHdc(),0,m_nYMax-g_nYOffset1-g_i*g_Step-5,//m_nYMax-(i+2)*nStep-5,//g_nXOffset-2,m_nYMax-g_nYOffset1-i*nStep
			ETO_OPAQUE,NULL,g_s,g_s.GetLength(),NULL);
		}
/////X Zhou----->
g_nXStep=(rc.Width()-g_nXOffset)/(g_nTotalNum+1);
wsprintf(g_cc,_T("%d年%d月"),g_time1.GetYear(),g_time1.GetMonth());
if(g_time1.GetMonth()>0)
	ExtTextOut(pDC->GetSafeHdc(),2,m_nYMax+18,
			ETO_OPAQUE,NULL,g_cc,_tcslen(g_cc),NULL);
g_d=g_time1.GetMonth();
for(g_i=0;g_i<g_nTotalNum;g_i++)
	{
	pDC->MoveTo(g_nXOffset+(g_i+1)*g_nXStep,m_nYMax-2);
	pDC->LineTo(g_nXOffset+(g_i+1)*g_nXStep,m_nYMax+2);
	if(g_nTotalNum<20)
		{
		wsprintf(g_cc,_T("%d"),g_DayArray[g_i]);
		if(g_i%2==0)
			ExtTextOut(pDC->GetSafeHdc(),g_nXOffset+(g_i+1)*g_nXStep-2,m_nYMax+4,
					ETO_OPAQUE,NULL,g_cc,_tcslen(g_cc),NULL);
		else
			ExtTextOut(pDC->GetSafeHdc(),g_nXOffset+(g_i+1)*g_nXStep-2,m_nYMax-16,
					ETO_OPAQUE,NULL,g_cc,_tcslen(g_cc),NULL);
		}
	if(g_d!=g_MonthArray[g_i])
		{
		g_d=g_MonthArray[g_i];
		wsprintf(g_cc,_T("%d月"),g_MonthArray[g_i]);
		//AfxMessageBox(g_cc);
		ExtTextOut(pDC->GetSafeHdc(),g_nXOffset+(g_i+1)*g_nXStep-2,m_nYMax+18,
					ETO_OPAQUE,NULL,g_cc,_tcslen(g_cc),NULL);
	
		}
	}

	}
}

BOOL CKXianTu::DestroyWindow() 
{
g_YearArray.RemoveAll();
g_MonthArray.RemoveAll();
g_DayArray.RemoveAll();
g_ZuiGaoJiaArray.RemoveAll();
g_ZuiDiJiaArray.RemoveAll();
g_KaiPanJiaArray.RemoveAll();
g_ShouPanJiaArray.RemoveAll();
	
	return CDialog::DestroyWindow();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -