摘要:
添加工具条id :IDR_TOOLDRAWLINE
添加·工具条id和对应的图片文件的对应关系:
IDR_REPLAY BITMAP "res\\playback.bmp"
添加工具条的视图布局
添加工具条每个按钮的ID
第一部分 新增加一个画线工具资源IDR_TOOLDRAWLINE
step 1:在Resource.h里面的添加一个ID值,IDR_TOOLDRAWLINE
src/Client/StkUI/resource.h
/*************custom extend by freema*******/
#define IDD_SETSYSTEMSET1 300
#define IDR_REPLAY 301
#define IDR_TOOLDRAWLINE 304
/*****************************************/
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"
IDR_TOOLDRAWLINE BITMAP "res\\playback.bmp"
/*****************************************/
改为
IDR_TOOLDRAWLINE BITMAP "res\\tooldrawline.bmp"
step 3:添加工具条视图
G:\stock\TskingVS2019\src\Client\StkUI\StkUI.rc
IDR_TOOLDRAWLINE 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
至此,在资源视图可见定义的工具条了。
IDR_LINETOOL TOOLBAR 15, 15
BEGIN
BUTTON ID_BEGIN_LINE
BUTTON ID_XIAN_DUAN
BUTTON ID_PING_XING
BUTTON ID_SHUI_PING
BUTTON ID_QU_SHI
BUTTON ID_GAN_SHI
BUTTON ID_HUANG_JIN_HU
BUTTON ID_SU_DU
BUTTON ID_SHAN_XING
BUTTON ID_BO_DUAN
BUTTON ID_BAI_FEN_BI
BUTTON ID_HUANG_JIN
BUTTON ID_HUI_GUI
BUTTON ID_HUI_GUI_DAI_2
BUTTON ID_HUI_GUI_DAI_1
BUTTON ID_NA_QI
BUTTON ID_ZHOU_QI
BUTTON ID_DOWN_ARROW
BUTTON ID_UP_ARROW
BUTTON ID_TEXT_KIND
BUTTON ID_RECT_KIND
BUTTON ID_DELETE_LINE
END
step 3:菜单
添加对工具条单个按钮的ID
/*************custom extend 工具条 by freema*******/
#define ID_BEGIN_LINE 35100+ 699
#define ID_XIAN_DUAN 35100+700
#define ID_SHUI_PING 35100+ 701
#define ID_QU_SHI 35100+ 702
#define ID_PING_XING 35100+ 703
#define ID_SU_DU 35100+ 704
#define ID_SHAN_XING 35100+ 705
#define ID_GAN_SHI 35100+ 706
#define ID_HUANG_JIN 35100+ 707
#define ID_BO_DUAN 35100+ 708
#define ID_BAI_FEN_BI 35100+ 709
#define ID_HUI_GUI 35100+ 710
#define ID_HUI_GUI_DAI_1 35100+ 711
#define ID_HUI_GUI_DAI_2 35100+ 712
#define ID_ZHOU_QI 35100+ 713
#define ID_NA_QI 35100+ 714
#define ID_ZHONG_XIAN 35100+ 715
#define ID_NA_QI_HU 35100+ 716
#define ID_HUANG_JIN_HU 35100+ 717
#define ID_UP_ARROW 35100+ 718
#define ID_DOWN_ARROW 35100+ 719
#define ID_RECT_KIND 35100+ 720
#define ID_TEXT_KIND 35100+ 721
#define ID_DELETE_LINE 35100+ 722
/*****************************************/
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
/*****************************************/
第二部分 StkUI:添加画线工具 -添加工具条菜单
step 1:添加菜单ID
G:\stock\TskingVS2019\src\Client\StkUI\resource.h
//custom extend 画线工具by freeman
#define ID_TOOL_DRAWLINE 34597
//custom extend by freeman
step 2:添加菜单项目
G:\stock\TskingVS2019\src\Client\StkUI\StkUI.rc
MENUITEM SEPARATOR
MENUITEM "计算器(&C)...", ID_TOOL_CALCULATOR
MENUITEM "记事本(&N)...", ID_TOOL_NOTE
MENUITEM "自定义画线工具", ID_TOOL_DRAWLINE //custom extend 画线工具 by freeman
MENUITEM SEPARATOR
MENUITEM "基本资料和行情选股(&F)...", ID_TOOL_FILTERINFO
MENUITEM "自定义智能选股器", ID_VIEW_CUSTOMSELECTOR
第三部分 StkUI:添加画线工具 -添加菜单点击处理事件
添加菜单点击的对应处理函数
src/Client/StkUI/MainFrm.cpp
/**** extend 系统设置、行情回放、历史行情菜单项 画线工具 by freeman ****/
ON_COMMAND(ID_VIEW_REPLAYREALTIME, OnViewRePlayRealtime)
ON_UPDATE_COMMAND_UI(ID_VIEW_REPLAYREALTIME, OnUpdateViewRePlayRealtime)
//画线工具
ON_COMMAND(ID_TOOL_DRAWLINE, OnToolDrawLine)
ON_UPDATE_COMMAND_UI(ID_TOOL_DRAWLINE, OnUpdateToolDrawLine)
添加消息定义
src/Client/StkUI/MainFrm.h
//画图工具
afx_msg void OnToolDrawLine();
afx_msg void OnUpdateToolDrawLine(CCmdUI* pCmdUI);
/**************************************/
添加消息的实现函数
src/Client/StkUI/MainFrm.cpp
//画线工具
void CMainFrame::OnToolDrawLine()
{
}
void CMainFrame::OnUpdateToolDrawLine(CCmdUI* pCmdUI)
{
}
第四部分 StkUI:添加画线工具 main.cpp 创建工具条窗口
step 1:在MainFrm.cpp中添加对HistoryRealtimeView.h类的引用
step 2:在MainFrm.h中定义子窗口变量和窗口创建函数
G:\stock\TskingVS2019\src\Client\StkUI\MainFrm.h
/*****custom extend 播放工具条、画线工具**********/
CToolBar m_wndPlaybackBar;
//画线工具
CToolBar m_wndToolDrawLineBar;
/************end********************/
/*****custom extend 播放工具条**********/
BOOL CreatePlaybackBar();
//画线工具
BOOL CreateToolDrawLineBar();
/**********************/
添加实现函数
src/Client/StkUI/MainFrm.cpp
//画线工具
BOOL CMainFrame::CreateToolDrawLineBar()
{
if (!m_wndToolDrawLineBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, CRect(0, 0, 0, 0), IDW_PERIODBAR)
|| !m_wndToolDrawLineBar.LoadToolBar(IDR_TOOLDRAWLINE))
{
TRACE0("Failed to create periodbar\n");
return FALSE; // fail to create
}
#if 0
CString strBarTitle;
strBarTitle.LoadString(IDS_TITLE_PERIODBAR);
m_wndPeriodBar.SetWindowText(strBarTitle);
#endif
return TRUE;
}
在主程序中创建窗口
G:\stock\TskingVS2019\src\Client\StkUI\MainFrm.cpp
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CTskMainFrame::OnCreate(lpCreateStruct) == -1)
return -1;
...
// Create ToolBars
if (!CreateMainBar() || !CreateSListBar() || !CreateSimuBar()/*|| !CreateStatusBar()*/
|| !CreateWorkspBar()
|| !CreatePlaybackBar() || !CreateToolDrawLineBar())
{
return -1; // failed to create
}
..
}
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:添加画图工具类ToolDrawLine
先准备函数
StkUI:G:\stock\TskingVS2019\src\Client\StkUI\View\ToolDrawLine.h
StkUI:G:\stock\TskingVS2019\src\Client\StkUI\View\ToolDrawLine.cpp
// ToolDrawLine.h : interface of the CToolDrawLine class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_TOOLDRAWLINE_H__INCLUDED_)
#define AFX_TOOLDRAWLINE_H__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/***
画图工具类,负责画出画线数据的所有部分
*/
class CToolDrawLine
{
public:
CToolDrawLine( );
virtual ~CToolDrawLine( );
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_TOOLDRAWLINE_H__INCLUDED_)
第三部份 修改功能
添加在日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
/**************************************/