?? klineview.cpp
字號:
// KLineView.cpp : CKLineView 類的實現
//
#include "stdafx.h"
#include "KLine.h"
#include "KLineDoc.h"
#include "KLineView.h"
#include "MainFrm.h"
#include ".\klineview.h"
#include ".\klinedata.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CKLineView
IMPLEMENT_DYNCREATE(CKLineView, CView)
BEGIN_MESSAGE_MAP(CKLineView, CView)
// 標準打印命令
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
// ON_WM_PAINT()
ON_WM_SIZE()
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
END_MESSAGE_MAP()
// CKLineView 構造/析構
CKLineView::CKLineView()
: m_pKLineObj(NULL)
{
// TODO: 在此處添加構造代碼
}
CKLineView::~CKLineView()
{
if (m_pKLineObj!=NULL)
{
delete m_pKLineObj;
m_pKLineObj = NULL;
}
}
BOOL CKLineView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此處通過修改 CREATESTRUCT cs 來修改窗口類或
// 樣式
return CView::PreCreateWindow(cs);
}
// CKLineView 繪制
void CKLineView::OnDraw(CDC* /*pDC*/)
{
CKLineDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此處為本機數據添加繪制代碼
}
// CKLineView 打印
BOOL CKLineView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默認準備
return DoPreparePrinting(pInfo);
}
void CKLineView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印前添加額外的初始化
}
void CKLineView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印后添加清除過程
}
// CKLineView 診斷
#ifdef _DEBUG
void CKLineView::AssertValid() const
{
CView::AssertValid();
}
void CKLineView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CKLineDoc* CKLineView::GetDocument() const // 非調試版本是內聯的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CKLineDoc)));
return (CKLineDoc*)m_pDocument;
}
#endif //_DEBUG
// CKLineView 消息處理程序
void CKLineView::OnInitialUpdate()
{
CView::OnInitialUpdate();
}
void CKLineView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
RECT viewrect;
this->GetClientRect(&viewrect);
if (m_pKLineObj)
{
m_pKLineObj->MoveWindow(0,0,viewrect.right,viewrect.bottom);
}
}
void CKLineView::OnFileOpen()
{
CMap<int,int,IndividualTransaction,IndividualTransaction&> myMap;
int i;
myMap.InitHashTable( 1800 * 300 * 5 );
// Add 10 elements to the map.
for (i=0;i<1800 * 300 * 5;i++)
{
IndividualTransaction indiviTrans;
indiviTrans.Time = (CTime(2007,10,10,1,1,1)).GetTime();
indiviTrans.Price = 10;
indiviTrans.Volume = 10;
indiviTrans.Amount = 10;
indiviTrans.SP1 = 10;
indiviTrans.SP2 = 10;
indiviTrans.SP3 = 10;
indiviTrans.SV1 = 10;
indiviTrans.SV2 = 10;
indiviTrans.SV3 = 10;
indiviTrans.BP1 = 10;
indiviTrans.BP2 = 10;
indiviTrans.BP3 = 10;
indiviTrans.BV1 = 10;
indiviTrans.BV2 = 10;
indiviTrans.BV3 = 10;
indiviTrans.IsBuy = false;
myMap[i] =indiviTrans;
}
CFileDialog dlg(true,"day",".day",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,"日K數據(*.day)|*.day|所有文件(*.*)|*.*||");
if (dlg.DoModal()==IDOK)
{
CString filename = dlg.GetPathName();
CFile file;
CFileException e;
BYTE timebuff[0x20];
if (file.Open(filename,CFile::modeRead|CFile::shareDenyNone,&e))
{
if (m_pKLineObj!=NULL)
{
delete m_pKLineObj;
m_pKLineObj = NULL;
}
RECT viewrect;
this->GetClientRect(&viewrect);
m_pKLineObj = new CKLineObject();
m_pKLineObj->Create(NULL,NULL,NULL,viewrect,this,1,NULL);//CRect(40,20,220,240)
m_pKLineObj->CreateGraph(GT_2DKLINE);
int i =1;
long dwBytesRamaining = (long)file.GetLength();
while(dwBytesRamaining && i>0)
{
UINT nBytesRead = file.Read(timebuff,sizeof(timebuff));
int t= timebuff[0]|timebuff[1]<<8|timebuff[2]<<16|timebuff[3]<<24;
double start = (double)(timebuff[4]|timebuff[5]<<8|timebuff[6]<<16|timebuff[7]<<24)/100;
double max = (double)(timebuff[8]|timebuff[9]<<8|timebuff[10]<<16|timebuff[11]<<24)/100;
double min = (double)(timebuff[12]|timebuff[13]<<8|timebuff[14]<<16|timebuff[15]<<24)/100;
double end = (double)(timebuff[16]|timebuff[17]<<8|timebuff[18]<<16|timebuff[19]<<24)/100;
CTime time = CTime(t/10000,t%10000/100,t%100,0,0,0);
m_pKLineObj->SetC2DKLineGraphValue(time.GetTime(),start,max,min,end);
dwBytesRamaining -= nBytesRead;
i--;
}
}
else
{
e.ReportError();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -