\src\Client\StkUI\View\RePlayRealTimeView.cpp
思路:
1.增加行情回放视图\src\Client\StkUI\View\RePlayRealTimeView.cpp
2.增加播放控制工具条资源IDR_REPLAY ToolBar
第一部分 新增加一个工具条资源IDR_REPLAY ToolBar
step 1:在Resource.h里面的添加一个ID值,IDR_REPLAY
因前面手工直接修改代码,Resource.h里面的下一个ID值设置未改,vs创建时乱套了。
src/Client/StkUI/resource.h
/*************custom extend by freema*******/
#define IDD_SETSYSTEMSET1 300
#define IDR_REPLAY 301
/*****************************************/
在Resource.h里面的修改下一个ID值设置
#ifdef APSTUDIO_INVOKED
//下一个控件ID值 by freeman
#define _APS_NEXT_RESOURCE_VALUE 302
//下一个视图ID值 by feeman
#define _APS_NEXT_COMMAND_VALUE 34595
#define _APS_NEXT_CONTROL_VALUE 1325
#define _APS_NEXT_SYMED_VALUE 101
#endif
toolbar属于资源,所以在RC目录中右击,添加资源-->toolbar--->新建IDR_REPLAY,新建的位图放在G:\stock\TskingVS2019\src\Client\StkUI\res目录下,名称为toolbar1,新建 的位图一般不美观,用其他画图工具做好16X16或32X32宽度的图片备用,关闭程序,删除rec目录下的toolbar1.bmp图片,然后再打开程序,此时会提示找不到toolbar1.bmp图片,按取消关闭,再把创建好的图片放在rec目录下,替换原来的toolbar1.bmp图片。此时再打开程序就是新的图片
step 2:指定IDR_REPLAY 的图片资源
G:\stock\TskingVS2019\src\Client\StkUI\StkUI.rc
IDB_SPLASH BITMAP "res\\splash.bmp"
/*************custom extend 工具条 by freema*******/
IDR_REPLAY BITMAP "res\\playback.bmp"
/*****************************************/
step 3:菜单
添加对工具条单个按钮的ID定义
/*************custom extend 工具条 by freema*******/
#define ID_PLAYBACK_BEGIN 35779
#define ID_PLAYBACK_REV 35780
#define ID_PLAYBACK_FASTREV 35781
#define ID_PLAYBACK_PAUSE 35782
#define ID_PLAYBACK_FORWARD 35783
#define ID_PLAYBACK_FASTFW 35784
#define ID_PLAYBACK_END 35785
#define ID_PLAYBACK_STOP 35786
/*****************************************/
G:\stock\TskingVS2019\src\Client\StkUI\StkUI.rc
/*************custom extend 工具条 by freema*******/
IDR_REPLAY TOOLBAR 16, 15
BEGIN
BUTTON ID_PLAYBACK_BEGIN
BUTTON ID_PLAYBACK_FASTREV
BUTTON ID_PLAYBACK_REV
BUTTON ID_PLAYBACK_STOP
BUTTON ID_PLAYBACK_PAUSE
BUTTON ID_PLAYBACK_FORWARD
BUTTON ID_PLAYBACK_FASTFW
BUTTON ID_PLAYBACK_END
END
/*****************************************/
第二部分 MFC添加工具条(Toolbar)按钮并加入事件
1.首先切换到资源视图,编辑最后一个灰色的按钮,我画的图案是一个红色的1。现在运行按钮是灰色的说明没有添加事件。
2.资源视图,点击新建的1按钮,属性视图,改变ID为ID_MyButton。
3.为ID_MyButton,添加ON_COMMAND的绑定,同时添加对应的函数,这样再点击按钮,就可以调用ON_COMMAND绑定
的函数了。
在RePlayRealTimeView.cpp视图中加入按钮消息处理事件
G:\stock\TskingVS2019\src\Client\StkUI\View\RePlayRealTimeView.h
/*************custom extend 工具条 by freema*******/
afx_msg void OnPlaybackBegin();
afx_msg void OnPlaybackEnd();
afx_msg void OnPlaybackForward();
afx_msg void OnPlaybackPause();
afx_msg void OnPlaybackFastfw();
afx_msg void OnPlaybackFastrev();
afx_msg void OnPlaybackStop();
/*****************************************/
G:\stock\TskingVS2019\src\Client\StkUI\View\RePlayRealTimeView.cpp
/*************custom extend 工具条 by freema*******/
ON_COMMAND(ID_PLAYBACK_BEGIN, OnPlaybackBegin)
ON_COMMAND(ID_PLAYBACK_END, OnPlaybackEnd)
ON_COMMAND(ID_PLAYBACK_FORWARD, OnPlaybackForward)
ON_WM_TIMER()
ON_COMMAND(ID_PLAYBACK_PAUSE, OnPlaybackPause)
ON_COMMAND(ID_PLAYBACK_FASTFW, OnPlaybackFastfw)
ON_COMMAND(ID_PLAYBACK_FASTREV, OnPlaybackFastrev)
ON_COMMAND(ID_PLAYBACK_STOP, OnPlaybackStop)
/*****************************************/
在RePlayRealTimeView.cpp添加点击播放按钮消息的实现函数
G:\stock\TskingVS2019\src\Client\StkUI\View\RePlayRealTimeView.cpp
void CRePlayRealTimeView::OnPlaybackBegin()
{
}
void CRePlayRealTimeView::OnPlaybackEnd()
{
}
void CRePlayRealTimeView::OnPlaybackForward()
{
}
void CRePlayRealTimeView::OnPlaybackPause()
{
}
void CRePlayRealTimeView::OnPlaybackFastfw()
{
}
void CRePlayRealTimeView::OnPlaybackFastrev()
{
KillTimer(RTV_TIMER_REPLAYREFRESH);
m_timer = m_timer - 500;
if (m_timer <= 0)
m_timer = 100;
SetTimer(RTV_TIMER_REPLAYREFRESH, m_timer, NULL);
}
void CRePlayRealTimeView::OnPlaybackStop()
{
}
第二部分 启用行情播放工具条
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线按回车进入历史行情界面的功能
3.1 在日K线按回车时判断,是否进入历史行情界面的功能
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();
}
3.2 修改改窗口标题
/* *** extend 历史行情 by freeman ****/
#define IDS_TITLE_HISTORYREALTIMEVIEW 46000
/**************************************/