/*============================================================================*/
/*                                                                            */
/*                            C O P Y R I G H T                               */
/*                                                                            */
/*                       (C) Copyright 2006-2020 by                           */
/*                              Yang Guojun                                   */
/*                           All Rights Reserved                              */
/*                                                                            */
/*      The author assumes no responsibility for the use or reliability of    */
/*      his software.                                                         */
/*                                                                            */
/*============================================================================*/
////////////////////////////////////////////////////////////////////////////////
//                                  版权申明                                  //
//                         版权所有(C)2006-2020，杨国君                       //
//                                保留所有权利                                //
////////////////////////////////////////////////////////////////////////////////
/* ############################################################################################################################## */

#pragma once

#include "KChart.h"

namespace KClassless
{
	CKChart_API void	CreateChart();
	CKChart_API void	DestroyChart();
	CKChart_API bool	IsCreated();
/////////////////////////////////////////////////////////////////////////////
// 以下函数来自CChartWnd
	// 根据标识获得序号
	CKChart_API int	GetChartIndex(int nChartID);
	// 根据序号获得标识
	CKChart_API int	GetChartID(int nChartIndex);
	// 获得已Attach的次数
	CKChart_API int	GetChartCount();

	// 粘窗口，最基本形式
	CKChart_API int	Attach(HWND hWnd);
	// 粘窗口，并限制绘图区
	CKChart_API int	Attach(HWND hWnd, RECT rtClient);
	// 粘窗口，粘到对话框上, 给定控件句柄
	CKChart_API int	AttachDlg(HWND hDlg, HWND hCtrl);
	// 粘窗口，粘到对话框上，给定控件ID
	CKChart_API int	AttachDlg(HWND hDlg, UINT nCtrlID);

	// 卸窗口
	CKChart_API bool	Detach();
	CKChart_API bool	Detach(HWND hWnd);
	// 重绘
	CKChart_API void	ReDraw();
	CKChart_API void	ReDraw(HWND hWnd);
	CKChart_API void	ReDraw(int nChartIndex);
	//CKChart_API void	ReDraw(CChart *chart);

/////////////////////////////////////////////////////////////////////////////
//CKChart_API  以下函数来自CChart
	// 测试是否限制绘图区
	CKChart_API bool		IsRectConfined();
	// 设置是否限制绘图区
	CKChart_API void		SetRectConfined(bool confine);
	// 设置限制区域
	CKChart_API void		SetConfineRect(RECT ConfineRect);
	// 获取限制区域
	CKChart_API RECT		GetConfineRect();

	// 测试内部是否无数据
	CKChart_API bool		IsEmpty();

	// 测试是否响应鼠标键盘消息
	CKChart_API bool		IsReact();
	// 设置是否响应鼠标键盘消息
	CKChart_API void		SetReact(bool react);

	// 对SetWnd()设置的窗口句柄绘图
	CKChart_API void		OnDraw();
	// 对窗口句柄绘图
	CKChart_API void		OnDraw(HWND hWnd);
	// 对设备上下文绘图
	CKChart_API void		OnDraw(HDC hDC);
	// 在窗口上选择区域绘图
	CKChart_API void		OnDraw(HDC hDC, RECT destRect);
	// 在设备上下文对应的窗口上，选择区域绘图
	CKChart_API void		OnDraw(HWND hWnd, RECT destRect);

	// 单个的鼠标键盘消息，但不重绘，由用户根据返回值重绘
	CKChart_API bool		OnLButtonDown( HWND hWnd, POINT point, UINT ctrlKey );
	CKChart_API bool		OnLButtonUp( HWND hWnd, POINT point, UINT ctrlKey );
	CKChart_API bool		OnLButtonDblClk( HWND hWnd, POINT point, UINT ctrlKey );
	CKChart_API bool		OnMouseMove( HWND hWnd, POINT point, UINT ctrlKey );
	CKChart_API bool		OnMouseLeave( HWND hWnd, POINT point, UINT ctrlKey );
	CKChart_API bool		OnMouseWheel( HWND hWnd, POINT point, UINT ctrlKey );
	CKChart_API bool		OnContextMenu( HMENU hMenu, HWND hWnd, POINT point );
	CKChart_API bool		OnKeyDown( HWND hWnd, UINT key );

