📄 graphview.cpp.svn-base
字号:
// GraphView.cpp : implementation of the CGraphView class
//
#include "stdafx.h"
#include "../StaticDoc.h"
#include "GraphView.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_WINDOWPOSCHANGED()
ON_WM_DESTROY()
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDBLCLK()
ON_WM_KEYDOWN()
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_NOTIFY(TCN_SELCHANGE, IDC_GRAPHVIEW_REPORTTAB, OnSelchangeReporttab)
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( NULL, UPDATE_HINT_GRAPHVIEW, NULL );
}
void CGraphView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
if( UPDATE_HINT_GRAPHVIEW != lHint && UPDATE_HINT_GRAPHVIEW_NOTRELOADDATA != lHint )
return;
if( !IsWindowVisible() )
return;
SetFocus( );
CStockInfo info;
if( AfxGetProfile().GetCurrentStock( &info ) )
{
m_graph.SetCurStock( info );
m_graph.PrepareStockData( UPDATE_HINT_GRAPHVIEW_NOTRELOADDATA != lHint );
}
else
{
m_graph.SetCurStock( STKLIB_CODE_MAIN );
m_graph.PrepareStockData( UPDATE_HINT_GRAPHVIEW_NOTRELOADDATA != lHint );
AfxGetProfile().SetCurrentStock( STKLIB_CODE_MAIN, FALSE );
}
Invalidate( );
CMainFrame * pFrame = AfxGetMainFrame();
if( pFrame )
pFrame->m_SearchBox.SetCurrentWindowText( );
}
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 drawing
void CGraphView::OnDraw(CDC* pDC)
{
CStaticDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rectClient;
GetClientRect(&rectClient);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap memBitmap;
memBitmap.CreateCompatibleBitmap(pDC, rectClient.Width(), rectClient.Height());
memDC.SelectObject(&memBitmap);
m_graph.Redraw(&memDC, rectClient);
pDC->BitBlt(rectClient.left, rectClient.top, rectClient.Width(), rectClient.Height(), &memDC, 0, 0, SRCCOPY);
memBitmap.DeleteObject();
}
/////////////////////////////////////////////////////////////////////////////
// CGraphView printing
BOOL CGraphView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CGraphView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: add extra initialization before printing
CView::OnBeginPrinting( pDC, pInfo );
}
void CGraphView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: add cleanup after printing
CView::OnEndPrinting( pDC, pInfo );
}
void CGraphView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: add customized printing code here
pDC->SetMapMode( MM_ISOTROPIC );
CRect rectClient( 0, 0, 1020, 586 );
// GetClientRect( &rectClient );
pDC->SetWindowOrg( rectClient.left, rectClient.top );
pDC->SetWindowExt( rectClient.Width(), rectClient.Height() );
pDC->SetViewportOrg( pInfo->m_rectDraw.left, pInfo->m_rectDraw.top );
pDC->SetViewportExt( pInfo->m_rectDraw.Width(), pInfo->m_rectDraw.Height() );
m_graph.Redraw( pDC, rectClient );
CRect rectKData = m_graph.GetKDataRect();
rectKData.InflateRect( -2, -1, 2, 1 );
m_graph.DrawKData( pDC, m_graph.GetKDataRect() );
// CView::OnPrint(pDC,pInfo);
}
/////////////////////////////////////////////////////////////////////////////
// CGraphView diagnostics
#ifdef _DEBUG
void CGraphView::AssertValid() const
{
CView::AssertValid();
}
void CGraphView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CGraphView message handlers
int CGraphView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CFont font;
if( !font.CreateStockObject( DEFAULT_GUI_FONT ) )
font.CreateStockObject( ANSI_VAR_FONT );
SetFont( &font );
m_graph.SetParent( this );
// tab
if (!m_wndReportTab.Create(WS_VISIBLE|WS_CHILD,CRect(0,0,180,19),this,IDC_GRAPHVIEW_REPORTTAB))
return -1;
CString strName;
strName.LoadString( IDS_GRAPHTAB_PARAM );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -