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

金融证券系统

开发平台:

Visual C++

  1. // StockFilterDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "FilterInfoDlg.h"
  5. #include "SelectGrpDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CFilterInfoDlg dialog
  13. CFilterInfoDlg::CFilterInfoDlg(CWnd* pParent /*=NULL*/)
  14. : CDialog(CFilterInfoDlg::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CFilterInfoDlg)
  17. m_strMoreThan = _T("");
  18. m_strLessThan = _T("");
  19. //}}AFX_DATA_INIT
  20. }
  21. BOOL CFilterInfoDlg::InitListInfo( )
  22. {
  23. m_listInfo.ResetContent();
  24. CSPDWordArray & anOrder = AfxGetProfile().GetSListColumnsOrder();
  25. for( int i=0; i<anOrder.GetSize(); i++ )
  26. {
  27. UINT nVariantID = anOrder.GetAt(i);
  28. if( SLH_CODE == nVariantID || SLH_NAME == nVariantID
  29. || SLH_DATE == nVariantID || SLH_REPORTTYPE == nVariantID
  30. || SLH_DATE_BEGIN == nVariantID || SLH_TRADE == nVariantID
  31. || SLH_PROVINCE == nVariantID )
  32. continue;
  33. CString strName = (LPCTSTR)AfxGetVariantName( nVariantID, TRUE );
  34. int nItem = m_listInfo.AddString( strName );
  35. m_listInfo.SetItemData( nItem, nVariantID );
  36. }
  37. m_listInfo.SetCurSel( 0 );
  38. return TRUE;
  39. }
  40. void CFilterInfoDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42. CDialog::DoDataExchange(pDX);
  43. //{{AFX_DATA_MAP(CFilterInfoDlg)
  44. DDX_Control(pDX, IDCANCEL, m_btnCancel);
  45. DDX_Control(pDX, IDC_START, m_btnStart);
  46. DDX_Control(pDX, IDC_ADDTOGROUP, m_btnAddToGroup);
  47. DDX_Control(pDX, IDC_REMOVE, m_btnRemove);
  48. DDX_Control(pDX, IDC_ADD, m_btnAdd);
  49. DDX_Control(pDX, IDC_STATICTIME, m_staticTime);
  50. DDX_Control(pDX, IDC_SZNB, m_btnSznb);
  51. DDX_Control(pDX, IDC_SZNA, m_btnSzna);
  52. DDX_Control(pDX, IDC_SHAB, m_btnShab);
  53. DDX_Control(pDX, IDC_SHAA, m_btnShaa);
  54. DDX_Control(pDX, IDC_ALL, m_btnAll);
  55. DDX_Control(pDX, IDC_PROGRESS, m_ctrlProgress);
  56. DDX_Control(pDX, IDC_LISTRESULT, m_listResult);
  57. DDX_Control(pDX, IDC_LISTCOND, m_listCond);
  58. DDX_Control(pDX, IDC_LISTINFO, m_listInfo);
  59. DDX_Text(pDX, IDC_EDITMORETHAN, m_strMoreThan);
  60. DDX_Text(pDX, IDC_EDITLESSTHAN, m_strLessThan);
  61. //}}AFX_DATA_MAP
  62. }
  63. BEGIN_MESSAGE_MAP(CFilterInfoDlg, CDialog)
  64. //{{AFX_MSG_MAP(CFilterInfoDlg)
  65. ON_LBN_SELCHANGE(IDC_LISTINFO, OnSelchangeListinfo)
  66. ON_LBN_SELCHANGE(IDC_LISTCOND, OnSelchangeListcond)
  67. ON_BN_CLICKED(IDC_ADD, OnAdd)
  68. ON_BN_CLICKED(IDC_REMOVE, OnRemove)
  69. ON_BN_CLICKED(IDC_ALL, OnAll)
  70. ON_BN_CLICKED(IDC_START, OnStart)
  71. ON_BN_CLICKED(IDC_ADDTOGROUP, OnAddtogroup)
  72. //}}AFX_MSG_MAP
  73. END_MESSAGE_MAP()
  74. /////////////////////////////////////////////////////////////////////////////
  75. // CFilterInfoDlg message handlers
  76. BOOL CFilterInfoDlg::OnInitDialog() 
  77. {
  78. CDialog::OnInitDialog();
  79. DWORD dwDate = 0;
  80. if( AfxGetStockContainer().GetCurrentType( NULL, NULL, &dwDate )
  81. && (-1 != dwDate || AfxGetStockContainer().GetLatestTechDate(&dwDate)) )
  82. {
  83. CSPTime sptime;
  84. if( -1 != dwDate && sptime.FromStockTimeDay( dwDate ) )
  85. {
  86. CString string = sptime.Format( "%Y-%m-%d" );
  87. m_staticTime.SetWindowText( string );
  88. }
  89. }
  90. InitListInfo( );
  91. OnSelchangeListinfo();
  92. CheckRadioButton( IDC_RADIOAND, IDC_RADIOOR, IDC_RADIOAND );
  93. m_btnAll.SetCheck( 1 );
  94. OnAll( );
  95. m_btnAddToGroup.EnableWindow( FALSE );
  96. m_ctrlProgress.ShowWindow( SW_HIDE );
  97. return TRUE;  // return TRUE unless you set the focus to a control
  98.               // EXCEPTION: OCX Property Pages should return FALSE
  99. }
  100. void CFilterInfoDlg::OnCancel() 
  101. {
  102. for( int i=0; i<m_listCond.GetCount(); i++ )
  103. {
  104. FILTERINFO_CONDITION * pCond = (FILTERINFO_CONDITION *)m_listCond.GetItemData(i);
  105. if( NULL != pCond )
  106. delete pCond;
  107. }
  108. m_listCond.ResetContent();
  109. CDialog::OnCancel();
  110. }
  111. void CFilterInfoDlg::OnSelchangeListinfo() 
  112. {
  113. UpdateData( );
  114. m_strMoreThan = _T("");
  115. m_strLessThan = _T("");
  116. int nSel = m_listInfo.GetCurSel();
  117. if( LB_ERR == nSel )
  118. return;
  119. UINT nVariantID = m_listInfo.GetItemData(nSel);
  120. for( int i=0; i<m_listCond.GetCount(); i++ )
  121. {
  122. FILTERINFO_CONDITION * pCond = (FILTERINFO_CONDITION *)m_listCond.GetItemData(i);
  123. if( NULL != pCond )
  124. {
  125. if( pCond->nVariantID == nVariantID )
  126. {
  127. m_listCond.SetCurSel( i );
  128. if( pCond->bHasMoreThan )
  129. {
  130. m_strMoreThan.Format( "%f", pCond->dMoreThan );
  131. while( m_strMoreThan.GetLength() > 1 && m_strMoreThan[m_strMoreThan.GetLength()-1] == '0' )
  132. m_strMoreThan = m_strMoreThan.Left( m_strMoreThan.GetLength()-1 );
  133. }
  134. if( pCond->bHasLessThan )
  135. {
  136. m_strLessThan.Format( "%f", pCond->dLessThan );
  137. while( m_strLessThan.GetLength() > 1 && m_strLessThan[m_strLessThan.GetLength()-1] == '0' )
  138. m_strLessThan = m_strLessThan.Left( m_strLessThan.GetLength()-1 );
  139. }
  140. break;
  141. }
  142. }
  143. }
  144. UpdateData( FALSE );
  145. }
  146. void CFilterInfoDlg::OnSelchangeListcond() 
  147. {
  148. UpdateData( );
  149. m_strMoreThan = _T("");
  150. m_strLessThan = _T("");
  151. int nSel = m_listCond.GetCurSel();
  152. if( LB_ERR == nSel )
  153. return;
  154. FILTERINFO_CONDITION * pCond = (FILTERINFO_CONDITION *)m_listCond.GetItemData(nSel);
  155. if( NULL != pCond )
  156. {
  157. for( int i=0; i<m_listInfo.GetCount(); i++ )
  158. {
  159. UINT nVariantID = m_listInfo.GetItemData(i);
  160. if( pCond->nVariantID == nVariantID )
  161. {
  162. m_listInfo.SetCurSel( i );
  163. if( pCond->bHasMoreThan )
  164. {
  165. m_strMoreThan.Format( "%f", pCond->dMoreThan );
  166. while( m_strMoreThan.GetLength() > 1 && m_strMoreThan[m_strMoreThan.GetLength()-1] == '0' )
  167. m_strMoreThan = m_strMoreThan.Left( m_strMoreThan.GetLength()-1 );
  168. }
  169. if( pCond->bHasLessThan )
  170. {
  171. m_strLessThan.Format( "%f", pCond->dLessThan );
  172. while( m_strLessThan.GetLength() > 1 && m_strLessThan[m_strLessThan.GetLength()-1] == '0' )
  173. m_strLessThan = m_strLessThan.Left( m_strLessThan.GetLength()-1 );
  174. }
  175. break;
  176. }
  177. }
  178. }
  179. UpdateData( FALSE );
  180. }
  181. void CFilterInfoDlg::OnAdd() 
  182. {
  183. UpdateData( );
  184. int nSel = m_listInfo.GetCurSel();
  185. if( LB_ERR == nSel )
  186. {
  187. AfxMessageBox( IDS_FILTERINFO_NOSELECTEDINFO, MB_OK|MB_ICONINFORMATION );
  188. return;
  189. }
  190. if( ( m_strMoreThan.GetLength()<=0 && m_strLessThan.GetLength()<=0 )
  191. || !IsNumber(m_strMoreThan,TRUE) || !IsNumber(m_strLessThan,TRUE) )
  192. {
  193. AfxMessageBox( IDS_FILTERINFO_INVALIDCOND, MB_OK|MB_ICONINFORMATION );
  194. return;
  195. }
  196. UINT nVariantID = m_listInfo.GetItemData(nSel);
  197. CString strCond = AfxGetVariantName( nVariantID, TRUE );
  198. CString strME, strAnd, strLE;
  199. strME.LoadString( IDS_FILTERINFO_ME );
  200. strAnd.LoadString( IDS_FILTERINFO_AND );
  201. strLE.LoadString( IDS_FILTERINFO_LE );
  202. strCond += "(";
  203. if( m_strMoreThan.GetLength() > 0 )
  204. strCond += strME + m_strMoreThan;
  205. if( m_strMoreThan.GetLength() > 0 && m_strLessThan.GetLength() > 0 )
  206. strCond += strAnd;
  207. if( m_strLessThan.GetLength() > 0 )
  208. strCond += strLE + m_strLessThan;
  209. strCond += ")";
  210. for( int i=0; i<m_listCond.GetCount(); i++ )
  211. {
  212. FILTERINFO_CONDITION * pCond = (FILTERINFO_CONDITION *)m_listCond.GetItemData(i);
  213. if( NULL != pCond )
  214. {
  215. if( pCond->nVariantID == nVariantID )
  216. {
  217. pCond->bHasMoreThan = ( m_strMoreThan.GetLength()>0 ? TRUE : FALSE );
  218. pCond->bHasLessThan = ( m_strLessThan.GetLength()>0 ? TRUE : FALSE );
  219. pCond->dMoreThan = atof(m_strMoreThan);
  220. pCond->dLessThan = atof(m_strLessThan);
  221. m_listCond.DeleteString( i );
  222. m_listCond.InsertString( i, strCond );
  223. m_listCond.SetItemData( i, (DWORD)pCond );
  224. m_listCond.SetCurSel( i );
  225. break;
  226. }
  227. }
  228. }
  229. if( i == m_listCond.GetCount() )
  230. {
  231. FILTERINFO_CONDITION * pCond = new FILTERINFO_CONDITION;
  232. if( pCond )
  233. {
  234. pCond->nVariantID = nVariantID;
  235. pCond->bHasMoreThan = ( m_strMoreThan.GetLength()>0 ? TRUE : FALSE );
  236. pCond->bHasLessThan = ( m_strLessThan.GetLength()>0 ? TRUE : FALSE );
  237. pCond->dMoreThan = atof(m_strMoreThan);
  238. pCond->dLessThan = atof(m_strLessThan);
  239. int nItem = m_listCond.AddString( strCond );
  240. m_listCond.SetItemData( nItem, (DWORD)pCond );
  241. m_listCond.SetCurSel( nItem );
  242. }
  243. }
  244. }
  245. void CFilterInfoDlg::OnRemove() 
  246. {
  247. int nSel = m_listCond.GetCurSel();
  248. if( LB_ERR == nSel )
  249. {
  250. AfxMessageBox( IDS_FILTERINFO_NOSELECTEDCOND, MB_OK|MB_ICONINFORMATION );
  251. return;
  252. }
  253. FILTERINFO_CONDITION * pCond = (FILTERINFO_CONDITION *)m_listCond.GetItemData(nSel);
  254. if( NULL != pCond )
  255. delete pCond;
  256. m_listCond.DeleteString( nSel );
  257. nSel = nSel >= m_listCond.GetCount() ? 0 : nSel;
  258. m_listCond.SetCurSel( nSel );
  259. OnSelchangeListcond( );
  260. }
  261. void CFilterInfoDlg::OnAll() 
  262. {
  263. int nCheck = m_btnAll.GetCheck( );
  264. m_btnShaa.EnableWindow( !nCheck );
  265. m_btnShab.EnableWindow( !nCheck );
  266. m_btnSzna.EnableWindow( !nCheck );
  267. m_btnSznb.EnableWindow( !nCheck );
  268. }
  269. void CFilterInfoDlg::OnStart() 
  270. {
  271. UpdateData( );
  272. if( m_listCond.GetCount() <= 0 )
  273. {
  274. AfxMessageBox( IDS_FILTERINFO_NOCOND, MB_OK|MB_ICONINFORMATION );
  275. return;
  276. }
  277. BOOL bAnd = TRUE;
  278. CButton * pbtn = (CButton *)GetDlgItem(IDC_RADIOAND);
  279. if( pbtn ) bAnd = pbtn->GetCheck();
  280. m_listResult.ResetContent();
  281. CStockContainer & container = AfxGetStockContainer();
  282. m_ctrlProgress.SetWindowPos( NULL, 0, 0, 0, 0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE );
  283. m_ctrlProgress.SetRange( 0, container.GetSize() );
  284. for( int i=0; i<container.GetSize(); i++ )
  285. {
  286. m_ctrlProgress.SetPos( i );
  287. CStockInfo & info = container.ElementAt(i);
  288. LONG stocktype = info.GetType();
  289. if( CStock::typeshA == stocktype )
  290. { if( !m_btnAll.GetCheck() && !m_btnShaa.GetCheck() ) continue; }
  291. else if( CStock::typeshB == stocktype )
  292. { if( !m_btnAll.GetCheck() && !m_btnShab.GetCheck() ) continue; }
  293. else if( CStock::typeszA == stocktype )
  294. { if( !m_btnAll.GetCheck() && !m_btnSzna.GetCheck() ) continue; }
  295. else if( CStock::typeszB == stocktype )
  296. { if( !m_btnAll.GetCheck() && !m_btnSznb.GetCheck() ) continue; }
  297. else
  298. { continue; }
  299. BOOL bSelected = bAnd;
  300. for( int k=0; k<m_listCond.GetCount(); k++ )
  301. {
  302. FILTERINFO_CONDITION * pCond = (FILTERINFO_CONDITION *)m_listCond.GetItemData(k);
  303. double dValue = 0;
  304. BOOL bOK = FALSE;
  305. if( pCond && AfxGetVariantValue( pCond->nVariantID, info, &dValue, &container ) )
  306. {
  307. bOK = TRUE;
  308. if( pCond->bHasMoreThan && dValue < pCond->dMoreThan )
  309. bOK = FALSE;
  310. if( pCond->bHasLessThan && dValue > pCond->dLessThan )
  311. bOK = FALSE;
  312. }
  313. if( bAnd && !bOK )
  314. {
  315. bSelected = FALSE;
  316. break;
  317. }
  318. if( !bAnd && bOK )
  319. {
  320. bSelected = TRUE;
  321. break;
  322. }
  323. }
  324. if( bSelected )
  325. {
  326. int nItem = m_listResult.AddString( CString(info.GetStockCode()) + "(" + info.GetStockName() + ")" );
  327. m_listResult.SetItemData( nItem, i );
  328. }
  329. }
  330. m_ctrlProgress.SetPos( container.GetSize() );
  331. m_btnAddToGroup.EnableWindow( TRUE );
  332. }
  333. void CFilterInfoDlg::OnAddtogroup() 
  334. {
  335. CSelectGrpDlg dlg;
  336. dlg.SetMode( CSelectGrpDlg::modeGroup );
  337. if( IDOK == dlg.DoModal() )
  338. {
  339. CString strGrpName = dlg.GetSelectedName();
  340. CDomainContainer & groups = AfxGetGroupContainer();
  341. CSPStringArray astrStocks;
  342. astrStocks.SetSize( 0, m_listResult.GetCount() );
  343. for( int i=0; i<m_listResult.GetCount(); i++ )
  344. {
  345. CString rString;
  346. m_listResult.GetText( i, rString );
  347. if( rString.GetLength() > 0 )
  348. {
  349. int nIndex = rString.Find( "(" );
  350. if( -1 != nIndex )
  351. rString = rString.Left(nIndex);
  352. astrStocks.Add( rString );
  353. }
  354. }
  355. groups.AddDomainStock( strGrpName, astrStocks );
  356. }
  357. }