	// 响应消息，但不重绘，由用户根据返回值重绘
	CKChart_API bool		OnEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
	// 响应消息，在AutoRedraw为真情况下重绘
	CKChart_API void		Interactive(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

	// 设置图像标题
	CKChart_API void		SetTitle(TCHAR* title);
	// 设置显示图像标题
	CKChart_API void		SetTitleShow(bool show);
	// 设置图像标题颜色
	CKChart_API void		SetTitleColor(COLORREF color);
	// 设置标题字体
	CKChart_API void		SetTitleFont(LOGFONT logFont);
	// 获取背景颜色
	CKChart_API COLORREF	GetBkgndColor();
	// 设置背景颜色
	CKChart_API void		SetBkgndColor(COLORREF color);

	// 设置图像边框显示
	CKChart_API void		SetEdgeShow(bool bShow);


	// 设置各边保留宽度
	CKChart_API void		SetReservedMarginLeft(int margin);
	CKChart_API void		SetReservedMarginRight(int margin);
	CKChart_API void		SetReservedMarginTop(int margin);
	CKChart_API void		SetReservedMarginBottom(int margin);

	// 设置图像可以鼠标拖动
	CKChart_API void		SetDragEnable(int nIndex, bool enable);

	// 设置蜡烛图X轴数据范围
	CKChart_API void		SetXRange(int nIndex, double low, double high);
	// 设置蜡烛图Y轴数据范围
	CKChart_API void		SetYRange(int nIndex, double low, double high);

	// 添加单条K线
	CKChart_API int			AddKLine(TCHAR *name);
	// 活动k线条数
	CKChart_API int			GetKLineCount();
	// 删除单条K线
	CKChart_API void		RemoveKLine(TCHAR *name);
	// 添加单个k线框
	CKChart_API int			AddCandle(int nIndex, time_t tm0, double fOpen, double fClose, double fLowest, double fHighest, double fVolume, double fAmount);
	// 添加单个k线框，日期用字符串输入，其格式为fmt。日期格式参考C库函数strftime
	CKChart_API int			AddCandle(int nIndex, TCHAR* strTime, TCHAR* fmt, double fOpen, double fClose, double fLowest, double fHighest, double fVolume, double fAmount);
	// 添加移动平均线
	CKChart_API void		AddMALine(int nIndex, int nThAvg);	
	// 设置移动平均线的线宽
	CKChart_API void		SetMALineSize(int nIndex, int size);
	// 设置移动平均线是否显示
	CKChart_API void		SetMALineShow(int nIndex, bool show);

	// 设置Bollinger线的线宽
	CKChart_API void		SetBollingerLineSize(int nIndex, int size);
	// 设置Bollinger线是否显示
	CKChart_API void		SetBollingerLineShow(int nIndex, bool show);
	
	// 设置横轴的时间显示格式，参考C库函数strftime
	CKChart_API void		SetFmtTime(int nIndex, TCHAR *fmt);
	
	// 设置K线框是否填充 
	CKChart_API void		SetKFill(int nIndex, bool fill);
	// 设置K线上涨时颜色
	CKChart_API void		SetRiseColor(int nIndex, COLORREF cr);
	// 设置K线下跌是颜色
	CKChart_API void		SetFallColor(int nIndex, COLORREF cr);
	
	// 设置K线上下端线是否显示
	CKChart_API void		SetEndLineShow(int nIndex, bool show);
	// 设置最高线最低线是否显示
	CKChart_API void		SetPeakLineShow(int nIndex, bool show);

	// 设置k线框部分显示
	CKChart_API void		SetPartiallyShow(int nIndex, bool part);
	// 设置k线框最大显示个数
	CKChart_API void		SetMaxKCandlesShow(int nIndex, int nMaxKCandles);

	// 设置趋势线
	CKChart_API int			SetTrendLine(int nIndex, TCHAR *strTime1, TCHAR *strTime2, TCHAR *fmt, int width, int alpha, COLORREF cr, bool bRise, bool bThrough);
	// 删除趋势线
	CKChart_API void		DeleteTrends(int nIndex);
	// 添加缺口
	CKChart_API int			AddGap(int nIndex, TCHAR *strTime, TCHAR *fmt, int nWidth, bool bWide, COLORREF crEdge, COLORREF crText);
	// 删除缺口
	CKChart_API void		DeleteGaps(int nIndex);
	// 添加买卖标识
	CKChart_API int			AddIOFlag(int nIndex, TCHAR *strTime, TCHAR *fmt, bool bIn, COLORREF crFill, COLORREF crArrow);
	// 删除买卖标识
	CKChart_API void		DeleteIOFlags(int nIndex);

	// 添加单个指标
	CKChart_API int			AddIndicator(TCHAR *name);
	// 指标个数
	CKChart_API int			GetIndicatorCount();
	// 删除单个指标
	CKChart_API void		RemoveIndicator(TCHAR *name);

	// 获得是否绘制信息托盘
	CKChart_API bool		IsInfoPadShow(int nIndex);
	// 设置是否绘制信息托盘
	CKChart_API void		SetInfoPadShow(int nIndex, bool show);
	// 获得信息托盘背景颜色
	CKChart_API COLORREF	GetInfoPadBkColor(int nIndex);
	// 设置信息托盘背景颜色
	CKChart_API void		SetInfoPadBkColor(int nIndex, COLORREF color);

	// 设置K线移动时的速度
	CKChart_API void		SetMoveSpeed(float speed);
}
