策略为王源代码扩展系列-K线图(5)-为K线图添画线工具

Published

摘要:

添加工具条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
/**************************************/