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

金融证券系统

开发平台:

Visual C++

  1. // SimuAddOpDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "SimuAddOpDlg.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CSimuAddOpDlg dialog
  12. CSimuAddOpDlg::CSimuAddOpDlg(CWnd* pParent /*=NULL*/)
  13. : CDialog(CSimuAddOpDlg::IDD, pParent)
  14. {
  15. //{{AFX_DATA_INIT(CSimuAddOpDlg)
  16. m_time = 0;
  17. m_strShare = _T("");
  18. m_strSharePrice = _T("");
  19. m_strRateCost = _T("");
  20. //}}AFX_DATA_INIT
  21. m_time = CSPTime::GetCurrentTime();
  22. m_strShare = _T("");
  23. m_strSharePrice = _T("");
  24. m_strRateCost = _T("0");
  25. m_pStrategy = NULL;
  26. }
  27. void CSimuAddOpDlg::SetStrategy( CStrategy * pStrategy )
  28. {
  29. m_pStrategy = pStrategy;
  30. }
  31. /***
  32. 自动设定交易费用
  33. */
  34. void CSimuAddOpDlg::AutoSetRateCost( )
  35. {
  36. UpdateData( );
  37. if( NULL == m_pStrategy )
  38. return;
  39. // Share
  40. if( !IsNumber( m_strShare, TRUE ) || !IsNumber( m_strSharePrice, TRUE ) || !IsNumber( m_strRateCost, TRUE ) )
  41. {
  42. AfxMessageBox( IDS_SIMUADDOP_NOTNUMBER, MB_OK|MB_ICONINFORMATION );
  43. return;
  44. }
  45. DWORD dwShare = atol(m_strShare);
  46. double dSharePrice = atol(m_strSharePrice);
  47. CString strStockCode = m_comboStock.GetSelectedStockCode();
  48. CStockInfo info;
  49. if( !AfxGetStockContainer().GetStockInfo( strStockCode, &info )
  50. || !info.IsValidStock() )
  51. return;
  52. m_strRateCost.Format( "%.2f", dwShare*dSharePrice*m_pStrategy->GetRateParam().GetRate(info) );
  53. UpdateData( FALSE );
  54. }
  55. void CSimuAddOpDlg::DoDataExchange(CDataExchange* pDX)
  56. {
  57. CDialog::DoDataExchange(pDX);
  58. //{{AFX_DATA_MAP(CSimuAddOpDlg)
  59. DDX_Control(pDX, IDCANCEL, m_btnCancel);
  60. DDX_Control(pDX, IDOK, m_btnOK);
  61. DDX_Control(pDX, IDC_OPERATE, m_comboOperate);
  62. DDX_Control(pDX, IDC_STOCK, m_comboStock);
  63. DDX_DateTimeCtrl(pDX, IDC_TIME, m_time);
  64. DDX_Text(pDX, IDC_SHARE, m_strShare);
  65. DDX_Text(pDX, IDC_SHAREPRICE, m_strSharePrice);
  66. DDX_Text(pDX, IDC_RATECOST, m_strRateCost);
  67. //}}AFX_DATA_MAP
  68. }
  69. BEGIN_MESSAGE_MAP(CSimuAddOpDlg, CDialog)
  70. //{{AFX_MSG_MAP(CSimuAddOpDlg)
  71. ON_EN_CHANGE(IDC_SHARE, OnChangeShare)
  72. ON_EN_CHANGE(IDC_SHAREPRICE, OnChangeShareprice)
  73. //}}AFX_MSG_MAP
  74. END_MESSAGE_MAP()
  75. /////////////////////////////////////////////////////////////////////////////
  76. // CSimuAddOpDlg message handlers
  77. BOOL CSimuAddOpDlg::OnInitDialog() 
  78. {
  79. CDialog::OnInitDialog();
  80. ASSERT( m_pStrategy );
  81. // Operate
  82. CString strBuy, strSell;
  83. strBuy.LoadString( IDS_SIMUREPORT_BUY );
  84. strSell.LoadString( IDS_SIMUREPORT_SELL );
  85. m_comboOperate.SetItemData( m_comboOperate.AddString( strBuy ), STRATEGY_OPTYPE_BUY );
  86. m_comboOperate.SetItemData( m_comboOperate.AddString( strSell ), STRATEGY_OPTYPE_SELL );
  87. m_comboOperate.SetCurSel( 0 );
  88. // Stock
  89. m_comboStock.InitStocks( m_pStrategy->GetStocks(), FALSE, FALSE, FALSE );
  90. m_comboStock.SetAutoHide( FALSE );
  91. m_comboStock.SetCurSel( 0 );
  92. return TRUE;  // return TRUE unless you set the focus to a control
  93.               // EXCEPTION: OCX Property Pages should return FALSE
  94. }
  95. void CSimuAddOpDlg::OnOK() 
  96. {
  97. UpdateData( );
  98. OPRECORD record;
  99. memset( &record, 0, sizeof(record) );
  100. // Time
  101. CSPTime tmDay( m_time.GetYear(), m_time.GetMonth(), m_time.GetDay(), 0, 0, 0 );
  102. record.time = tmDay.GetTime();
  103. // Stock
  104. CString strStockCode = m_comboStock.GetSelectedStockCode();
  105. if( strStockCode.GetLength() <= 0 )
  106. {
  107. AfxMessageBox( IDS_SIMUADDOP_NOSTOCK, MB_OK|MB_ICONINFORMATION );
  108. return;
  109. }
  110. strncpy( record.szCode, strStockCode.GetBuffer(sizeof(record.szCode)+1), sizeof(record.szCode) );
  111. strStockCode.ReleaseBuffer( );
  112. // Operate
  113. int nSel = m_comboOperate.GetCurSel();
  114. if( CB_ERR != nSel )
  115. record.lOpType = m_comboOperate.GetItemData(nSel);
  116. // Share
  117. if( !IsNumber( m_strShare, FALSE ) || !IsNumber( m_strSharePrice, FALSE ) || !IsNumber( m_strRateCost, TRUE ) )
  118. {
  119. AfxMessageBox( IDS_SIMUADDOP_NOTNUMBER, MB_OK|MB_ICONINFORMATION );
  120. return;
  121. }
  122. record.dwShare = atol(m_strShare);
  123. record.dSharePrice = atol(m_strSharePrice);
  124. record.dRateCost = atol(m_strRateCost);
  125. COpRecordContainer & container = m_pStrategy->RealGetOpRecord();
  126. if( container.GetSize() > 0 && container.ElementAt(container.GetSize()-1).time > record.time
  127. && IDYES != AfxMessageBox( IDS_SIMUADDOP_ADDWILLDELETE, MB_YESNO ) )
  128. {
  129. return;
  130. }
  131. if( !m_pStrategy || !m_pStrategy->RealAddOpRecordStrict( record ) )
  132. {
  133. AfxMessageBox( IDS_SIMUADDOP_LOGICERROR, MB_OK|MB_ICONINFORMATION );
  134. return;
  135. }
  136. CDialog::OnOK();
  137. }
  138. void CSimuAddOpDlg::OnChangeShare() 
  139. {
  140. // TODO: If this is a RICHEDIT control, the control will not
  141. // send this notification unless you override the CDialog::OnInitDialog()
  142. // function and call CRichEditCtrl().SetEventMask()
  143. // with the ENM_CHANGE flag ORed into the mask.
  144. // TODO: Add your control notification handler code here
  145. AutoSetRateCost( );
  146. }
  147. void CSimuAddOpDlg::OnChangeShareprice() 
  148. {
  149. // TODO: If this is a RICHEDIT control, the control will not
  150. // send this notification unless you override the CDialog::OnInitDialog()
  151. // function and call CRichEditCtrl().SetEventMask()
  152. // with the ENM_CHANGE flag ORed into the mask.
  153. // TODO: Add your control notification handler code here
  154. AutoSetRateCost( );
  155. }