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

📄 graphview.cpp

📁 股软 通达信行情接收接口, 包括美元汇率
💻 CPP
字号:

#include "stdafx.h"
#include "GraphView.h"

#include "MemDC.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGraphView

#define	IDC_GRAPHVIEW_REPORTTAB	200

#define	GV_REPORTTAB_PARAM			0	// 参数
#define	GV_REPORTTAB_COST			1	// 成本
#define	GV_REPORTTAB_FLAME			2	// 火焰山
#define	GV_REPORTTAB_ACTIVITY		3	// 活跃度

IMPLEMENT_DYNCREATE(CGraphView, CView)

BEGIN_MESSAGE_MAP(CGraphView, CView)
	//{{AFX_MSG_MAP(CGraphView)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_ERASEBKGND()
	ON_WM_MOUSEMOVE()
// 	ON_COMMAND(ID_VIEW_PDAY, OnViewPday)
// 	ON_COMMAND(ID_VIEW_PWEEK, OnViewPweek)
// 	ON_COMMAND(ID_VIEW_PMONTH, OnViewPmonth)
// 	ON_COMMAND(ID_VIEW_PMIN5, OnViewPmin5)
// 	ON_COMMAND(ID_VIEW_PMIN15, OnViewPmin15)
// 	ON_COMMAND(ID_VIEW_PMIN30, OnViewPmin30)
// 	ON_COMMAND(ID_VIEW_PMIN60, OnViewPmin60)
// 	ON_COMMAND(ID_VIEW_LEFT, OnViewLeft)
// 	ON_COMMAND(ID_VIEW_RIGHT, OnViewRight)
// 	ON_COMMAND(ID_VIEW_PAGELEFT, OnViewPageleft)
// 	ON_COMMAND(ID_VIEW_PAGERIGHT, OnViewPageright)
// 	ON_COMMAND(ID_VIEW_HOME, OnViewHome)
// 	ON_COMMAND(ID_VIEW_END, OnViewEnd)
// 	ON_COMMAND(ID_VIEW_ZOOMIN, OnViewZoomin)
// 	ON_COMMAND(ID_VIEW_ZOOMOUT, OnViewZoomout)
// 	ON_COMMAND(ID_VIEW_PREV, OnViewPrev)
// 	ON_COMMAND(ID_VIEW_NEXT, OnViewNext)
// 	ON_COMMAND(ID_VIEW_INSERT, OnViewInsert)
// 	ON_COMMAND(ID_VIEW_NORESUMEDR, OnViewNoresumedr)
// 	ON_COMMAND(ID_VIEW_RESUMEDRUP, OnViewResumedrup)
// 	ON_COMMAND(ID_VIEW_RESUMEDRDOWN, OnViewResumedrdown)
// 	ON_COMMAND(ID_VIEW_MAINDATACLOSE, OnViewMaindataclose)
// 	ON_COMMAND(ID_VIEW_MAINDATAOPEN, OnViewMaindataopen)
// 	ON_COMMAND(ID_VIEW_MAINDATAAVERAGE, OnViewMaindataaverage)
// 	ON_COMMAND(ID_VIEW_KLINECANDLE, OnViewKlinecandle)
// 	ON_COMMAND(ID_VIEW_KLINEAMERICA, OnViewKlineamerica)
// 	ON_COMMAND(ID_VIEW_KLINETOWER, OnViewKlinetower)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_PDAY, OnUpdateViewPday)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_PWEEK, OnUpdateViewPweek)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_PMONTH, OnUpdateViewPmonth)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_PMIN5, OnUpdateViewPmin5)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_PMIN15, OnUpdateViewPmin15)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_PMIN30, OnUpdateViewPmin30)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_PMIN60, OnUpdateViewPmin60)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_NORESUMEDR, OnUpdateViewNoresumedr)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_RESUMEDRUP, OnUpdateViewResumedrup)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_RESUMEDRDOWN, OnUpdateViewResumedrdown)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_MAINDATACLOSE, OnUpdateViewMaindataclose)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_MAINDATAOPEN, OnUpdateViewMaindataopen)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_MAINDATAAVERAGE, OnUpdateViewMaindataaverage)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_KLINECANDLE, OnUpdateViewKlinecandle)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_KLINEAMERICA, OnUpdateViewKlineamerica)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_KLINETOWER, OnUpdateViewKlinetower)
// 	ON_COMMAND(ID_VIEW_HIDETHISTECH, OnViewHidethistech)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_HIDETHISTECH, OnUpdateViewHidethistech)
// 	ON_COMMAND(ID_VIEW_THISTECHPARAM, OnViewThistechparam)
// 	ON_UPDATE_COMMAND_UI(ID_VIEW_THISTECHPARAM, OnUpdateViewThistechparam)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
// 	ON_COMMAND_RANGE(ID_VIEW_TECH_START, ID_VIEW_TECH_END, OnViewTechRange)
// 	ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_TECH_START, ID_VIEW_TECH_END, OnUpdateViewTechRange)
// 	ON_MESSAGE(WM_USER_GETVIEWTITLE, OnGetViewTitle)
// 	ON_MESSAGE(WM_USER_GETVIEWCMDID, OnGetViewCmdid)
// 	ON_MESSAGE(WM_USER_COLORCHANGE, OnColorChange)
// 	ON_MESSAGE(WM_USER_MYRBUTTONDOWN, OnMyRButtonDown)
 	ON_MESSAGE(WM_APP_STKRECEIVER_DATA, OnStkReceiverData)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGraphView construction/destruction

