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

金融证券系统

开发平台:

Visual C++

  1. // SelectStk.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "SelectStk.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CSelectStk property page
  12. IMPLEMENT_DYNCREATE(CSelectStk, CPropertyPageEx)
  13. CSelectStk::CSelectStk() : CPropertyPageEx(CSelectStk::IDD)
  14. {
  15. //{{AFX_DATA_INIT(CSelectStk)
  16. // NOTE: the ClassWizard will add member initialization here
  17. //}}AFX_DATA_INIT
  18. m_dwButtonFlags = PSWIZB_BACK | PSWIZB_NEXT;
  19. m_bModified = FALSE;
  20. }
  21. CSelectStk::CSelectStk(UINT nIDCaption, UINT nIDTitle, UINT nIDSubTitle)
  22. : CPropertyPageEx(CSelectStk::IDD, nIDCaption, nIDTitle, nIDSubTitle)
  23. {
  24. m_dwButtonFlags = PSWIZB_BACK | PSWIZB_NEXT;
  25. m_bModified = FALSE;
  26. }
  27. CSelectStk::~CSelectStk()
  28. {
  29. }
  30. void CSelectStk::DoDataExchange(CDataExchange* pDX)
  31. {
  32. CPropertyPageEx::DoDataExchange(pDX);
  33. //{{AFX_DATA_MAP(CSelectStk)
  34. DDX_Control(pDX, IDC_REMOVEALL, m_btnRemoveAll);
  35. DDX_Control(pDX, IDC_REMOVESELECTED, m_btnRemoveSelected);
  36. DDX_Control(pDX, IDC_ADDALL, m_btnAddAll);
  37. DDX_Control(pDX, IDC_ADDSELECTED, m_btnAddSelected);
  38. DDX_Control(pDX, IDC_LIST_STOCKDEST, m_listStockDest);
  39. DDX_Control(pDX, IDC_LIST_STOCKSRC, m_listStockSrc);
  40. DDX_Control(pDX, IDC_COMBO_GROUPSRC, m_comboGroupSrc);
  41. DDX_Control(pDX, IDC_EDITCODE, m_editCode);
  42. //}}AFX_DATA_MAP
  43. }
  44. BEGIN_MESSAGE_MAP(CSelectStk, CPropertyPageEx)
  45. //{{AFX_MSG_MAP(CSelectStk)
  46. ON_BN_CLICKED(IDC_ADDSELECTED, OnAddselected)
  47. ON_BN_CLICKED(IDC_ADDALL, OnAddall)
  48. ON_BN_CLICKED(IDC_REMOVESELECTED, OnRemoveselected)
  49. ON_BN_CLICKED(IDC_REMOVEALL, OnRemoveall)
  50. ON_EN_CHANGE(IDC_EDITCODE, OnChangeEditcode)
  51. ON_CBN_SELCHANGE(IDC_COMBO_GROUPSRC, OnSelchangeComboGroupsrc)
  52. ON_LBN_DBLCLK(IDC_LIST_STOCKSRC, OnDblclkListStocksrc)
  53. ON_LBN_DBLCLK(IDC_LIST_STOCKDEST, OnDblclkListStockdest)
  54. //}}AFX_MSG_MAP
  55. END_MESSAGE_MAP()
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CSelectStk message handlers
  58. BOOL CSelectStk::OnInitDialog()
  59. {
  60. CPropertyPageEx::OnInitDialog();
  61. CWaitCursor waitcursor;
  62. // TODO: Add extra initialization here
  63. CDomainContainer & groups = AfxGetGroupContainer( );
  64. CDomainContainer & domains = AfxGetDomainContainer( );
  65. CStockContainer & container = AfxGetStockContainer();
  66. // Src
  67. m_comboGroupSrc.InitStrings( TRUE, TRUE, groups );
  68. m_comboGroupSrc.SetCurSel( 0 );
  69. OnSelchangeComboGroupsrc();
  70. // Dest
  71. m_listStockDest.InitStorage( m_listStockSrc.GetCount(), 32 );
  72. CStockContainer cntn;
  73. if( cntn.RetrieveSpecify( m_domainTemp ) )
  74. {
  75. for( int i=0; i<cntn.GetSize(); i++ )
  76. {
  77. CStockInfo & info = cntn.ElementAt(i);
  78. CString strItem = CString(info.GetStockCode()) + "(" + info.GetStockShortName() + ")    ";
  79. while( strItem.GetLength() < 16 ) strItem += " ";
  80. strItem += info.GetStockName() ;
  81. int nItem = m_listStockDest.AddString( strItem );
  82. }
  83. }
  84. return TRUE;  // return TRUE unless you set the focus to a control
  85.               // EXCEPTION: OCX Property Pages should return FALSE
  86. }
  87. void CSelectStk::OnAddselected() 
  88. {
  89. // TODO: Add your control notification handler code here
  90. m_listStockDest.SelectItem( -1, FALSE );
  91. for( int i=0; i<m_listStockSrc.GetCount(); i++ )
  92. {
  93. int bSel = m_listStockSrc.GetSelected(i);
  94. if( LB_ERR != bSel && bSel )
  95. {
  96. CString rString, strStockCode;
  97. m_listStockSrc.GetText(i,rString);
  98. int nIndex = rString.Find( '(' );
  99. if( -1 != nIndex )
  100. strStockCode = rString.Left( nIndex );
  101. int nSelDest = -1;
  102. if( m_domainTemp.AddStock( strStockCode ) )
  103. nSelDest = m_listStockDest.AddString( rString );
  104. else
  105. nSelDest = m_listStockDest.FindString( -1, rString );
  106. m_listStockDest.SelectAndShowItem( nSelDest );
  107. }
  108. }
  109. m_editCode.SetWindowText( NULL );
  110. m_bModified = TRUE;
  111. }
  112. void CSelectStk::OnAddall() 
  113. {
  114. // TODO: Add your control notification handler code here
  115. m_listStockDest.SelectItem( -1, FALSE );
  116. for( int i=0; i<m_listStockSrc.GetCount(); i++ )
  117. {
  118. CString rString, strStockCode;
  119. m_listStockSrc.GetText(i,rString);
  120. int nIndex = rString.Find( '(' );
  121. if( -1 != nIndex )
  122. strStockCode = rString.Left( nIndex );
  123. int nSelDest = -1;
  124. if( m_domainTemp.AddStock( strStockCode ) )
  125. nSelDest = m_listStockDest.AddString( rString );
  126. else
  127. nSelDest = m_listStockDest.FindString( -1, rString );
  128. m_listStockDest.SelectItem( nSelDest, TRUE );
  129. }
  130. m_editCode.SetWindowText( NULL );
  131. m_bModified = TRUE;
  132. }
  133. void CSelectStk::OnRemoveselected() 
  134. {
  135. // TODO: Add your control notification handler code here
  136. for( int i=m_listStockDest.GetCount()-1; i>=0; i-- )
  137. {
  138. int bSel = m_listStockDest.GetSelected(i);
  139. if( LB_ERR != bSel && bSel )
  140. {
  141. CString rString, strStockCode;
  142. m_listStockDest.GetText(i,rString);
  143. int nIndex = rString.Find( '(' );
  144. if( -1 != nIndex )
  145. strStockCode = rString.Left( nIndex );
  146. if( m_domainTemp.RemoveStock( strStockCode ) )
  147. m_listStockDest.DeleteString( i );
  148. }
  149. }
  150. m_bModified = TRUE;
  151. }
  152. void CSelectStk::OnRemoveall() 
  153. {
  154. // TODO: Add your control notification handler code here
  155. m_domainTemp.RemoveAll( );
  156. m_listStockDest.ResetContent( );
  157. m_bModified = TRUE;
  158. }
  159. void CSelectStk::OnDblclkListStocksrc() 
  160. {
  161. // TODO: Add your control notification handler code here
  162. m_listStockDest.SelectItem( -1, FALSE );
  163. int nCaretIndex = m_listStockSrc.GetCaretIndex();
  164. if( LB_ERR != nCaretIndex )
  165. {
  166. CString rString, strStockCode;
  167. m_listStockSrc.GetText(nCaretIndex,rString);
  168. m_listStockSrc.SelectItem( nCaretIndex, FALSE );
  169. int nIndex = rString.Find( '(' );
  170. if( -1 != nIndex )
  171. strStockCode = rString.Left( nIndex );
  172. int nSelDest = -1;
  173. if( m_domainTemp.AddStock( strStockCode ) )
  174. nSelDest = m_listStockDest.AddString( rString );
  175. else
  176. nSelDest = m_listStockDest.FindString( -1, rString );
  177. m_listStockDest.SelectAndShowItem( nSelDest );
  178. }
  179. m_bModified = TRUE;
  180. }
  181. void CSelectStk::OnDblclkListStockdest() 
  182. {
  183. // TODO: Add your control notification handler code here
  184. int nCaretIndex = m_listStockDest.GetCaretIndex();
  185. if( LB_ERR != nCaretIndex )
  186. {
  187. CString rString, strStockCode;
  188. m_listStockDest.GetText(nCaretIndex,rString);
  189. int nIndex = rString.Find( '(' );
  190. if( -1 != nIndex )
  191. strStockCode = rString.Left( nIndex );
  192. if( m_domainTemp.RemoveStock( strStockCode ) )
  193. m_listStockDest.DeleteString( nCaretIndex );
  194. }
  195. m_bModified = TRUE;
  196. }
  197. void CSelectStk::OnChangeEditcode() 
  198. {
  199. // TODO: If this is a RICHEDIT control, the control will not
  200. // send this notification unless you override the CNDDialog::OnInitDialog()
  201. // function and call CRichEditCtrl().SetEventMask()
  202. // with the ENM_CHANGE flag ORed into the mask.
  203. // TODO: Add your control notification handler code here
  204. CString strText;
  205. m_editCode.GetWindowText( strText );
  206. strText.TrimLeft();
  207. strText.TrimLeft();
  208. if( strText.GetLength() > 0 )
  209. {
  210. int nSel = m_comboGroupSrc.GetCurSel();
  211. if( CB_ERR == nSel ||
  212. CStockContainer::typeAll != (int)(m_comboGroupSrc.GetItemData( nSel )) )
  213. {
  214. m_comboGroupSrc.SelectGroupAll( );
  215. OnSelchangeComboGroupsrc();
  216. }
  217. }
  218. if( !m_listStockSrc.SelectCode( 0, strText ) )
  219. m_listStockSrc.SelectShortname( 0, strText );
  220. }
  221. void CSelectStk::OnSelchangeComboGroupsrc() 
  222. {
  223. // TODO: Add your control notification handler code here
  224. int nType = m_comboGroupSrc.GetCurSelType();
  225. CString strName = m_comboGroupSrc.GetCurSelName();
  226. m_listStockSrc.SetCurrentStocks( nType, strName, AfxGetGroupContainer() );
  227. }
  228. BOOL CSelectStk::PreTranslateMessage(MSG* pMsg) 
  229. {
  230. // TODO: Add your specialized code here and/or call the base class
  231. if( WM_KEYDOWN == pMsg->message )
  232. {
  233. if( VK_UP == pMsg->wParam )
  234. {
  235. if( ::GetFocus() == m_editCode.GetSafeHwnd() )
  236. {
  237. m_listStockSrc.SelectUp( );
  238. return TRUE;
  239. }
  240. }
  241. else if( VK_DOWN == pMsg->wParam )
  242. {
  243. if( ::GetFocus() == m_editCode.GetSafeHwnd() )
  244. {
  245. m_listStockSrc.SelectDown( );
  246. return TRUE;
  247. }
  248. }
  249. else if( VK_PRIOR == pMsg->wParam )
  250. {
  251. if( ::GetFocus() == m_editCode.GetSafeHwnd() )
  252. {
  253. m_listStockSrc.SelectPrior( );
  254. return TRUE;
  255. }
  256. }
  257. else if( VK_NEXT == pMsg->wParam )
  258. {
  259. if( ::GetFocus() == m_editCode.GetSafeHwnd() )
  260. {
  261. m_listStockSrc.SelectNext( );
  262. return TRUE;
  263. }
  264. }
  265. else if( VK_RETURN == pMsg->wParam )
  266. {
  267. OnAddselected( );
  268. return TRUE;
  269. }
  270. }
  271. return CPropertyPageEx::PreTranslateMessage(pMsg);
  272. }
  273. BOOL CSelectStk::OnSetActive() 
  274. {
  275. // TODO: Add your specialized code here and/or call the base class
  276. CPropertySheetEx * pSheet = DYNAMIC_DOWNCAST( CPropertySheetEx, GetParent() );
  277. if( pSheet )
  278. {
  279. pSheet->SetWizardButtons( m_dwButtonFlags );
  280. }
  281. return CPropertyPageEx::OnSetActive();
  282. }
  283. LRESULT CSelectStk::OnWizardNext() 
  284. {
  285. // TODO: Add your specialized code here and/or call the base class
  286. if( m_domainTemp.GetSize() == 0 )
  287. {
  288. AfxMessageBox( IDS_SELECTSTK_NOSELECTED, MB_OK | MB_ICONINFORMATION );
  289. return -1;
  290. }
  291. return CPropertyPageEx::OnWizardNext();
  292. }