www.pudn.com > stocksoft.rar > KXianTu.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()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()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;ii-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;iMoveTo(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_iMoveTo(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(); 
}