CGraphView::CGraphView()
{
}

CGraphView::~CGraphView()
{
}

void CGraphView::ResetClientRect()
{
	CRect rectClient;
	GetClientRect(&rectClient);
	m_graph.ResetClient(rectClient);
}

void CGraphView::ChangeKType(int ktype)
{
	m_graph.SetKType(ktype);
	m_graph.ResetIndex();
	Invalidate();
}

void CGraphView::ChangeKFormat(int kformat)
{
	m_graph.SetKFormat(kformat);
	m_graph.ResetIndex();
	Invalidate();
}

void CGraphView::OnToggleKType()
{
	int ktype = m_graph.GetKType();
	ktype	++;
	if (ktype > CKData::ktypeMax)
		ktype	=	CKData::ktypeMin;
	ChangeKType(ktype);
}

void CGraphView::OnToggleKFormat(int kformat)
{
	int nOld = m_graph.GetKFormat();
	if (nOld == kformat)
		ChangeKFormat(CKData::formatOriginal);
	else
		ChangeKFormat(kformat);
}

void CGraphView::ChangeMaindataType(int maindatatype)
{
	m_graph.SetMaindataType(maindatatype);
	m_graph.ResetIndex();
	Invalidate();
}

void CGraphView::ChangeKLineMode(int klineMode)
{
	m_graph.SetKLineMode(klineMode);
	m_graph.ResetIndex();
	Invalidate();
}

void CGraphView::OnTechParametersChange()
{
	m_graph.ClearTechniqueCache();
}

BOOL CGraphView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

void CGraphView::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
	OnUpdate();
}

void CGraphView::OnUpdate() 
{
	// TODO: Add your specialized code here and/or call the base class
	if (!IsWindowVisible())
		return;
	SetFocus();

	CStockInfo	info;
	if (AfxGetProfile().GetCurrentStock(&info))
	{
		m_graph.SetCurStock(info);
		m_graph.PrepareStockData();
	}
	else
	{
		m_graph.SetCurStock(STKLIB_CODE_MAIN);
		m_graph.PrepareStockData();
		AfxGetProfile().SetCurrentStock(STKLIB_CODE_MAIN);
	}

	Invalidate();
}

BOOL CGraphView::PreTranslateMessage(MSG* pMsg) 
{
// 	if (WM_KEYDOWN == pMsg->message)
// 	{
// 		switch(pMsg->wParam)
// 		{
// 		case VK_F5:
// 			{
// 				AfxSwitchToStaticView(RUNTIME_CLASS(CRealTimeView));
// 				CRealTimeView * pView = AfxGetRealTimeView();
// 				if (pView)
// 					pView->ChangeDrawMode(CRealTime::modePriceLine);
// 			}
// 			return TRUE;
// 		}
// 	}
	
	return CView::PreTranslateMessage(pMsg);
}

