思路:
1.在StockINfo中增加一个变量,日K线按回车则将K线日期存入变量。
2.在StockINfo中增加一个变量,如果该变量的值为年月日的日期值,则DzhProvider.cpp读取历史分笔数据。
1.StkUI:HistoryRealTimeView:复制RealTimeView并改名为HistoryRealTimeView
2.StkUI:HistoryRealTimeView:修改类名、两个函数名和一个变量,编译通过
第一部分 在主菜单中添加历史行情菜单
G:\stock\TskingVS2019\src\Client\StkUI\resource.h
/* *** extend 历史行情 by freeman ****/
#define ID_VIEW_HISTORYREALTIME 34594
/**************************************/
/*extend 行情回放 start */
MENUITEM "历史行情", ID_VIEW_HISTORYREALTIME //Extend by freeman
/*extend end*/
第二部分 启用历史行情
step 1:在MainFrm.cpp中添加对HistoryRealtimeView.h类的引用
/**** extend 系统设置、行情回放菜单项 by freeman ****/
#include "Dialog/SetSystemSet1.h"
#include "View/PlayBackView.h"
#include "View/HistoryRealtimeView.h"
/**************************************/
step 2:在MainFrm.h中定义消息映射关系
G:\stock\TskingVS2019\src\Client\StkUI\MainFrm.h
/**** extend 系统设置、行情回放、历史行情菜单项 by freeman ****/
afx_msg void OnViewPlayback();
afx_msg void OnUpdateViewPlayback(CCmdUI* pCmdUI);
afx_msg void OnOptionSystemset();
afx_msg void OnViewHistoryRealtime();
afx_msg void OnUpdateViewHistoryRealtime(CCmdUI* pCmdUI);
/**************************************/
在主程序中添加点击菜单后生成的消息和对应的消息处理函数
/**** extend 系统设置、行情回放、历史行情菜单项 by freeman ****/
ON_COMMAND(ID_VIEW_HISTORYREALTIME, OnViewHistoryRealtime)
ON_COMMAND(ID_VIEW_PLAYBACK, OnViewPlayback)
ON_UPDATE_COMMAND_UI(ID_VIEW_PLAYBACK, OnUpdateViewPlayback)
/**************************************/
D:\temp\stock\k-line-print-master\client\cnmarket\StkUI\AfxCore.inl
_AFXCORE_INLINE CRealTimeView * AfxGetRealTimeView( )
{
CStaticDoc * pStaticDoc = AfxGetStaticDoc();
return (CRealTimeView *)( pStaticDoc->GetViewIfExist(RUNTIME_CLASS(CRealTimeView)) );
}
第二部分 添加历史行情视图
先准备函数
StkUI:HistoryRealTimeView:在StkUI\AfxCore.inl中添加 AfxGetHistoryRealTimeView()
StkUI:HistoryRealTimeView:在StkUI\AfxCore.inl中添加 AfxShowStockHistoryRealTimeView()
第三部份 修改功能
添加在日K线按回车进入历史行情界面的功能
step 1: 在日K线按回车时判断,是否进入历史行情界面的功能
src/Client/StkUI/View/StockGraph.cpp
/按回车键查看历史行情
void CStockGraph::OnReturn(BOOL bShiftPressed, BOOL bCtrlPressed)
{
/*****custom extend start 回车键处理 by freeman 2019/06/08****/
if (m_nIndexCurrent >= 0)
{
CKData& kdata = m_CurStock.GetKData(m_nCurKType);
if (m_nIndexCurrent < kdata.GetSize())
{
//获取回车选择的历史K线日期
DWORD date = kdata.ElementAt(m_nIndexCurrent).m_date;
//填入股票信息变量
CStockInfo info;
info=m_CurStock.GetStockInfo();
info.m_dateHistoryReport = date;
//设置当前股票的被选择的K线日期
AfxGetSListStockContainer().m_nCurrentStockKDataSelectedDate= date;
//在股票信息中填入收盘价
if (m_nIndexCurrent >= 1)
info.m_fLast = kdata.ElementAt(m_nIndexCurrent - 1).m_fClose;
m_CurStock.SetStockInfo(&info);
}
}
src/Client/StkUI/View/StockGraph.cpp
void CStockGraph::OnReturn(BOOL bShiftPressed, BOOL bCtrlPressed)
{
/*****custom extend start 回车键处理 by freeman 2019/06/08****/
BOOL bInTrade = CSPTime::InTradeTime(CSPTime::GetCurrentTime().GetTime(), 900);
if (m_nIndexCurrent >= 0&& bInTrade)
{
/*****custom extend start 回车键处理 by freeman 2019/06/08****/
{
AfxSwitchToStaticView(RUNTIME_CLASS(CRealTimeView));
CRealTimeView* pView = AfxGetRealTimeView();
if (pView)
pView->ChangeDrawMode(CRealTime::modePriceLine);
}
/**********custom extend end-********************************/
}
else
{
{
AfxSwitchToStaticView(RUNTIME_CLASS(CHistoryRealTimeView));//历史行情
CHistoryRealTimeView* pView = AfxGetHistoryRealTimeView();
if (pView)
pView->ChangeDrawMode(CHistoryRealTime::modePriceLine);
}
}
/**********custom extend end-********************************/
3.2 添加选择的日K线日期变量
3.3 将日期变量存入股票容器中,以便历史行情视图获取。
G:\stock\TskingVS2019\src\Client\StkLib\Src\Stock.cpp
CStockInfo& CStockInfo::operator = (const CStockInfo& si)
{
m_dwMarket = si.m_dwMarket;
memcpy(m_szCode, si.m_szCode, sizeof(m_szCode));
....
/********custom extend 获取回车选择的历史K线日期;*********************/
m_dateHistoryReport = si.m_dateHistoryReport;
/********end*******************/
....
}
m_stockinfo = *pInfo;需要做上面的修改,m_dateHistoryReport才会被赋值。
BOOL CStock::SetStockInfo(CStockInfo * pInfo)
{
if (NULL == pInfo)
{
Clear();
return FALSE;
}
if (m_stockinfo.IsEqualTo(pInfo->GetMarket(), pInfo->GetStockCode()))
{
m_stockinfo = *pInfo;
return m_stockinfo.IsValidStock();
}
Clear();
m_stockinfo = *pInfo;
return m_stockinfo.IsValidStock();
}
G:\stock\TskingVS2019\src\Client\StkLib\Src\DzhProvider.cpp
CDzhProvider根据m_dateHistoryReport读取历史分笔文件
//当前目录
if (pInfo->IsShenZhen())
{
strPrpFileName.Format(dzh_sz_prp, pInfo->m_dateHistoryReport);
sFileName += strPrpFileName;
}
else
{
strPrpFileName.Format(dzh_sh_prp, pInfo->m_dateHistoryReport);
sFileName += strPrpFileName;
}
CSPFile file;
//按年存放的历史分笔文件
if (!file.Open(sFileName, CSPFile::modeRead))
{
if (pInfo->IsShenZhen())
{
strPrpFileName.Format(dzh_yyyy_sz_prp, pInfo->m_dateHistoryReport/10000,pInfo->m_dateHistoryReport);
sFileName = strPrpYYYYDirectory+ strPrpFileName;
}
else
{
strPrpFileName.Format(dzh_yyyy_sh_prp, pInfo->m_dateHistoryReport / 10000, pInfo->m_dateHistoryReport);
sFileName = strPrpYYYYDirectory+ strPrpFileName;
}
}
3.2 修改改窗口标题
/* *** extend 历史行情 by freeman ****/
#define IDS_TITLE_HISTORYREALTIMEVIEW 46000
/**************************************/