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

金融证券系统

开发平台:

Visual C++

  1. // AlarmSettingDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "..stkui.h"
  5. #include "AlarmSettingDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAlarmSettingDlg dialog
  13. CAlarmSettingDlg::CAlarmSettingDlg() : CPropertyPageEx(CAlarmSettingDlg::IDD)
  14. {
  15. //{{AFX_DATA_INIT(CAlarmSettingDlg)
  16. m_strDiffPercentMore = _T("");
  17. m_strDiffPercentLess = _T("");
  18. m_strTradeVolume = _T("");
  19. //}}AFX_DATA_INIT
  20. m_strDiffPercentMore = _T("4");
  21. m_strDiffPercentLess = _T("4");
  22. m_strTradeVolume = _T("1000");
  23. }
  24. CAlarmSettingDlg::~CAlarmSettingDlg()
  25. {
  26. }
  27. void CAlarmSettingDlg::ResetListCond( )
  28. {
  29. m_listCond.ResetContent();
  30. CAlarmCondContainer & container = AfxGetProfile().GetAlarmCondContainer();
  31. for( int nIndex=0; nIndex<container.GetSize(); nIndex++ )
  32. {
  33. ALARMCOND & cond = container.ElementAt(nIndex);
  34. CString strCond = container.AlarmCondToString( cond );
  35. int nItem = m_listCond.AddString( strCond );
  36. m_listCond.SetItemData( nItem, nIndex );
  37. }
  38. }
  39. BOOL CAlarmSettingDlg::GetCurrentCond( ALARMCOND & cond )
  40. {
  41. memset( &cond, 0, sizeof(cond) );
  42. CString strCode = m_cmbStock.GetSelectedStockCode();
  43. CStockInfo info;
  44. if( AfxGetStockContainer().GetStockInfo(strCode,&info) )
  45. cond.m_dwMarket = info.GetMarket();
  46. memcpy( cond.m_szCode, strCode, min(sizeof(cond.m_szCode)-1,strCode.GetLength()) );
  47. CButton *pbtnMore = (CButton*)GetDlgItem(IDC_RADIO_DIFFPERCENTMORE);
  48. CButton *pbtnLess = (CButton*)GetDlgItem(IDC_RADIO_DIFFPERCENTLESS);
  49. if( pbtnMore && pbtnMore->GetCheck() )
  50. {
  51. cond.m_type = ALARM_TYPE_DIFFPERCENTMORE;
  52. if( !IsNumber(m_strDiffPercentMore,FALSE) )
  53. {
  54. AfxMessageBox( IDS_ALARMSETTING_NOTNUMBER );
  55. return FALSE;
  56. }
  57. cond.m_fValue = atof(m_strDiffPercentMore);
  58. }
  59. else if( pbtnLess && pbtnLess->GetCheck() )
  60. {
  61. cond.m_type = ALARM_TYPE_DIFFPERCENTLESS;
  62. cond.m_fValue = atof(m_strDiffPercentLess);
  63. if( !IsNumber(m_strDiffPercentLess,FALSE) )
  64. {
  65. AfxMessageBox( IDS_ALARMSETTING_NOTNUMBER );
  66. return FALSE;
  67. }
  68. }
  69. else
  70. {
  71. cond.m_type = ALARM_TYPE_TRADEVOLUME;
  72. cond.m_fValue = atof(m_strTradeVolume)*100;
  73. if( !IsNumber(m_strTradeVolume,FALSE) )
  74. {
  75. AfxMessageBox( IDS_ALARMSETTING_NOTNUMBER );
  76. return FALSE;
  77. }
  78. }
  79. return TRUE;
  80. }
  81. void CAlarmSettingDlg::DoDataExchange(CDataExchange* pDX)
  82. {
  83. CPropertyPageEx::DoDataExchange(pDX);
  84. //{{AFX_DATA_MAP(CAlarmSettingDlg)
  85. DDX_Control(pDX, IDC_MODIFY, m_btnModify);
  86. DDX_Control(pDX, IDC_LISTCOND, m_listCond);
  87. DDX_Control(pDX, IDC_DELETE, m_btnDelete);
  88. DDX_Control(pDX, IDC_ADD, m_btnAdd);
  89. DDX_Control(pDX, IDC_TRADEVOLUME, m_editTradeVolume);
  90. DDX_Control(pDX, IDC_DIFFPERCENTLESS, m_editDiffPercentLess);
  91. DDX_Control(pDX, IDC_DIFFPERCENTMORE, m_editDiffPercentMore);
  92. DDX_Control(pDX, IDC_STOCK, m_cmbStock);
  93. DDX_Text(pDX, IDC_DIFFPERCENTMORE, m_strDiffPercentMore);
  94. DDX_Text(pDX, IDC_DIFFPERCENTLESS, m_strDiffPercentLess);
  95. DDX_Text(pDX, IDC_TRADEVOLUME, m_strTradeVolume);
  96. //}}AFX_DATA_MAP
  97. }
  98. BEGIN_MESSAGE_MAP(CAlarmSettingDlg, CPropertyPageEx)
  99. //{{AFX_MSG_MAP(CAlarmSettingDlg)
  100. ON_BN_CLICKED(IDC_RADIO_DIFFPERCENTMORE, OnRadioDiffpercentmore)
  101. ON_BN_CLICKED(IDC_RADIO_DIFFPERCENTLESS, OnRadioDiffpercentless)
  102. ON_BN_CLICKED(IDC_RADIO_TRADEVOLUME, OnRadioTradevolume)
  103. ON_BN_CLICKED(IDC_ADD, OnAdd)
  104. ON_BN_CLICKED(IDC_DELETE, OnDelete)
  105. ON_LBN_SELCHANGE(IDC_LISTCOND, OnSelchangeListcond)
  106. ON_BN_CLICKED(IDC_MODIFY, OnModify)
  107. //}}AFX_MSG_MAP
  108. END_MESSAGE_MAP()
  109. /////////////////////////////////////////////////////////////////////////////
  110. // CAlarmSettingDlg message handlers
  111. BOOL CAlarmSettingDlg::OnInitDialog() 
  112. {
  113. CPropertyPageEx::OnInitDialog();
  114. // TODO: Add extra initialization here
  115. CheckRadioButton( IDC_RADIO_DIFFPERCENTMORE, IDC_RADIO_TRADEVOLUME, IDC_RADIO_DIFFPERCENTMORE );
  116. OnRadioDiffpercentmore();
  117. ResetListCond( );
  118. m_cmbStock.InitStocks( FALSE, FALSE, TRUE );
  119. m_cmbStock.SetAutoHide( FALSE );
  120. m_cmbStock.SetCurSel( 0 );
  121. return TRUE;  // return TRUE unless you set the focus to a control
  122.               // EXCEPTION: OCX Property Pages should return FALSE
  123. }
  124. BOOL CAlarmSettingDlg::OnSetActive() 
  125. {
  126. CPropertySheetEx * pSheet = DYNAMIC_DOWNCAST( CPropertySheetEx, GetParent() );
  127. if( pSheet )
  128. {
  129. CString strFinish, strClose;
  130. strFinish.LoadString( IDS_FINISHBUTTON );
  131. strClose.LoadString( IDS_CLOSEBUTTON );
  132. CWnd * pWnd = pSheet->GetDlgItem( IDOK );
  133. if( pWnd && ::IsWindow( pWnd->GetSafeHwnd() ) )
  134. {
  135. pWnd->SetWindowText( strFinish );
  136. pWnd->EnableWindow( FALSE );
  137. }
  138. pWnd = pSheet->GetDlgItem( IDCANCEL );
  139. if( pWnd && ::IsWindow( pWnd->GetSafeHwnd() ) )
  140. pWnd->SetWindowText( strClose );
  141. }
  142. return CPropertyPageEx::OnSetActive();
  143. }
  144. void CAlarmSettingDlg::OnRadioDiffpercentmore() 
  145. {
  146. m_editDiffPercentMore.EnableWindow( TRUE );
  147. m_editDiffPercentLess.EnableWindow( FALSE );
  148. m_editTradeVolume.EnableWindow( FALSE );
  149. }
  150. void CAlarmSettingDlg::OnRadioDiffpercentless() 
  151. {
  152. m_editDiffPercentMore.EnableWindow( FALSE );
  153. m_editDiffPercentLess.EnableWindow( TRUE );
  154. m_editTradeVolume.EnableWindow( FALSE );
  155. }
  156. void CAlarmSettingDlg::OnRadioTradevolume() 
  157. {
  158. m_editDiffPercentMore.EnableWindow( FALSE );
  159. m_editDiffPercentLess.EnableWindow( FALSE );
  160. m_editTradeVolume.EnableWindow( TRUE );
  161. }
  162. void CAlarmSettingDlg::OnAdd() 
  163. {
  164. UpdateData();
  165. CAlarmCondContainer & container = AfxGetProfile().GetAlarmCondContainer();
  166. ALARMCOND cond;
  167. if( GetCurrentCond(cond) )
  168. {
  169. int nIndex = container.Add( cond );
  170. int nItem = m_listCond.AddString(container.AlarmCondToString(cond));
  171. m_listCond.SetItemData( nItem, nIndex );
  172. m_listCond.SetCurSel( nItem );
  173. m_listCond.Invalidate();
  174. }
  175. }
  176. void CAlarmSettingDlg::OnModify() 
  177. {
  178. UpdateData();
  179. int nSel = m_listCond.GetCurSel();
  180. if( LB_ERR == nSel )
  181. {
  182. AfxMessageBox( IDS_ALARMSETTING_NOCONDSELECTED );
  183. return;
  184. }
  185. CAlarmCondContainer & container = AfxGetProfile().GetAlarmCondContainer();
  186. int nData = m_listCond.GetItemData(nSel);
  187. if( nData >= 0 && nData < container.GetSize() )
  188. {
  189. ALARMCOND cond;
  190. if( GetCurrentCond( cond ) )
  191. {
  192. container.SetAt( nData, cond );
  193. ResetListCond();
  194. m_listCond.SetCurSel(nSel);
  195. m_listCond.Invalidate();
  196. }
  197. }
  198. }
  199. void CAlarmSettingDlg::OnDelete() 
  200. {
  201. UpdateData();
  202. int nSel = m_listCond.GetCurSel();
  203. if( LB_ERR == nSel )
  204. {
  205. AfxMessageBox( IDS_ALARMSETTING_NOCONDSELECTED );
  206. return;
  207. }
  208. CAlarmCondContainer & container = AfxGetProfile().GetAlarmCondContainer();
  209. int nData = m_listCond.GetItemData(nSel);
  210. if( nData >= 0 && nData < container.GetSize() )
  211. {
  212. container.RemoveAt( nData );
  213. ResetListCond();
  214. m_listCond.SetCurSel( nSel >= m_listCond.GetCount() ? 0 : nSel );
  215. m_listCond.Invalidate();
  216. }
  217. }
  218. void CAlarmSettingDlg::OnSelchangeListcond() 
  219. {
  220. UpdateData();
  221. int nSel = m_listCond.GetCurSel();
  222. if( LB_ERR == nSel )
  223. return;
  224. CAlarmCondContainer & container = AfxGetProfile().GetAlarmCondContainer();
  225. int nData = m_listCond.GetItemData(nSel);
  226. if( nData >= 0 && nData < container.GetSize() )
  227. {
  228. m_editDiffPercentMore.EnableWindow( FALSE );
  229. m_editDiffPercentLess.EnableWindow( FALSE );
  230. m_editTradeVolume.EnableWindow( FALSE );
  231. ALARMCOND & cond = container.ElementAt(nData);
  232. if( ALARM_TYPE_DIFFPERCENTMORE == cond.m_type )
  233. {
  234. CheckRadioButton( IDC_RADIO_DIFFPERCENTMORE, IDC_RADIO_TRADEVOLUME, IDC_RADIO_DIFFPERCENTMORE );
  235. m_editDiffPercentMore.EnableWindow( TRUE );
  236. m_strDiffPercentMore.Format( "%.2f", cond.m_fValue );
  237. }
  238. else if( ALARM_TYPE_DIFFPERCENTLESS == cond.m_type )
  239. {
  240. CheckRadioButton( IDC_RADIO_DIFFPERCENTMORE, IDC_RADIO_TRADEVOLUME, IDC_RADIO_DIFFPERCENTLESS );
  241. m_editDiffPercentLess.EnableWindow( TRUE );
  242. m_strDiffPercentLess.Format( "%.2f", cond.m_fValue );
  243. }
  244. else
  245. {
  246. CheckRadioButton( IDC_RADIO_DIFFPERCENTMORE, IDC_RADIO_TRADEVOLUME, IDC_RADIO_TRADEVOLUME );
  247. m_editTradeVolume.EnableWindow( TRUE );
  248. m_strTradeVolume.Format( "%.2f", cond.m_fValue*0.01 );
  249. }
  250. m_cmbStock.SelectString( 0, cond.m_szCode );
  251. UpdateData( FALSE );
  252. }
  253. }