MainFrm.cpp
上传用户:nameszq
上传日期:2014-08-12
资源大小:336k
文件大小:8k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "TestBench.h"
  5. #include "MainFrm.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMainFrame
  13. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  14. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  15. //{{AFX_MSG_MAP(CMainFrame)
  16. ON_WM_CREATE()
  17. ON_WM_CLOSE()
  18. ON_COMMAND(ID_VIEW_CONNECT, OnViewConnect)
  19. ON_UPDATE_COMMAND_UI(ID_VIEW_CONNECT, OnUpdateViewConnect)
  20. ON_COMMAND(ID_VIEW_DISCONNECT, OnViewDisconnect)
  21. ON_UPDATE_COMMAND_UI(ID_VIEW_DISCONNECT, OnUpdateViewDisconnect)
  22. ON_WM_TIMER()
  23. //}}AFX_MSG_MAP
  24. ON_MESSAGE(WM_APP_STKRECEIVER_TSDATA,OnStkReceiverTsdata)
  25. END_MESSAGE_MAP()
  26. static UINT indicators[] =
  27. {
  28. ID_SEPARATOR,           // status line indicator
  29. ID_INDICATOR_CAPS,
  30. ID_INDICATOR_NUM,
  31. ID_INDICATOR_SCRL,
  32. };
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CMainFrame construction/destruction
  35. CMainFrame::CMainFrame()
  36. {
  37. // TODO: add member initialization code here
  38. }
  39. CMainFrame::~CMainFrame()
  40. {
  41. }
  42. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  43. {
  44. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  45. return -1;
  46. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  47. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  48. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  49. {
  50. TRACE0("Failed to create toolbarn");
  51. return -1;      // fail to create
  52. }
  53. if (!m_wndStatusBar.Create(this) ||
  54. !m_wndStatusBar.SetIndicators(indicators,
  55.   sizeof(indicators)/sizeof(UINT)))
  56. {
  57. TRACE0("Failed to create status barn");
  58. return -1;      // fail to create
  59. }
  60. // TODO: Delete these three lines if you don't want the toolbar to
  61. //  be dockable
  62. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  63. EnableDocking(CBRS_ALIGN_ANY);
  64. DockControlBar(&m_wndToolBar);
  65. Stock_Init( GetSafeHwnd(), WM_APP_STKRECEIVER_TSDATA, 0 );
  66. GetTotalNumber();
  67. GetStockByNoEx( 0, NULL );
  68. GetStockByCodeEx( NULL, 0, NULL );
  69. SetupReceiver( FALSE );
  70. GetStockDrvInfo( 0, NULL );
  71. SetTimer( 1, 2000, NULL );
  72. return 0;
  73. }
  74. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  75. {
  76. if( !CFrameWnd::PreCreateWindow(cs) )
  77. return FALSE;
  78. // TODO: Modify the Window class or styles here by modifying
  79. //  the CREATESTRUCT cs
  80. return TRUE;
  81. }
  82. void CMainFrame::OnTimer(UINT nIDEvent) 
  83. {
  84. if( 1 == nIDEvent )
  85. {
  86. BOOL bWork = IsEngineWorking( );
  87. if( bWork )
  88. {
  89. STOCK_STRUCTEx stock;
  90. stock.m_type = 0x11;
  91. strncpy( stock.m_code, "600028", sizeof(stock.m_code) );
  92. RequestStockData( RCV_REPORT, &stock, 1, 0, 0 );
  93. RequestStockData( FILE_MINUTE_EX, &stock, 1, 0, 0 );
  94. RequestStockData( FILE_HISTORY_EX, &stock, 1, ktypeDay, 0x150 );
  95. RequestStockData( FILE_MULTISORT_EX, &stock, 1, 0, 0 );
  96. RequestStockData( FILE_DETAIL_EX, &stock, 1, 0, 0 );
  97. RequestStockData( FILE_BASE_EX, &stock, 1, 0, 0 );
  98. KillTimer(1);
  99. }
  100. }
  101. CFrameWnd::OnTimer(nIDEvent);
  102. }
  103. /////////////////////////////////////////////////////////////////////////////
  104. // CMainFrame diagnostics
  105. #ifdef _DEBUG
  106. void CMainFrame::AssertValid() const
  107. {
  108. CFrameWnd::AssertValid();
  109. }
  110. void CMainFrame::Dump(CDumpContext& dc) const
  111. {
  112. CFrameWnd::Dump(dc);
  113. }
  114. #endif //_DEBUG
  115. /////////////////////////////////////////////////////////////////////////////
  116. // CMainFrame message handlers
  117. void CMainFrame::OnClose() 
  118. {
  119. Stock_Quit( GetSafeHwnd() );
  120. CFrameWnd::OnClose();
  121. }
  122. void CMainFrame::OnViewConnect() 
  123. {
  124. Stock_Init( GetSafeHwnd(), WM_APP_STKRECEIVER_TSDATA, 0 );
  125. }
  126. void CMainFrame::OnUpdateViewConnect(CCmdUI* pCmdUI) 
  127. {
  128. pCmdUI->Enable( !IsEngineWorking() );
  129. }
  130. void CMainFrame::OnViewDisconnect() 
  131. {
  132. Stock_Quit( GetSafeHwnd() );
  133. }
  134. void CMainFrame::OnUpdateViewDisconnect(CCmdUI* pCmdUI) 
  135. {
  136. pCmdUI->Enable( IsEngineWorking() );
  137. }
  138. // 通视处理数据
  139. LRESULT CMainFrame::OnStkReceiverTsdata(
  140. UINT wFileType, // 文件类型, 参见 StockDrv.H
  141. LONG lPara)
  142. {
  143. int i = 0;
  144. PBYTE pFileBuf = NULL;
  145. PBYTE pBuffx = NULL;
  146. PGZLXBINDATA pGZLX = NULL;
  147. RCV_DATA * pHeader = (RCV_DATA *) lPara;
  148. // 检查参数
  149. ASSERT( pHeader && pHeader->m_pData );
  150. if( !pHeader || !pHeader->m_pData )
  151. return -1L;
  152. // ASSERT( pHeader->m_nPacketNum > 0 || pHeader->m_bDISK );
  153. if( pHeader->m_nPacketNum <= 0 && !pHeader->m_bDISK )
  154. return -1L;
  155. // 对于处理较慢的数据类型,建议将数据备份,另创建一线程处理
  156. switch( wFileType )
  157. {
  158. case RCV_REPORT:
  159. {
  160. // 检查参数
  161. ASSERT( pHeader->m_nPacketNum > 0 && !pHeader->m_bDISK );
  162. if( pHeader->m_nPacketNum <= 0 || pHeader->m_bDISK )
  163. return -1L;
  164. // 修改AfxGetStockContainer()
  165. int nBufSize = pHeader->m_pReport[0].m_cbSize;
  166. PBYTE pBaseBuf = (PBYTE)&pHeader->m_pReport[0];
  167. for(i=0; i<pHeader->m_nPacketNum; i++)
  168. {
  169. PRCV_REPORT_STRUCTEx pReport = (PRCV_REPORT_STRUCTEx)(pBaseBuf + nBufSize*i );
  170. }
  171. }
  172. break;
  173. case RCV_FILEDATA:
  174. switch(pHeader->m_wDataType)
  175. {
  176. case FILE_MULTISORT_EX: // 综合排名
  177. break;
  178. case FILE_DETAIL_EX: // 成交明细
  179. break;
  180. case FILE_HISTORY_EX: // 补日线数据
  181. {
  182. RCV_HISTORY_STRUCTEx * pDay = pHeader->m_pDay;
  183. int nPacketNum = pHeader->m_nPacketNum;
  184. CString sCode;
  185. // 处理数据
  186. DWORD dwCount = 0;
  187. for(i=0; i<nPacketNum && pDay; i++ )
  188. {
  189. if( pDay[i].m_head.m_dwHeadTag == EKE_HEAD_TAG )
  190. {
  191. sCode = pDay[i].m_head.m_szLabel;
  192. continue;
  193. }
  194. dwCount ++;
  195. }
  196. }
  197. break;
  198. case FILE_MINUTE_EX: // 补分钟线数据
  199. case 83: // 补分笔数据
  200. {
  201. RCV_MINUTE_STRUCTEx * pMin = pHeader->m_pMinute;
  202. ASSERT(pMin->m_head.m_dwHeadTag == EKE_HEAD_TAG);
  203. CString sCode;
  204. DWORD dwCount = 0;
  205. for(i=0; i<pHeader->m_nPacketNum; i++)
  206. {
  207. if( pMin[i].m_head.m_dwHeadTag == EKE_HEAD_TAG )
  208. {
  209. sCode = pMin[i].m_head.m_szLabel;
  210. continue;
  211. }
  212. dwCount ++;
  213. }
  214. }
  215. break;
  216. case FILE_POWER_EX: // 补充除权数据
  217. {
  218. RCV_POWER_STRUCTEx * pPower = pHeader->m_pPower;
  219. int nPacketNum = pHeader->m_nPacketNum;
  220. CString sCode;
  221. DWORD dwCount = 0;
  222. for(i=0; i<nPacketNum && pPower; i++ )
  223. {
  224. if( pPower[i].m_head.m_dwHeadTag == EKE_HEAD_TAG )
  225. {
  226. sCode = pPower[i].m_head.m_szLabel;
  227. continue;
  228. }
  229. dwCount ++;
  230. }
  231. }
  232. break;
  233. case FILE_BASE_EX: // 钱龙兼容基本资料文件,m_szFileName仅包含文件名
  234. {
  235. if( pHeader->m_bDISK )
  236. {
  237. CString strFileName = pHeader->m_File.m_szFileName;
  238. }
  239. else
  240. {
  241. CString strBaseText = (char*)pHeader->m_pData;
  242. }
  243. }
  244. break;
  245. case FILE_NEWS_EX: // 新闻类,其类型由m_szFileName中子目录名来定
  246. {
  247. if( pHeader->m_bDISK )
  248. {
  249. CString strFileName = pHeader->m_File.m_szFileName;
  250. }
  251. else
  252. {
  253. CString strBaseText = (char *)pHeader->m_pData;
  254. }
  255. }
  256. break;
  257. case FILE_HTML_EX: // HTML文件,m_szFileName为URL
  258. {
  259. CString strHTML = pHeader->m_File.m_szFileName;
  260. }
  261. break;
  262. case FILE_SOFTWARE_EX:
  263. TRACE("%sn",pHeader->m_File.m_szFileName);
  264. TRACE("%dn",pHeader->m_File.m_dwLen);
  265. pBuffx = (PBYTE)pHeader->m_pData;
  266. break;
  267. case FILE_SHAZQDATA_EX: //h上海国债净价交易
  268. break;
  269. case FILE_TYPE_RES:
  270. TRACE("MSG: CStkReceiver::OnStkDataOK, Replaced data n");
  271. break;
  272. default:
  273. TRACE("Msg: CStkReceiver::OnStkReceiverData,Unkonw data typen");
  274. }
  275. break;
  276. }
  277. return 0L;
  278. }