RealTime.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:7k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. // RealTime.h : interface of the CRealTime class
  2. //
  3. /////////////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_REALTIME_H__0A8D66A9_30E0_4AAA_8E17_06B721FC0E97__INCLUDED_)
  5. #define AFX_REALTIME_H__0A8D66A9_30E0_4AAA_8E17_06B721FC0E97__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. /***
  10. 画图类,负责画出分时行情图中的所有部分
  11. */
  12. class CRealTime
  13. {
  14. public:
  15. CRealTime( );
  16. virtual ~CRealTime( );
  17. enum DrawMode {
  18. modePriceLine = 0x01, // 分时价格线
  19. modeReportDetail = 0x02, // 每笔成交明细
  20. modeMinuteDetail = 0x03, // 分钟成交明细
  21. modeBigTradeDetail = 0x04, // 大单成交明细
  22. };
  23. enum TechLine {
  24. techNone = 0x00,
  25. techLBDK = 0x01,
  26. techMMLD = 0x02
  27. };
  28. enum ReportWhat {
  29. reportNone = 0x00,
  30. reportQuote = 0x01,
  31. reportPrice = 0x02,
  32. reportMinute = 0x03,
  33. reportBuySellEx = 0x04,
  34. reportValue = 0x05,
  35. reportDistribute= 0x06,
  36. reportBigTrade = 0x07,
  37. };
  38. // 设定父窗口,以便在父窗口区域内画图线
  39. void SetParent( CWnd * pParent );
  40. // 设定边框大小
  41. void ResetMargins( int nMarginTop = 19, int nMarginLeft = 60,
  42. int nMarginCenter = 45, int nMarginBottom = 19,
  43. int nGapYAxis = 18, int nWidthReport = 200 );
  44. // 清除当前股票及数据
  45. void ClearCurStock( );
  46. // 设定当前要画的股票
  47. BOOL SetCurStock( const char * szCode );
  48. BOOL SetCurStock( CStockInfo & info );
  49. CStock & GetCurStock( ) { return m_CurStock; }
  50. BOOL PrepareStockData( ); // 准备股票数据
  51. // 画图属性
  52. void SetDrawMode( int nDrawMode = modePriceLine, int nTechLine = techNone, int nReportWhat = CRealTime::reportQuote );
  53. int GetDrawMode( );
  54. int GetDrawTechLine( );
  55. int GetReportWhat( );
  56. // 刷新实时行情数据
  57. LRESULT OnStkReceiverData( WPARAM wParam, LPARAM lParam );
  58. // 重画
  59. void Redraw( CDC * pDC, CRect rectAll );
  60. void DrawReportRegion( CDC * pDC );
  61. public:
  62. //////////////////////////////////////////////////////////
  63. // modePriceLine 焦点移动,按左、右键移动
  64. void MoveLeft( BOOL bShiftPressed = FALSE );
  65. void MoveRight( BOOL bShiftPressed = FALSE );
  66. void MoveUp( BOOL bShiftPressed = FALSE );
  67. void MoveDown( BOOL bShiftPressed = FALSE );
  68. void MoveHome( BOOL bShiftPressed = FALSE );
  69. void MoveEnd( BOOL bShiftPressed = FALSE );
  70. void MoveTo( int nIndex, BOOL bShiftPressed, BOOL bCtrlPressed );
  71. void Move( int nMove, BOOL bShiftPressed, BOOL bCtrlPressed );
  72. void OnLButtonDown( UINT nFlags, CPoint point, BOOL bShiftPressed, BOOL bCtrlPressed );
  73. void OnLButtonDblClk( UINT nFlags, CPoint point );
  74. void ResetIndexCurrent( int nIndexCurrent = -1 );
  75. //////////////////////////////////////////////////////////
  76. //////////////////////////////////////////////////////////
  77. // modeReportDetail, modeMinuteDetail, modeBigTradeDetail 明细使用
  78. void PageUp( );
  79. void PageDown( );
  80. //////////////////////////////////////////////////////////
  81. protected:
  82. //////////////////////////////////////////////////////////
  83. // modePriceLine 分时价格线使用
  84. void ResetClient( CRect rectAll ); // 重新设定整图区域
  85. BOOL AddIndexCurrent( int nIndex );
  86. void OnIndexCurrentChanged( );
  87. void DrawSelectionLine( CDC * pDC, BOOL bAddOrRemove );
  88. void DrawDateAxis( CDC * pDC ); // 画时间轴
  89. BOOL GetMinMaxInfo( double* pdLastClose, double *pdMin, double *pdMax, double *pdMaxVolume, BOOL bUptoAxis ); // 得到最高最低成交价格、最高成交量
  90. void DrawPriceVolume( CDC * pDC ); // 画价格线和成交量线
  91. void DrawMMLD( CDC * pDC ); // 画买卖力道指标
  92. void DrawLBDK( CDC * pDC ); // 画量比多空指标
  93. int DrawBuySell( CDC * pDC, int xStart, int yStart, int nWidth ); // 画报价信息
  94. int DrawBuySellEx( CDC * pDC, int xStart, int yStart, int nWidth ); // 画扩充盘报价信息
  95. void DrawReportQuote( CDC * pDC ); // 画报价信息、成交明细
  96. void DrawReportPrice( CDC * pDC ); // 画报价信息、分价表
  97. void DrawReportMinute( CDC * pDC ); // 画报价信息、分钟成交明细
  98. void DrawReportBuySellEx( CDC * pDC ); // 画报价信息、扩充买卖盘
  99. void DrawReportValue( CDC * pDC ); // 画报价信息、价格信息
  100. void DrawReportDistribute( CDC * pDC ); // 画成交分布
  101. void DrawReportBigTrade( CDC * pDC ); // 画大单成交信息
  102. BOOL LoadReportBigTrade( ); // 读取保存的大单成交信息
  103. //////////////////////////////////////////////////////////
  104. //////////////////////////////////////////////////////////
  105. // modeReportDetail, modeMinuteDetail, modeBigTradeDetail 明细使用
  106. int GetColumnPerPage( CRect rectAll );
  107. int GetCountPerColumn( CRect rectAll );
  108. int CheckValidStartPos( int nStartPosOld, int nTotalCount, int nPageCount, BOOL bAlignBegin );
  109. void DrawReportDetail( CDC * pDC );
  110. void DrawReportColumn( CDC * pDC, CStockInfo & info, CReport & aReport, int nStartPos, int nMaxCount, CRect rect );
  111. void DrawMinuteDetail( CDC * pDC );
  112. void DrawMinuteColumn( CDC * pDC, CStockInfo & info, CMinute & aMinute, int nStartPos, int nMaxCount, CRect rect );
  113. void DrawBigTradeDetail( CDC * pDC );
  114. void DrawBigTradeColumn( CDC * pDC, CReport & aMinute, int nStartPos, int nMaxCount, CRect rect );
  115. //////////////////////////////////////////////////////////
  116. protected:
  117. // Attributes
  118. int m_nMarginTop; // 上边空白
  119. int m_nMarginLeft; // 左边空白
  120. int m_nMarginCenter; // 中间空白
  121. int m_nMarginBottom; // 下边空白
  122. int m_nGapYAxis; // 纵坐标格线高度
  123. int m_nWidthReport; // 右边信息栏宽度
  124. CWnd * m_pParent; // 父窗口
  125. CStock m_CurStock; // 当前股票
  126. CRect m_rectAll; // 整个Rect
  127. int m_nDrawMode; // See CRealTime::DrawMode,标记当前画分时价格线、成交明细等
  128. // modePriceLine use
  129. CRect m_rectPrice; // 价格Rect
  130. CRect m_rectVolume; // 成交量Rect
  131. CRect m_rectLBDK; // 量比(多空)指标
  132. CRect m_rectMMLD; // 买卖力道,总买盘减总卖盘
  133. CRect m_rectReport; // 买卖信息及成交明细Rect
  134. int m_nIndexCurrent; // 当前选中的序号
  135. CUIntArray m_anIndexCurrent; // 当前多个选中的序号
  136. int m_nTechLine; // see enum CRealTime::TechLine
  137. int m_nReportWhat; // 是否画买卖信息及成交明细,多股同列时不画
  138. // others
  139. CReport m_aReportBigTrade;
  140. int m_nCurrentStartPos; // 当前第一个明细数据在其数组中的位置指针
  141. // modeReportDetail => m_CurStock.GetReport()
  142. // modeMinuteDetail => m_CurStock.GetMinute()
  143. // modeBigTradeDetail => m_aReportBigTrade
  144. // modePriceLine's reportQuote => m_CurStock.GetReport()
  145. // modePriceLine's reportPrice => m_CurStock.GetMinute().StateDealInfo(...)
  146. // modePriceLine's reportMinute => m_CurStock.GetMinute()
  147. // modePriceLine's reportBuySellEx => m_CurStock.GetReport()
  148. // modePriceLine's reportBigTrade => m_aReportBigTrade
  149. int m_nCurrentPageCount;// 当前数据每页显示个数,应用场合
  150. // modePriceLine's reportQuote
  151. // modePriceLine's reportPrice
  152. // modePriceLine's reportMinute
  153. // modePriceLine's reportBuySellEx
  154. // modePriceLine's reportBigTrade
  155. int m_nCurrentSelectPos;// 当前选中的某一个大单明细数据在m_aReportBigTrade中的位置指针
  156. // 仅供大单成交明细(modeBigTradeDetail或reportBigTrade)使用
  157. double m_dMaxPrice; // modePriceLine 当前价格线的最高值
  158. double m_dMinPrice; // modePriceLine 当前价格线的最低值
  159. };
  160. /////////////////////////////////////////////////////////////////////////////
  161. //{{AFX_INSERT_LOCATION}}
  162. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  163. #endif // !defined(AFX_REALTIME_H__0A8D66A9_30E0_4AAA_8E17_06B721FC0E97__INCLUDED_)