/////////////////////////////////////////////////////////////////////////////
// CGraphView message handlers
/////////////////////////////////////////////////////////////////////////////
// CGraphView drawing

void CGraphView::OnDraw(CDC* pDC)
{
	CView::OnDraw(pDC);
}

int CGraphView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;

	// 实时行情刷新
	AfxGetStkReceiver().AddRcvDataWnd(GetSafeHwnd());

	return 0;
}


void CGraphView::OnDestroy() 
{
	AfxGetStkReceiver().RemoveRcvDataWnd(GetSafeHwnd());

	CView::OnDestroy();
}

void CGraphView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) 
{
	TRACE(_T("CGraphView::OnActivateView %d %d %d\n"), bActivate, pActivateView, pDeactiveView);

	if (bActivate)	OnUpdate();

	CView::OnActivateView(bActivate, pActivateView, pDeactiveView);
}

BOOL CGraphView::OnEraseBkgnd(CDC* pDC) 
{
	return TRUE;
	if (pDC && pDC->IsKindOf(RUNTIME_CLASS(CDC)))
	{
		CRect rect;
		GetClientRect(&rect);
		CBrush brush;
		brush.CreateSolidBrush(AfxGetProfile().GetColor(CColorClass::clrGraphBK));
		pDC->FillRect(&rect, &brush);

		return TRUE;
	}

	return CView::OnEraseBkgnd(pDC);
}

LRESULT CGraphView::OnGetViewTitle(WPARAM wParam, LPARAM lParam)
{
	CString	strTitle = "技术图表";

	lstrcpyn((LPTSTR)lParam, (LPCTSTR)strTitle, wParam);
	if ((int)wParam > strTitle.GetLength())
		wParam = strTitle.GetLength();

	return wParam;
}

LRESULT CGraphView::OnColorChange(WPARAM wParam, LPARAM lParam)
{
	//m_wndReportTab.SetColorTabs(AfxGetProfile().GetColor(CColorClass::clrGraphBK));
	//m_wndReportTab.SetSelectTabColor(AfxGetProfile().GetColor(CColorClass::clrGraphBK),
	//								AfxGetProfile().GetColor(CColorClass::clrTitle));

	Invalidate();
	return 0L;
}

LRESULT CGraphView::OnStkReceiverData(WPARAM wParam, LPARAM lParam)
{
	return m_graph.OnStkReceiverData(wParam,lParam);
}

void CGraphView::OnMouseMove(UINT nFlags, CPoint point) 
{
	m_graph.OnMouseMove(nFlags, point);
	CView::OnMouseMove(nFlags, point);
}

void CGraphView::OnViewPday()	{	ChangeKType(CKData::ktypeDay);	}
void CGraphView::OnViewPweek()	{	ChangeKType(CKData::ktypeWeek);	}
void CGraphView::OnViewPmonth()	{	ChangeKType(CKData::ktypeMonth);	}
void CGraphView::OnViewPmin5()	{	ChangeKType(CKData::ktypeMin5);	}
void CGraphView::OnViewPmin15()	{	ChangeKType(CKData::ktypeMin15);	}
void CGraphView::OnViewPmin30()	{	ChangeKType(CKData::ktypeMin30);	}
void CGraphView::OnViewPmin60()	{	ChangeKType(CKData::ktypeMin60);	}

void CGraphView::OnUpdateViewPday(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CKData::ktypeDay == m_graph.GetKType());		}
void CGraphView::OnUpdateViewPweek(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CKData::ktypeWeek == m_graph.GetKType());	}
void CGraphView::OnUpdateViewPmonth(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CKData::ktypeMonth == m_graph.GetKType());	}
void CGraphView::OnUpdateViewPmin5(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CKData::ktypeMin5 == m_graph.GetKType());	}
void CGraphView::OnUpdateViewPmin15(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CKData::ktypeMin15 == m_graph.GetKType());	}
void CGraphView::OnUpdateViewPmin30(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CKData::ktypeMin30 == m_graph.GetKType());	}
void CGraphView::OnUpdateViewPmin60(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CKData::ktypeMin60 == m_graph.GetKType());	}

