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

金融证券系统

开发平台:

Visual C++

  1. // MultiSortView.cpp : implementation of the CMultiSortView class
  2. //
  3. #include "stdafx.h"
  4. #include "../StaticDoc.h"
  5. #include "MultiSortView.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMultiSortView
  13. IMPLEMENT_DYNCREATE(CMultiSortView, CView)
  14. BEGIN_MESSAGE_MAP(CMultiSortView, CView)
  15. //{{AFX_MSG_MAP(CMultiSortView)
  16. ON_WM_CREATE()
  17. ON_WM_DESTROY()
  18. ON_WM_ERASEBKGND()
  19. ON_WM_TIMER()
  20. ON_WM_LBUTTONDOWN()
  21. ON_WM_LBUTTONDBLCLK()
  22. //}}AFX_MSG_MAP
  23. // Standard printing commands
  24. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  25. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  26. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  27. ON_MESSAGE(WM_USER_GETVIEWTITLE, OnGetViewTitle)
  28. ON_MESSAGE(WM_USER_GETVIEWCMDID, OnGetViewCmdid)
  29. ON_MESSAGE(WM_USER_COLORCHANGE, OnColorChange)
  30. ON_MESSAGE(WM_APP_STKRECEIVER_DATA, OnStkReceiverData)
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CMultiSortView construction/destruction
  34. #define MSV_TIMER_REFRESH 1
  35. CMultiSortView::CMultiSortView()
  36. {
  37. // TODO: add construction code here
  38. }
  39. CMultiSortView::~CMultiSortView()
  40. {
  41. }
  42. void CMultiSortView::SendRequestQuote( BOOL bForced )
  43. {
  44. BOOL bInTrade = CSPTime::InTradeTime(CSPTime::GetCurrentTime().GetTime(),900);
  45. CView * pView = AfxGetStaticDoc()->GetActiveView();
  46. if( bForced || (bInTrade && pView == this) )
  47. {
  48. CStockInfo info;
  49. info.SetType( m_multisort.GetMultiSortClass( ) );
  50. AfxGetStkReceiver().RequestStockData( CStock::dataMultisort, &info, 1, 0, 0 );
  51. }
  52. }
  53. BOOL CMultiSortView::PreCreateWindow(CREATESTRUCT& cs)
  54. {
  55. // TODO: Modify the Window class or styles here by modifying
  56. //  the CREATESTRUCT cs
  57. return CView::PreCreateWindow(cs);
  58. }
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CMultiSortView drawing
  61. void CMultiSortView::OnDraw(CDC* pDC)
  62. {
  63. CStaticDoc* pDoc = GetDocument();
  64. ASSERT_VALID(pDoc);
  65. // TODO: add draw code for native data here
  66. CRect rectClient;
  67. GetClientRect( &rectClient );
  68. m_multisort.Redraw( pDC, rectClient );
  69. }
  70. /////////////////////////////////////////////////////////////////////////////
  71. // CMultiSortView printing
  72. BOOL CMultiSortView::OnPreparePrinting(CPrintInfo* pInfo)
  73. {
  74. // default preparation
  75. return DoPreparePrinting(pInfo);
  76. }
  77. void CMultiSortView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
  78. {
  79. // TODO: add extra initialization before printing
  80. CView::OnBeginPrinting( pDC, pInfo );
  81. }
  82. void CMultiSortView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
  83. {
  84. // TODO: add cleanup after printing
  85. CView::OnEndPrinting( pDC, pInfo );
  86. }
  87. void CMultiSortView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
  88. {
  89. // TODO: add customized printing code here
  90. pDC->SetMapMode( MM_ISOTROPIC );
  91. CRect rectClient( 0, 0, 1020, 586 );
  92. // GetClientRect( &rectClient );
  93. pDC->SetWindowOrg( rectClient.left, rectClient.top );
  94. pDC->SetWindowExt( rectClient.Width(), rectClient.Height() );
  95. pDC->SetViewportOrg( pInfo->m_rectDraw.left, pInfo->m_rectDraw.top );
  96. pDC->SetViewportExt( pInfo->m_rectDraw.Width(), pInfo->m_rectDraw.Height() );
  97. m_multisort.Redraw( pDC, rectClient );
  98. // CView::OnPrint(pDC,pInfo);
  99. }
  100. /////////////////////////////////////////////////////////////////////////////
  101. // CMultiSortView diagnostics
  102. #ifdef _DEBUG
  103. void CMultiSortView::AssertValid() const
  104. {
  105. CView::AssertValid();
  106. }
  107. void CMultiSortView::Dump(CDumpContext& dc) const
  108. {
  109. CView::Dump(dc);
  110. }
  111. #endif //_DEBUG
  112. /////////////////////////////////////////////////////////////////////////////
  113. // CMultiSortView message handlers
  114. int CMultiSortView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  115. {
  116. if (CView::OnCreate(lpCreateStruct) == -1)
  117. return -1;
  118. // TODO: Add your specialized creation code here
  119. CFont font;
  120. if( !font.CreateStockObject( DEFAULT_GUI_FONT ) )
  121. font.CreateStockObject( ANSI_VAR_FONT );
  122. SetFont( &font );
  123. m_multisort.SetParent( this );
  124. // 实时行情刷新
  125. AfxGetStkReceiver().AddRcvDataWnd( GetSafeHwnd() );
  126. SetTimer( MSV_TIMER_REFRESH, 30000, NULL );
  127. return 0;
  128. }
  129. void CMultiSortView::OnDestroy() 
  130. {
  131. // 停止行情刷新通知消息
  132. AfxGetStkReceiver().RemoveRcvDataWnd( GetSafeHwnd() );
  133. KillTimer( MSV_TIMER_REFRESH );
  134. CView::OnDestroy();
  135. }
  136. void CMultiSortView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) 
  137. {
  138. // TODO: Add your specialized code here and/or call the base class
  139. if( bActivate )
  140. OnUpdate( NULL, UPDATE_HINT_MULTISORTVIEW, NULL );
  141. CView::OnActivateView(bActivate, pActivateView, pDeactiveView);
  142. }
  143. BOOL CMultiSortView::OnEraseBkgnd(CDC* pDC) 
  144. {
  145. // TODO: Add your message handler code here and/or call default
  146. if( pDC && pDC->IsKindOf(RUNTIME_CLASS(CDC)) )
  147. {
  148. CRect rect;
  149. GetClientRect( &rect );
  150. CBrush brush;
  151. brush.CreateSolidBrush( AfxGetProfile().GetColor(CColorClass::clrGraphBK) );
  152. pDC->FillRect( &rect, &brush );
  153. return TRUE;
  154. }
  155. return CView::OnEraseBkgnd(pDC);
  156. }
  157. LRESULT CMultiSortView::OnGetViewTitle(WPARAM wParam, LPARAM lParam)
  158. {
  159. CString strTitle;
  160. strTitle.LoadString( IDS_TITLE_MULTISORTVIEW );
  161. lstrcpyn((LPTSTR)lParam, (LPCTSTR)strTitle, wParam);
  162. if ((int)wParam > strTitle.GetLength())
  163. wParam = strTitle.GetLength();
  164. return wParam;
  165. }
  166. LRESULT CMultiSortView::OnGetViewCmdid(WPARAM wParam, LPARAM lParam)
  167. {
  168. if( lParam )
  169. *((LPARAM *)lParam) = ID_VIEW_MULTISORT;
  170. return 0L;
  171. }
  172. LRESULT CMultiSortView::OnColorChange(WPARAM wParam, LPARAM lParam)
  173. {
  174. Invalidate( );
  175. return 0L;
  176. }
  177. LRESULT CMultiSortView::OnStkReceiverData(WPARAM wParam, LPARAM lParam)
  178. {
  179. return m_multisort.OnStkReceiverData(wParam,lParam);
  180. }
  181. void CMultiSortView::OnInitialUpdate() 
  182. {
  183. CView::OnInitialUpdate();
  184. // TODO: Add your specialized code here and/or call the base class
  185. OnUpdate( NULL, UPDATE_HINT_MULTISORTVIEW, NULL );
  186. }
  187. void CMultiSortView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
  188. {
  189. // TODO: Add your specialized code here and/or call the base class
  190. if( UPDATE_HINT_MULTISORTVIEW != lHint )
  191. return;
  192. if( !IsWindowVisible() )
  193. return;
  194. SetFocus( );
  195. m_multisort.RecalculateSortID( FALSE, FALSE );
  196. Invalidate( );
  197. SendRequestQuote(TRUE);
  198. }
  199. void CMultiSortView::OnTimer(UINT nIDEvent) 
  200. {
  201. if( MSV_TIMER_REFRESH == nIDEvent )
  202. {
  203. SendRequestQuote(FALSE);
  204. CView * pView = AfxGetStaticDoc()->GetActiveView();
  205. if( pView == this )
  206. m_multisort.RecalculateSortID( TRUE, TRUE );
  207. }
  208. CView::OnTimer(nIDEvent);
  209. }
  210. void CMultiSortView::OnLButtonDown(UINT nFlags, CPoint point) 
  211. {
  212. m_multisort.OnLButtonDown( nFlags, point, IsSHIFTpressed(), IsCTRLpressed() );
  213. CView::OnLButtonDown(nFlags, point);
  214. }
  215. void CMultiSortView::OnLButtonDblClk(UINT nFlags, CPoint point) 
  216. {
  217. m_multisort.OnLButtonDblClk( nFlags, point );
  218. CView::OnLButtonDblClk(nFlags, point);
  219. }