9.21_10:35 KlineMiddleView
KlineMiddleView.h
#pragma once
#include "afxwin.h"
#include "ClientDoc.h"
class CKlineMiddleView :
public CView
{
DECLARE_DYNCREATE(CKlineMiddleView)
public:
CKlineMiddleView(void);
~CKlineMiddleView(void);
protected:
virtual void OnDraw(CDC* pDC);
public:
DECLARE_MESSAGE_MAP();
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
public:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
void KlinePaint(void);
void XlinePaint(void);
void XlineDel(void);
};
#pragma once
KlineMiddleView.cpp
#include "StdAfx.h"
#include "Client.h"
#include "MainFrm.h"
#include <math.h>
#include "KlineMiddleView.h"
IMPLEMENT_DYNCREATE(CKlineMiddleView , CView)
CKlineMiddleView::CKlineMiddleView(void){}
CKlineMiddleView::~CKlineMiddleView(void){}
void CKlineMiddleView::OnDraw(CDC*)
{
this->KlinePaint();
}
BEGIN_MESSAGE_MAP(CKlineMiddleView, CView)
ON_WM_MOUSEWHEEL()
ON_WM_LBUTTONDOWN()
ON_WM_CREATE()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
CDC* pDC;
CRect rect;
CDC MemDC;
CBitmap MemBitmap;
BITMAP bm;
int m_Wheel=20;
int px,py,pxf,pxy = 0;
int ScreenHeight,ScreenWidth,ScreenCenter;
BOOL CKlineMiddleView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
m_Wheel += zDelta*0.01;
if(m_Wheel >=40) m_Wheel=40;
else if(m_Wheel <= 10) m_Wheel=10;
pDC = GetWindowDC();
int ShowWidth = bm.bmWidth*m_Wheel/10;
MemBitmap.GetBitmap(&bm);
pDC->StretchBlt(ScreenWidth- ShowWidth, 0, ShowWidth, bm.bmHeight,
&MemDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
return CView::OnMouseWheel(nFlags, zDelta, pt);
}
void CKlineMiddleView::OnLButtonDown(UINT nFlags, CPoint point)
{
CView::OnLButtonDown(nFlags, point);
}
int CKlineMiddleView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDoc* pDoc = (CClientDoc*)GetDocument();
pDoc->m_DataKLine=new KLINEDATA[100];
for(int i=0;i<100;i++)
{
pDoc->m_DataKLine[i].KOpenPrice = sin((double)i*0.2)*160;
pDoc->m_DataKLine[i].KClosePrice = pDoc->m_DataKLine[i].KOpenPrice + rand()%320 - 160;
pDoc->m_DataKLine[i].KHighestPrice = max(pDoc->m_DataKLine[i].KOpenPrice,pDoc->m_DataKLine[i].KClosePrice)*1.2;
pDoc->m_DataKLine[i].KLowestPrice = min(pDoc->m_DataKLine[i].KOpenPrice,pDoc->m_DataKLine[i].KClosePrice)*0.8;
}
return 0;
}
void CKlineMiddleView::OnMouseMove(UINT nFlags, CPoint point)
{
ScreenToClient(&point);
px = point.x ;
py = point.y ;
CView::OnMouseMove(nFlags, point);
}
void CKlineMiddleView::KlinePaint(void)
{
pDC = GetWindowDC();
pDC->GetClipBox(&rect);
pDC->FillSolidRect(rect, RGB(0,0,0));
ScreenHeight = rect.Height();
ScreenWidth = rect.Width();
ScreenCenter = ScreenWidth /2;
CClientDoc* pDoc = (CClientDoc*)GetDocument();
MemBitmap.DeleteObject();
MemDC.DeleteDC();
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,ScreenWidth,ScreenHeight);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(0,0,ScreenWidth,ScreenHeight,RGB(0,0,0));
int KWidth = ScreenWidth / 100;
int CLine = ScreenHeight/2;
for(int i=0;i<100;i++)
{
int xleftTop = KWidth*(i+1.2);
int xWidth = KWidth*0.6;
if(pDoc->m_DataKLine[i].KOpenPrice > pDoc->m_DataKLine[i].KClosePrice)
{
int yleftTop = CLine - pDoc->m_DataKLine[i].KOpenPrice;
int yHeight = pDoc->m_DataKLine[i].KOpenPrice - pDoc->m_DataKLine[i].KClosePrice;
MemDC.FillSolidRect(xleftTop,yleftTop,xWidth,yHeight,RGB(39,176,216));
CPen PenBlue(PS_SOLID,1,RGB(39,176,216));
CPen *oldPenx = MemDC.SelectObject(&PenBlue);
MemDC.MoveTo( xleftTop + xWidth/2 , CLine - pDoc->m_DataKLine[i].KHighestPrice);
MemDC.LineTo( xleftTop + xWidth/2 , CLine - pDoc->m_DataKLine[i].KLowestPrice);
}
else if(pDoc->m_DataKLine[i].KOpenPrice < pDoc->m_DataKLine[i].KClosePrice)
{
int yleftTop = CLine - pDoc->m_DataKLine[i].KClosePrice;
int yHeight = pDoc->m_DataKLine[i].KClosePrice - pDoc->m_DataKLine[i].KOpenPrice;
MemDC.FillSolidRect(xleftTop,yleftTop,xWidth,yHeight,RGB(255,74,102));
CPen PenRed(PS_SOLID,1,RGB(255,74,102));
CPen *oldPenx = MemDC.SelectObject(&PenRed);
MemDC.MoveTo( xleftTop + xWidth/2 , CLine - pDoc->m_DataKLine[i].KHighestPrice);
MemDC.LineTo( xleftTop + xWidth/2 , CLine - pDoc->m_DataKLine[i].KLowestPrice);
}
else
{
int yleftTop = CLine - pDoc->m_DataKLine[i].KOpenPrice;
int yHeight = 1;
MemDC.FillSolidRect(xleftTop,yleftTop,xWidth,yHeight,RGB(255,255,255));
CPen PenWhite(PS_SOLID,1,RGB(255,255,255));
CPen *oldPenx = MemDC.SelectObject(&PenWhite);
MemDC.MoveTo( xleftTop + xWidth/2 , CLine - pDoc->m_DataKLine[i].KHighestPrice);
MemDC.LineTo( xleftTop + xWidth/2 , CLine - pDoc->m_DataKLine[i].KLowestPrice);
}
int ShowWidth = bm.bmWidth*m_Wheel/10;
MemBitmap.GetBitmap(&bm);
pDC->StretchBlt(ScreenWidth- ShowWidth, 0, ShowWidth, bm.bmHeight,
&MemDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
}
}
void CKlineMiddleView::XlinePaint(void)
{
}
void CKlineMiddleView::XlineDel(void)
{
}