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

金融证券系统

开发平台:

Visual C++

  1. // SetColumnDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "SetColumnDlg.h"
  5. #include "BaseIndexDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CColListCtrl
  13. #define IDC_COLLISTCTRL_COMBOBOX 100
  14. CColListCtrl::CColListCtrl()
  15. {
  16. m_nCurItem = -1;
  17. m_nComboBoxColumn = -1;
  18. }
  19. CColListCtrl::~CColListCtrl()
  20. {
  21. for( int i=0; i<m_aptrItemStrings.GetSize(); i++ )
  22. {
  23. CStringArray * pastr = (CStringArray *)m_aptrItemStrings.ElementAt(i);
  24. if( NULL != pastr )
  25. delete pastr;
  26. }
  27. m_aptrItemStrings.RemoveAll();
  28. }
  29. int CColListCtrl::SetComboBoxColumn( int nCol )
  30. {
  31. CHeaderCtrl * pHeaderCtrl = GetHeaderCtrl();
  32. if( pHeaderCtrl )
  33. {
  34. ASSERT( nCol < pHeaderCtrl->GetItemCount() );
  35. }
  36. m_nComboBoxColumn = nCol;
  37. return m_nComboBoxColumn;
  38. }
  39. int CColListCtrl::SetItemStrings( int nItem, CStringArray &astr )
  40. {
  41. ASSERT( nItem <= 10000 );
  42. if( m_aptrItemStrings.GetSize() <= nItem )
  43. {
  44. int nSizeOld = m_aptrItemStrings.GetSize();
  45. m_aptrItemStrings.SetSize( nItem+1 );
  46. for( int i=nSizeOld; i<m_aptrItemStrings.GetSize(); i++ )
  47. {
  48. m_aptrItemStrings.SetAt( i, NULL );
  49. }
  50. }
  51. CStringArray * pastrNew = new CStringArray;
  52. ASSERT( pastrNew && nItem < m_aptrItemStrings.GetSize() );
  53. if( pastrNew && nItem < m_aptrItemStrings.GetSize() )
  54. {
  55. pastrNew->Copy( astr );
  56. m_aptrItemStrings.SetAt( nItem, pastrNew );
  57. return nItem;
  58. }
  59. return -1;
  60. }
  61. BEGIN_MESSAGE_MAP(CColListCtrl, CListCtrl)
  62. //{{AFX_MSG_MAP(CColListCtrl)
  63. ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
  64. ON_NOTIFY_REFLECT(NM_KILLFOCUS, OnKillfocus)
  65. ON_WM_KILLFOCUS()
  66. ON_WM_NCLBUTTONDOWN()
  67. //}}AFX_MSG_MAP
  68. END_MESSAGE_MAP()
  69. /////////////////////////////////////////////////////////////////////////////
  70. // CColListCtrl message handlers
  71. void CColListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
  72. {
  73. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  74. if( -1 == pNMListView->iItem )
  75. return;
  76. if( -1 == m_nComboBoxColumn )
  77. return;
  78. if( m_nComboBoxColumn == pNMListView->iSubItem )
  79. {
  80. ShowItemComboBox( pNMListView->iItem );
  81. }
  82. else
  83. {
  84. HideItemComboBox( );
  85. }
  86. *pResult = 0;
  87. }
  88. void CColListCtrl::OnKillfocus(NMHDR* pNMHDR, LRESULT* pResult) 
  89. {
  90. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  91. if(  ::GetFocus() != m_comboBox.GetSafeHwnd() )
  92. {
  93. HideItemComboBox( );
  94. }
  95. *pResult = 0;
  96. }
  97. BOOL CColListCtrl::CreateComboBox( int nItem ) 
  98. {
  99. if( m_nComboBoxColumn < 0 || nItem < 0 )
  100. return FALSE;
  101. // Create
  102. if( !m_comboBox.GetSafeHwnd() )
  103. {
  104. CRect rectItem( 0, 0, 35, 136 );
  105. GetSubItemRect( nItem, m_nComboBoxColumn, LVIR_BOUNDS, rectItem );
  106. CRect rect( 0, 0, rectItem.Width(), rectItem.Height()+120 );
  107. if( !m_comboBox.Create( WS_CHILD | CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | CBS_HASSTRINGS,
  108. rect, this, IDC_COLLISTCTRL_COMBOBOX ) )
  109. return FALSE;
  110. HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
  111. if (hFont == NULL)
  112. hFont = (HFONT)GetStockObject(ANSI_VAR_FONT);
  113. m_comboBox.SendMessage(WM_SETFONT, (WPARAM)hFont);
  114. }
  115. // Add Strings
  116. if( nItem >= 0 && nItem < m_aptrItemStrings.GetSize() )
  117. {
  118. CStringArray * pastr = (CStringArray *) m_aptrItemStrings.ElementAt(nItem);
  119. if( NULL != pastr && pastr->GetSize() > 0 )
  120. {
  121. m_comboBox.ResetContent();
  122. for( int k=0; k<pastr->GetSize(); k++ )
  123. m_comboBox.AddString( pastr->ElementAt(k) );
  124. m_comboBox.SelectString( 0, GetItemText(nItem,m_nComboBoxColumn) );
  125. return TRUE;
  126. }
  127. }
  128. return FALSE;
  129. }
  130. int CColListCtrl::ShowItemComboBox( int nItem )
  131. {
  132. // Hide and Save Old
  133. HideItemComboBox( );
  134. m_nCurItem = nItem;
  135. // Valid
  136. if( nItem < 0 || m_nComboBoxColumn < 0 )
  137. return -1;
  138. // Create and Show
  139. if( CreateComboBox( nItem ) )
  140. {
  141. CRect rect;
  142. GetSubItemRect( nItem, m_nComboBoxColumn, LVIR_BOUNDS, rect );
  143. m_comboBox.SetWindowPos( NULL, rect.left, rect.top+1, rect.Width(), rect.Height()-1, SWP_SHOWWINDOW );
  144. m_comboBox.SetFocus();
  145. m_comboBox.SelectString( 0, GetItemText( nItem, m_nComboBoxColumn ) );
  146. m_comboBox.ShowDropDown( TRUE );
  147. }
  148. return 0;
  149. }
  150. int CColListCtrl::HideItemComboBox( )
  151. {
  152. // Save Old
  153. if( m_nCurItem >= 0 && m_nComboBoxColumn >= 0 
  154. && m_comboBox.GetSafeHwnd() && m_comboBox.IsWindowVisible() )
  155. {
  156. CString strText;
  157. m_comboBox.GetWindowText( strText );
  158. SetItemText( m_nCurItem, m_nComboBoxColumn, strText );
  159. }
  160. // Clear m_nCurItem
  161. m_nCurItem = -1;
  162. if( NULL == m_comboBox.GetSafeHwnd() || !m_comboBox.IsWindowVisible() )
  163. return -1;
  164. m_comboBox.SetWindowPos( NULL, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE );
  165. Invalidate( );
  166. return 0;
  167. }
  168. void CColListCtrl::OnKillFocus(CWnd* pNewWnd) 
  169. {
  170. CListCtrl::OnKillFocus(pNewWnd);
  171. if( pNewWnd->GetSafeHwnd() != m_comboBox.GetSafeHwnd() )
  172. {
  173. HideItemComboBox( );
  174. }
  175. }
  176. BOOL CColListCtrl::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
  177. {
  178. if( IDC_COLLISTCTRL_COMBOBOX == nID && EN_KILLFOCUS == nCode )
  179. {
  180. HideItemComboBox( );
  181. }
  182. return CListCtrl::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  183. }
  184. void CColListCtrl::OnNcLButtonDown(UINT nHitTest, CPoint point) 
  185. {
  186. HideItemComboBox( );
  187. CListCtrl::OnNcLButtonDown(nHitTest, point);
  188. }
  189. /////////////////////////////////////////////////////////////////////////////
  190. // CSetColumnDlg dialog
  191. CSetColumnDlg::CSetColumnDlg(CWnd* pParent /*=NULL*/)
  192. : CDialog(CSetColumnDlg::IDD, pParent)
  193. {
  194. //{{AFX_DATA_INIT(CSetColumnDlg)
  195. // NOTE: the ClassWizard will add member initialization here
  196. //}}AFX_DATA_INIT
  197. m_nYieldAverageDaysOld = AfxGetProfile().GetYieldAverageDays();
  198. m_bUserIndexModified = FALSE;
  199. }
  200. void CSetColumnDlg::SetListColumnItems( CSPDWordArray & anShow, BOOL bSetDefault )
  201. {
  202. m_listColumn.DeleteAllItems( );
  203. CSPDWordArray & anOrder = AfxGetProfile().GetSListColumnsOrder( );
  204. CIndexContainer & acol = AfxGetProfile().GetSListColumnsUser( );
  205. CString strDay;
  206. strDay.LoadString( IDS_SLHHDR_DAY );
  207. int nCount = 0;
  208. for( int i=0; i<anOrder.GetSize(); i++ )
  209. {
  210. // Set Item Text
  211. CString strName, strDes;
  212. int nItem = -1;
  213. UINT nID = anOrder[i];
  214. strName = AfxGetVariantName( nID, FALSE );
  215. if( strName.IsEmpty() )
  216. continue;
  217. if( nID >= SLH_USERDEFINE_BEGIN )
  218. strDes.LoadString( IDS_SETCOLUMN_USERDEFINE );
  219. else
  220. strDes = (LPCTSTR)AfxGetSLHDescript( nID );
  221. nItem = m_listColumn.InsertItem( nCount, strName, -1 );
  222. m_listColumn.SetItemText( nItem, 1, strDes );
  223. m_listColumn.SetItemData( nItem, nID );
  224. nCount ++;
  225. // SetCheck
  226. for( int j=0; j<anShow.GetSize(); j++ )
  227. {
  228. if( anShow[j] == nID )
  229. {
  230. m_listColumn.SetCheck( nItem );
  231. break;
  232. }
  233. }
  234. // Set Column Combo Text
  235. CStringArray astr;
  236. if( SLH_DIFF == nID || SLH_DIFFPERCENT == nID || SLH_SCOPE == nID
  237. || SLH_RATIO_CHANGEHAND == nID || SLH_RATIO_VOLUME == nID || SLH_RS == nID )
  238. {
  239. for( int nDays=1; nDays<=STKLIB_DAYS_CALCULATE; nDays ++ )
  240. {
  241. CString strTemp;
  242. strTemp.Format( "%d%s", nDays, strDay );
  243. astr.Add( strTemp );
  244. }
  245. }
  246. else if( SLH_ANNGAINS_AVERAGE == nID )
  247. {
  248. CString strTemp;
  249. strTemp.Format( "%d%s", 20, strDay ); astr.Add( strTemp );
  250. strTemp.Format( "%d%s", 40, strDay ); astr.Add( strTemp );
  251. strTemp.Format( "%d%s", 60, strDay ); astr.Add( strTemp );
  252. strTemp.Format( "%d%s", 120, strDay ); astr.Add( strTemp );
  253. strTemp.Format( "%d%s", STKLIB_DAYS_INONEYEAR, strDay ); astr.Add( strTemp );
  254. strTemp.Format( "%d%s", 2*STKLIB_DAYS_INONEYEAR, strDay ); astr.Add( strTemp );
  255. strTemp.Format( "%d%s", 3*STKLIB_DAYS_INONEYEAR, strDay ); astr.Add( strTemp );
  256. strTemp.Format( "%d%s", 6*STKLIB_DAYS_INONEYEAR, strDay ); astr.Add( strTemp );
  257. strTemp.Format( "%d%s", 10*STKLIB_DAYS_INONEYEAR, strDay ); astr.Add( strTemp );
  258. }
  259. if( astr.GetSize() > 0 )
  260. m_listColumn.SetItemStrings( nItem, astr );
  261. // Set Current Parameter
  262. CString strParam;
  263. if( SLH_DIFF == nID )
  264. {
  265. if( bSetDefault ) AfxGetProfile().SetDiffDays( -1 );
  266. strParam.Format( "%d%s", AfxGetProfile().GetDiffDays(), strDay );
  267. }
  268. else if( SLH_DIFFPERCENT == nID )
  269. {
  270. if( bSetDefault ) AfxGetProfile().SetDiffPercentDays( -1 );
  271. strParam.Format( "%d%s", AfxGetProfile().GetDiffPercentDays(), strDay );
  272. }
  273. else if( SLH_SCOPE == nID )
  274. {
  275. if( bSetDefault ) AfxGetProfile().SetScopeDays( -1 );
  276. strParam.Format( "%d%s", AfxGetProfile().GetScopeDays(), strDay );
  277. }
  278. else if( SLH_RATIO_CHANGEHAND == nID )
  279. {
  280. if( bSetDefault ) AfxGetProfile().SetRatioChangeHandDays( -1 );
  281. strParam.Format( "%d%s", AfxGetProfile().GetRatioChangeHandDays(), strDay );
  282. }
  283. else if( SLH_RATIO_VOLUME == nID )
  284. {
  285. if( bSetDefault ) AfxGetProfile().SetRatioVolumeDays( -1 );
  286. strParam.Format( "%d%s", AfxGetProfile().GetRatioVolumeDays( ), strDay );
  287. }
  288. else if( SLH_RS == nID )
  289. {
  290. if( bSetDefault ) AfxGetProfile().SetRSDays( -1 );
  291. strParam.Format( "%d%s", AfxGetProfile().GetRSDays( ), strDay );
  292. }
  293. else if( SLH_ANNGAINS_AVERAGE == nID )
  294. {
  295. if( bSetDefault ) AfxGetProfile().SetYieldAverageDays( -1 );
  296. strParam.Format( "%d%s", AfxGetProfile().GetYieldAverageDays( ), strDay );
  297. }
  298. else if( SLH_ANNGAINS_STDDEV == nID || SLH_BETA == nID || SLH_SHARP == nID )
  299. {
  300. strParam.LoadString( IDS_SETCOLUMN_SAMEASYIELDAVERAGE );
  301. }
  302. if( strParam.GetLength() > 0 )
  303. m_listColumn.SetItemText( nItem, 2, strParam );
  304. }
  305. m_listColumn.SetComboBoxColumn( 2 );
  306. m_listColumn.SetItemState( 0, LVIS_SELECTED, LVIS_SELECTED );
  307. }
  308. void CSetColumnDlg::DoDataExchange(CDataExchange* pDX)
  309. {
  310. CDialog::DoDataExchange(pDX);
  311. //{{AFX_DATA_MAP(CSetColumnDlg)
  312. DDX_Control(pDX, IDCANCEL, m_btnCancel);
  313. DDX_Control(pDX, IDC_SETDEFAULT, m_btnSetDefault);
  314. DDX_Control(pDX, IDC_NEWINDEX, m_btnNewIndex);
  315. DDX_Control(pDX, IDC_MOVEUP, m_btnMoveUp);
  316. DDX_Control(pDX, IDC_MOVEDOWN, m_btnMoveDown);
  317. DDX_Control(pDX, IDC_SETALL, m_btnSetAll);
  318. DDX_Control(pDX, IDOK, m_btnOK);
  319. DDX_Control(pDX, IDC_DELINDEX, m_btnDelIndex);
  320. DDX_Control(pDX, IDC_EDITINDEX, m_btnEditIndex);
  321. DDX_Control(pDX, IDC_COLUMNLIST, m_listColumn);
  322. //}}AFX_DATA_MAP
  323. }
  324. BEGIN_MESSAGE_MAP(CSetColumnDlg, CDialog)
  325. //{{AFX_MSG_MAP(CSetColumnDlg)
  326. ON_BN_CLICKED(IDC_MOVEUP, OnMoveup)
  327. ON_BN_CLICKED(IDC_MOVEDOWN, OnMovedown)
  328. ON_BN_CLICKED(IDC_NEWINDEX, OnNewindex)
  329. ON_BN_CLICKED(IDC_EDITINDEX, OnEditindex)
  330. ON_BN_CLICKED(IDC_DELINDEX, OnDelindex)
  331. ON_NOTIFY(LVN_ITEMCHANGED, IDC_COLUMNLIST, OnItemchangedColumnlist)
  332. ON_BN_CLICKED(IDC_SETDEFAULT, OnSetdefault)
  333. ON_NOTIFY(NM_DBLCLK, IDC_COLUMNLIST, OnDblclkColumnlist)
  334. ON_BN_CLICKED(IDC_SETALL, OnSetall)
  335. //}}AFX_MSG_MAP
  336. END_MESSAGE_MAP()
  337. /////////////////////////////////////////////////////////////////////////////
  338. // CSetColumnDlg message handlers
  339. BOOL CSetColumnDlg::OnInitDialog() 
  340. {
  341. CDialog::OnInitDialog();
  342. // TODO: Add extra initialization here
  343. m_listColumn.SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP
  344. | LVS_EX_FLATSB | LVS_EX_REGIONAL | LVS_EX_INFOTIP | LVS_EX_UNDERLINEHOT );
  345. CRect rectList;
  346. m_listColumn.GetClientRect( &rectList );
  347. CString strHeaderName, strHeaderDescript, strHeaderSetting, strUserDefine;
  348. strHeaderName.LoadString( IDS_SETCOLUMN_NAME );
  349. strHeaderDescript.LoadString( IDS_SETCOLUMN_DESCRIPT );
  350. strHeaderSetting.LoadString( IDS_SETCOLUMN_SETTING );
  351. strUserDefine.LoadString( IDS_SETCOLUMN_USERDEFINE );
  352. m_listColumn.InsertColumn( 0, strHeaderName, LVCFMT_CENTER, rectList.Width() / 3 - 8 );
  353. m_listColumn.InsertColumn( 1, strHeaderDescript, LVCFMT_CENTER, rectList.Width() / 3 - 2 );
  354. m_listColumn.InsertColumn( 2, strHeaderSetting, LVCFMT_CENTER, rectList.Width() / 3 - 8 );
  355. SetListColumnItems( AfxGetProfile().GetSListColumnsShow(), FALSE );
  356. return TRUE;  // return TRUE unless you set the focus to a control
  357.               // EXCEPTION: OCX Property Pages should return FALSE
  358. }
  359. void CSetColumnDlg::OnMoveup() 
  360. {
  361. // TODO: Add your control notification handler code here
  362. if( 0 == m_listColumn.GetSelectedCount( ) )
  363. {
  364. AfxMessageBox( IDS_SETCOLUMN_NOSEL, MB_OK | MB_ICONINFORMATION );
  365. return;
  366. }
  367. int nSelected = -1;
  368. for( int i=0; i<m_listColumn.GetItemCount(); i++ )
  369. {
  370. if( LVIS_SELECTED == m_listColumn.GetItemState(i,LVIS_SELECTED) )
  371. {
  372. nSelected = i;
  373. break;
  374. }
  375. }
  376. if( -1 == nSelected )
  377. {
  378. AfxMessageBox( IDS_SETCOLUMN_NOSEL, MB_OK | MB_ICONINFORMATION );
  379. return;
  380. }
  381. if( 0 == nSelected )
  382. {
  383. AfxMessageBox( IDS_SETCOLUMN_FIRST, MB_OK | MB_ICONINFORMATION );
  384. return;
  385. }
  386. DWORD dwData = m_listColumn.GetItemData( nSelected );
  387. CString strName = m_listColumn.GetItemText( nSelected, 0 );
  388. CString strDis = m_listColumn.GetItemText( nSelected, 1 );
  389. BOOL bCheck = m_listColumn.GetCheck( nSelected );
  390. if( m_listColumn.DeleteItem( nSelected ) )
  391. {
  392. int nItem = m_listColumn.InsertItem( nSelected-1, strName, -1 );
  393. m_listColumn.SetItemText( nItem, 1, strDis );
  394. m_listColumn.SetItemData( nItem, dwData );
  395. m_listColumn.SetItemState( nItem, LVIS_SELECTED, LVIS_SELECTED );
  396. m_listColumn.SetCheck( nItem, bCheck );
  397. }
  398. }
  399. void CSetColumnDlg::OnMovedown() 
  400. {
  401. // TODO: Add your control notification handler code here
  402. if( 0 == m_listColumn.GetSelectedCount( ) )
  403. {
  404. AfxMessageBox( IDS_SETCOLUMN_NOSEL, MB_OK | MB_ICONINFORMATION );
  405. return;
  406. }
  407. int nSelected = -1;
  408. for( int i=0; i<m_listColumn.GetItemCount(); i++ )
  409. {
  410. if( LVIS_SELECTED == m_listColumn.GetItemState(i,LVIS_SELECTED) )
  411. {
  412. nSelected = i;
  413. break;
  414. }
  415. }
  416. if( -1 == nSelected )
  417. {
  418. AfxMessageBox( IDS_SETCOLUMN_NOSEL, MB_OK | MB_ICONINFORMATION );
  419. return;
  420. }
  421. if( m_listColumn.GetItemCount()-1 == nSelected )
  422. {
  423. AfxMessageBox( IDS_SETCOLUMN_LAST, MB_OK | MB_ICONINFORMATION );
  424. return;
  425. }
  426. DWORD dwData = m_listColumn.GetItemData( nSelected );
  427. CString strName = m_listColumn.GetItemText( nSelected, 0 );
  428. CString strDis = m_listColumn.GetItemText( nSelected, 1 );
  429. BOOL bCheck = m_listColumn.GetCheck( nSelected );
  430. if( m_listColumn.DeleteItem( nSelected ) )
  431. {
  432. int nItem = m_listColumn.InsertItem( nSelected+1, strName, -1 );
  433. m_listColumn.SetItemText( nItem, 1, strDis );
  434. m_listColumn.SetItemData( nItem, dwData );
  435. m_listColumn.SetItemState( nItem, LVIS_SELECTED, LVIS_SELECTED );
  436. m_listColumn.SetCheck( nItem, bCheck );
  437. }
  438. }
  439. void CSetColumnDlg::OnNewindex() 
  440. {
  441. // TODO: Add your control notification handler code here
  442. CBaseIndexDlg dlg;
  443. if( IDOK == dlg.DoModal() )
  444. {
  445. CIndex index = dlg.GetIndexInfo();
  446. CString strDis;
  447. strDis.LoadString( IDS_SETCOLUMN_USERDEFINE );
  448. int nItem = m_listColumn.InsertItem( m_listColumn.GetItemCount(), index.m_strName, -1 );
  449. m_listColumn.SetItemText( nItem, 1, strDis );
  450. m_listColumn.SetItemData( nItem, index.m_nID );
  451. m_listColumn.SetCheck( nItem, dlg.m_bAddToList );
  452. }
  453. }
  454. void CSetColumnDlg::OnEditindex() 
  455. {
  456. // TODO: Add your control notification handler code here
  457. if( 0 == m_listColumn.GetSelectedCount( ) )
  458. {
  459. AfxMessageBox( IDS_SETCOLUMN_NOSEL, MB_OK | MB_ICONINFORMATION );
  460. return;
  461. }
  462. int nSelected = -1;
  463. for( int i=0; i<m_listColumn.GetItemCount(); i++ )
  464. {
  465. if( LVIS_SELECTED == m_listColumn.GetItemState(i,LVIS_SELECTED) )
  466. {
  467. nSelected = i;
  468. break;
  469. }
  470. }
  471. if( -1 == nSelected )
  472. {
  473. AfxMessageBox( IDS_SETCOLUMN_NOSEL, MB_OK | MB_ICONINFORMATION );
  474. return;
  475. }
  476. DWORD dwData = m_listColumn.GetItemData( nSelected );
  477. if( dwData < SLH_USERDEFINE_BEGIN )
  478. {
  479. AfxMessageBox( IDS_SETCOLUMN_NOTUSERDEFINE, MB_OK | MB_ICONINFORMATION );
  480. return;
  481. }
  482. CBaseIndexDlg dlg;
  483. dlg.m_bAddToList = m_listColumn.GetCheck( nSelected );
  484. dlg.SetIndexInfo( dwData );
  485. if( IDOK == dlg.DoModal() )
  486. {
  487. CIndex index = dlg.GetIndexInfo();
  488. m_listColumn.SetItemText( nSelected, 0, index.m_strName );
  489. m_listColumn.SetCheck( nSelected, dlg.m_bAddToList );
  490. m_bUserIndexModified = TRUE;
  491. }
  492. }
  493. void CSetColumnDlg::OnDelindex() 
  494. {
  495. // TODO: Add your control notification handler code here
  496. if( 0 == m_listColumn.GetSelectedCount( ) )
  497. {
  498. AfxMessageBox( IDS_SETCOLUMN_NOSEL, MB_OK | MB_ICONINFORMATION );
  499. return;
  500. }
  501. int nSelected = -1;
  502. for( int i=0; i<m_listColumn.GetItemCount(); i++ )
  503. {
  504. if( LVIS_SELECTED == m_listColumn.GetItemState(i,LVIS_SELECTED) )
  505. {
  506. nSelected = i;
  507. break;
  508. }
  509. }
  510. if( -1 == nSelected )
  511. {
  512. AfxMessageBox( IDS_SETCOLUMN_NOSEL, MB_OK | MB_ICONINFORMATION );
  513. return;
  514. }
  515. DWORD dwData = m_listColumn.GetItemData( nSelected );
  516. if( dwData < SLH_USERDEFINE_BEGIN )
  517. {
  518. AfxMessageBox( IDS_SETCOLUMN_NOTUSERDEFINE, MB_OK | MB_ICONINFORMATION );
  519. return;
  520. }
  521. if( IDYES == AfxMessageBox( IDS_SETCOLUMN_QUERYDEL, MB_YESNO | MB_ICONINFORMATION ) )
  522. {
  523. m_listColumn.DeleteItem( nSelected );
  524. CIndexContainer & acol = AfxGetProfile().GetSListColumnsUser();
  525. acol.RemoveIndex( dwData );
  526. }
  527. }
  528. void CSetColumnDlg::OnOK() 
  529. {
  530. // TODO: Add extra validation here
  531. m_btnOK.EnableWindow( FALSE );
  532. // Store Show Items
  533. CSPDWordArray & anShow = AfxGetProfile().GetSListColumnsShow( );
  534. CSPDWordArray & anOrder = AfxGetProfile().GetSListColumnsOrder( );
  535. anShow.RemoveAll();
  536. anOrder.RemoveAll();
  537. for( int i=0; i<m_listColumn.GetItemCount(); i++ )
  538. {
  539. UINT nID = m_listColumn.GetItemData( i );
  540. anOrder.Add( nID );
  541. if( m_listColumn.GetCheck( i ) )
  542. anShow.Add( nID );
  543. }
  544. if( 0 == anShow.GetSize() && IDNO == AfxMessageBox( IDS_SETCOLUMN_NOSELECT, MB_YESNO ) )
  545. return;
  546. // Store Parameters
  547. m_listColumn.HideItemComboBox( );
  548. for( int nItem=0; nItem<m_listColumn.GetItemCount(); nItem++ )
  549. {
  550. // Set Item Text
  551. UINT nID = m_listColumn.GetItemData(nItem);
  552. // Set Column Combo Text
  553. CString strParam;
  554. if( SLH_DIFF == nID )
  555. {
  556. strParam = m_listColumn.GetItemText( nItem, 2 );
  557. int nDays = atol( strParam );
  558. AfxGetProfile().SetDiffDays( nDays );
  559. }
  560. else if( SLH_DIFFPERCENT == nID )
  561. {
  562. strParam = m_listColumn.GetItemText( nItem, 2 );
  563. int nDays = atol( strParam );
  564. AfxGetProfile().SetDiffPercentDays( nDays );
  565. }
  566. else if( SLH_SCOPE == nID )
  567. {
  568. strParam = m_listColumn.GetItemText( nItem, 2 );
  569. int nDays = atol( strParam );
  570. AfxGetProfile().SetScopeDays( nDays );
  571. }
  572. else if( SLH_RATIO_CHANGEHAND == nID )
  573. {
  574. strParam = m_listColumn.GetItemText( nItem, 2 );
  575. int nDays = atol( strParam );
  576. AfxGetProfile().SetRatioChangeHandDays( nDays );
  577. }
  578. else if( SLH_RATIO_VOLUME == nID )
  579. {
  580. strParam = m_listColumn.GetItemText( nItem, 2 );
  581. int nDays = atol( strParam );
  582. AfxGetProfile().SetRatioVolumeDays( nDays );
  583. }
  584. else if( SLH_RS == nID )
  585. {
  586. strParam = m_listColumn.GetItemText( nItem, 2 );
  587. int nDays = atol( strParam );
  588. AfxGetProfile().SetRSDays( nDays );
  589. }
  590. else if( SLH_ANNGAINS_AVERAGE == nID )
  591. {
  592. strParam = m_listColumn.GetItemText( nItem, 2 );
  593. int nDays = atol( strParam );
  594. AfxGetProfile().SetYieldAverageDays( nDays );
  595. }
  596. }
  597. AfxGetProfile().StoreProfile( );
  598. CDialog::OnOK();
  599. // Recalculate Yield Average
  600. if( AfxGetProfile().GetYieldAverageDays() != m_nYieldAverageDaysOld )
  601. {
  602. // Need Recalculate
  603. if( IDYES == AfxMessageBox( IDS_SETCOLUMN_IFRECALCULATE, MB_YESNO|MB_ICONINFORMATION ) )
  604. {
  605. AfxRecalculateYield( AfxGetProfile().GetYieldAverageDays(), TRUE );
  606. AfxGetStockContainer().ReloadBase( &AfxGetDB() );
  607. AfxGetSListStockContainer().ReRetrieveFromStatic( AfxGetActiveStrategy() );
  608. }
  609. }
  610. // Clear the User Defined Index Cache
  611. if( m_bUserIndexModified )
  612. AfxGetSListStockContainer().ClearVariantSaveValue();
  613. }
  614. void CSetColumnDlg::OnItemchangedColumnlist(NMHDR* pNMHDR, LRESULT* pResult) 
  615. {
  616. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  617. // TODO: Add your control notification handler code here
  618. if( LVIS_SELECTED & pNMListView->uNewState )
  619. {
  620. DWORD id = m_listColumn.GetItemData( pNMListView->iItem );
  621. BOOL b = ( id >= SLH_USERDEFINE_BEGIN );
  622. m_btnDelIndex.EnableWindow( b );
  623. m_btnEditIndex.EnableWindow( b );
  624. }
  625. *pResult = 0;
  626. }
  627. void CSetColumnDlg::OnSetdefault() 
  628. {
  629. // TODO: Add your control notification handler code here
  630. if( IDYES == AfxMessageBox( IDS_SETCOLUMN_SETDEFAULT, MB_YESNO | MB_ICONINFORMATION ) )
  631. {
  632. AfxGetProfile().SetSListColumnsDefault( );
  633. SetListColumnItems( AfxGetProfile().GetSListColumnsShow(), TRUE );
  634. }
  635. }
  636. void CSetColumnDlg::OnSetall() 
  637. {
  638. // TODO: Add your control notification handler code here
  639. int nCheck = m_btnSetAll.GetCheck();
  640. for( int i=0; i<m_listColumn.GetItemCount(); i++ )
  641. m_listColumn.SetCheck( i, nCheck );
  642. }
  643. void CSetColumnDlg::OnDblclkColumnlist(NMHDR* pNMHDR, LRESULT* pResult) 
  644. {
  645. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  646. // TODO: Add your control notification handler code here
  647. DWORD id = m_listColumn.GetItemData( pNMListView->iItem );
  648. if( id >= SLH_USERDEFINE_BEGIN )
  649. OnEditindex( );
  650. *pResult = 0;
  651. }