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

金融证券系统

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "Stockdrv.h"
  3. #include "STKDRV.h"
  4. #include "SelectEngineDlg.h"
  5. /////////////////////////////////////////////////////////////////////////////
  6. // CSelectEngineDlg dialog
  7. CSelectEngineDlg::CSelectEngineDlg(CWnd* pParent /*=NULL*/) : CDialog(CSelectEngineDlg::IDD, pParent)
  8. {
  9. m_bAutoStart = TRUE;
  10. }
  11. BOOL CSelectEngineDlg::GetSelectedDriver(CStringArray & astrProvider, CStringArray & astrDriver)
  12. {
  13. astrProvider.Copy(m_astrProvider);
  14. astrDriver.Copy(m_astrDriver);
  15. return astrDriver.GetSize() > 0 ;
  16. }
  17. void CSelectEngineDlg::DoDataExchange(CDataExchange* pDX)
  18. {
  19. CDialog::DoDataExchange(pDX);
  20. //{{AFX_DATA_MAP(CSelectEngineDlg)
  21. DDX_Control(pDX, IDCANCEL, m_btnCancel);
  22. DDX_Control(pDX, IDOK, m_btnOK);
  23. DDX_Control(pDX, IDC_SETUPRECEIVER, m_btnSetup);
  24. DDX_Control(pDX, IDC_LISTENGINE, m_listEngine);
  25. DDX_Check(pDX, IDC_CHECKAUTOSTART, m_bAutoStart);
  26. //}}AFX_DATA_MAP
  27. }
  28. BEGIN_MESSAGE_MAP(CSelectEngineDlg, CDialog)
  29. //{{AFX_MSG_MAP(CSelectEngineDlg)
  30. ON_WM_DESTROY()
  31. ON_BN_CLICKED(IDC_SETUPRECEIVER, OnSetupreceiver)
  32. ON_LBN_SELCHANGE(IDC_LISTENGINE, OnSelchangeListengine)
  33. //}}AFX_MSG_MAP
  34. END_MESSAGE_MAP()
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CSelectEngineDlg message handlers
  37. BOOL CSelectEngineDlg::OnInitDialog() 
  38. {
  39. CDialog::OnInitDialog();
  40. // 读取注册表中的通视兼容设备
  41. AfxRegQueryString(HKEY_LOCAL_MACHINE, _T("Software"), _T("stockdrv"), _T("兼容设备"), m_astrProvider, m_astrDriver);
  42. m_astrProvider.InsertAt(0, AfxRegQueryString(HKEY_LOCAL_MACHINE, _T("Software"), _T("stockdrv"), "", "", _T("Provider"), "Tongshi"));
  43. m_astrDriver.InsertAt(0, AfxRegQueryString(HKEY_LOCAL_MACHINE, _T("Software"), _T("stockdrv"), "", "", _T("Driver"), "Stock.dll"));
  44. // 取得缺省启动设备
  45. CSPStringArray aProDefault, aDrvDefault;
  46. AfxGetProfile().GetRcvDriverDefault(aProDefault, aDrvDefault);
  47. if (0 == aDrvDefault.GetSize())
  48. {
  49. aProDefault.InsertAt(0, m_astrProvider[0]);
  50. aDrvDefault.InsertAt(0, m_astrDriver[0]);
  51. }
  52. m_listEngine.SetCurSel(0);
  53. // 加入m_listEngine
  54. for (int i=0; i<m_astrProvider.GetSize() && i<m_astrDriver.GetSize(); i++)
  55. {
  56. CString strTemp = " " + m_astrProvider[i];
  57. while(strTemp.GetLength() < 15) strTemp += " ";
  58. int nItem = m_listEngine.AddString(strTemp + m_astrDriver[i]);
  59. m_listEngine.SetItemData(nItem, i);
  60. // 选择,如果是缺省启动
  61. for (int j=0; j<aProDefault.GetSize() && j<aDrvDefault.GetSize(); j++)
  62. {
  63. if(0 == m_astrProvider[i].Compare(aProDefault[j])
  64. && 0 == m_astrDriver[i].Compare(aDrvDefault[j]))
  65. m_listEngine.SetCheck(nItem, TRUE);
  66. }
  67. }
  68. m_listEngine.SetCurSel(0);
  69. return TRUE;
  70. }
  71. int CSelectEngineDlg::DoModal() 
  72. {
  73. HINSTANCE hInstanceOld = AfxGetResourceHandle();
  74. AfxSetResourceHandle(AfxGetModuleHandle());
  75. int nRet = CDialog::DoModal();
  76. AfxSetResourceHandle(hInstanceOld);
  77. return nRet;
  78. }
  79. void CSelectEngineDlg::OnOK() 
  80. {
  81. UpdateData();
  82. CStringArray aProStart, aDrvStart;
  83. for(int i=0; i<m_listEngine.GetCount(); i++)
  84. {
  85. if(m_listEngine.GetCheck(i))
  86. {
  87. int nData = (int)m_listEngine.GetItemData(i);
  88. if(nData >= 0 && nData<m_astrProvider.GetSize() && nData<m_astrDriver.GetSize())
  89. {
  90. aProStart.Add(m_astrProvider[nData]);
  91. aDrvStart.Add(m_astrDriver[nData]);
  92. }
  93. }
  94. }
  95. m_astrProvider.Copy(aProStart);
  96. m_astrDriver.Copy(aDrvStart);
  97. if(m_bAutoStart)
  98. {
  99. CSPStringArray aProDefault, aDrvDefault;
  100. for(int k=0; k<aProStart.GetSize(); k++) aProDefault.Add(aProStart[k]);
  101. for(k=0; k<aDrvStart.GetSize(); k++) aDrvDefault.Add(aDrvStart[k]);
  102. AfxGetProfile().SetRcvDriverDefault(aProDefault, aDrvDefault);
  103. }
  104. CDialog::OnOK();
  105. }
  106. void CSelectEngineDlg::OnSetupreceiver() 
  107. {
  108. int nSel = m_listEngine.GetCurSel();
  109. if(LB_ERR == nSel)
  110. {
  111. AfxMessageBox(AfxModuleLoadString(IDS_SELECTENGINE_ERRSELECT), MB_OK);
  112. return;
  113. }
  114. int nData = (int)m_listEngine.GetItemData(nSel);
  115. if(nData >= 0 && nData<m_astrDriver.GetSize())
  116. {
  117. m_drv.Stock_Quit(GetSafeHwnd());
  118. m_drv.UnloadDriver();
  119. if(m_drv.LoadDriver(m_astrDriver[nData])
  120. && m_drv.Stock_Init(GetSafeHwnd(),WM_APP_STKRECEIVER_TSDATA,RCV_WORK_SENDMSG))
  121. {
  122. m_drv.SetupReceiver(TRUE);
  123. }
  124. else
  125. AfxMessageBox(AfxModuleLoadString(IDS_SELECTENGINE_ERRLOAD), MB_OK);
  126. }
  127. m_btnSetup.EnableWindow(FALSE);
  128. }
  129. void CSelectEngineDlg::OnSelchangeListengine() 
  130. {
  131. int nSel = m_listEngine.GetCurSel();
  132. m_btnSetup.EnableWindow(LB_ERR != nSel);
  133. }
  134. void CSelectEngineDlg::OnDestroy() 
  135. {
  136. m_drv.Stock_Quit(GetSafeHwnd());
  137. m_drv.UnloadDriver();
  138. CDialog::OnDestroy();
  139. }