void CGraphView::OnViewLeft()		{	m_graph.MoveLeft();	}
void CGraphView::OnViewRight()		{	m_graph.MoveRight();	}
void CGraphView::OnViewPageleft()	{	m_graph.PageLeft();	}
void CGraphView::OnViewPageright()	{	m_graph.PageRight();	}
void CGraphView::OnViewHome()		{	m_graph.MoveHome();	}
void CGraphView::OnViewEnd()		{	m_graph.MoveEnd();		}

void CGraphView::OnViewZoomin()		{	m_graph.ExpandUp();	}
void CGraphView::OnViewZoomout()	{	m_graph.ExpandDown();	}

void CGraphView::OnViewPrev() 
{
	CStockInfo	info;
	if (AfxGetProfile().GetPrevStock(&info))
		OnUpdate();
}
void CGraphView::OnViewNext() 
{
	CStockInfo	info;
	if (AfxGetProfile().GetNextStock(&info))
		OnUpdate();
}
void CGraphView::OnViewInsert()
{
	m_graph.OnInsert();
}

// K Format
void CGraphView::OnViewNoresumedr()	{	OnToggleKFormat(CKData::formatOriginal);	}
void CGraphView::OnViewResumedrup()	{	OnToggleKFormat(CKData::formatXDRup);		}
void CGraphView::OnViewResumedrdown(){	OnToggleKFormat(CKData::formatXDRdown);		}

void CGraphView::OnUpdateViewNoresumedr(CCmdUI* pCmdUI)		{	pCmdUI->SetCheck(CKData::formatOriginal == m_graph.GetKFormat());	}
void CGraphView::OnUpdateViewResumedrup(CCmdUI* pCmdUI)		{	pCmdUI->SetCheck(CKData::formatXDRup == m_graph.GetKFormat());	}
void CGraphView::OnUpdateViewResumedrdown(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CKData::formatXDRdown == m_graph.GetKFormat());	}

// Main data Type
void CGraphView::OnViewMaindataclose(){	ChangeMaindataType(CKData::mdtypeClose);	}
void CGraphView::OnViewMaindataopen(){	ChangeMaindataType(CKData::mdtypeOpen);		}
void CGraphView::OnViewMaindataaverage(){ChangeMaindataType(CKData::mdtypeAverage);	}

void CGraphView::OnUpdateViewMaindataclose(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CKData::mdtypeClose == m_graph.GetMaindataType());	}
void CGraphView::OnUpdateViewMaindataopen(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CKData::mdtypeOpen == m_graph.GetMaindataType());	}
void CGraphView::OnUpdateViewMaindataaverage(CCmdUI* pCmdUI){	pCmdUI->SetCheck(CKData::mdtypeAverage == m_graph.GetMaindataType());	}

// kline Mode
void CGraphView::OnViewKlinecandle()	{	ChangeKLineMode(CStockGraph::klineCandle);	}
void CGraphView::OnViewKlineamerica()	{	ChangeKLineMode(CStockGraph::klineAmerica);	}
void CGraphView::OnViewKlinetower()		{	ChangeKLineMode(CStockGraph::klineTower);	}

void CGraphView::OnUpdateViewKlinecandle(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CStockGraph::klineCandle == m_graph.GetKLineMode());		}
void CGraphView::OnUpdateViewKlineamerica(CCmdUI* pCmdUI)	{	pCmdUI->SetCheck(CStockGraph::klineAmerica == m_graph.GetKLineMode());		}
void CGraphView::OnUpdateViewKlinetower(CCmdUI* pCmdUI)		{	pCmdUI->SetCheck(CStockGraph::klineTower == m_graph.GetKLineMode());		}


void CGraphView::OnViewHidethistech() 
{
	m_graph.HideSelectedTech();
}

void CGraphView::OnUpdateViewHidethistech(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(STT_INVALID != m_graph.GetSelectedTech());
}

⌨️ 快捷键说明

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