⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setcolumndlg.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
// SetColumnDlg.cpp : implementation file
//

#include "stdafx.h"

#include "SetColumnDlg.h"
#include "BaseIndexDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CColListCtrl

#define		IDC_COLLISTCTRL_COMBOBOX	100

CColListCtrl::CColListCtrl()
{
	m_nCurItem			=	-1;
	m_nComboBoxColumn	=	-1;
}

CColListCtrl::~CColListCtrl()
{
	for( int i=0; i<m_aptrItemStrings.GetSize(); i++ )
	{
		CStringArray * pastr = (CStringArray *)m_aptrItemStrings.ElementAt(i);
		if( NULL != pastr )
			delete	pastr;
	}
	m_aptrItemStrings.RemoveAll();
}

int CColListCtrl::SetComboBoxColumn( int nCol )
{
	CHeaderCtrl * pHeaderCtrl = GetHeaderCtrl();
	if( pHeaderCtrl )
	{
		ASSERT( nCol < pHeaderCtrl->GetItemCount() );
	}

	m_nComboBoxColumn	=	nCol;
	return m_nComboBoxColumn;
}

int CColListCtrl::SetItemStrings( int nItem, CStringArray &astr )
{
	ASSERT( nItem <= 10000 );
	if( m_aptrItemStrings.GetSize() <= nItem )
	{
		int	nSizeOld	=	m_aptrItemStrings.GetSize();
		m_aptrItemStrings.SetSize( nItem+1 );
		for( int i=nSizeOld; i<m_aptrItemStrings.GetSize(); i++ )
		{
			m_aptrItemStrings.SetAt( i, NULL );
		}
	}
	CStringArray	* pastrNew	=	new CStringArray;
	ASSERT( pastrNew && nItem < m_aptrItemStrings.GetSize() );
	if( pastrNew && nItem < m_aptrItemStrings.GetSize() )
	{
		pastrNew->Copy( astr );
		m_aptrItemStrings.SetAt( nItem, pastrNew );
		return nItem;
	}
	return -1;
}

BEGIN_MESSAGE_MAP(CColListCtrl, CListCtrl)
	//{{AFX_MSG_MAP(CColListCtrl)
	ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
	ON_NOTIFY_REFLECT(NM_KILLFOCUS, OnKillfocus)
	ON_WM_KILLFOCUS()
	ON_WM_NCLBUTTONDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CColListCtrl message handlers

void CColListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	if( -1 == pNMListView->iItem )
		return;
	if( -1 == m_nComboBoxColumn )
		return;

	if( m_nComboBoxColumn == pNMListView->iSubItem )
	{
		ShowItemComboBox( pNMListView->iItem );
	}
	else
	{
		HideItemComboBox( );
	}
	
	*pResult = 0;
}

void CColListCtrl::OnKillfocus(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	if(  ::GetFocus() != m_comboBox.GetSafeHwnd() )
	{
		HideItemComboBox( );
	}
	*pResult = 0;
}

BOOL CColListCtrl::CreateComboBox( int nItem ) 
{
	if( m_nComboBoxColumn < 0 || nItem < 0 )
		return FALSE;

	// Create
	if( !m_comboBox.GetSafeHwnd() )
	{
		CRect	rectItem( 0, 0, 35, 136 );
		GetSubItemRect( nItem, m_nComboBoxColumn, LVIR_BOUNDS, rectItem );
		CRect	rect( 0, 0, rectItem.Width(), rectItem.Height()+120 );
		if( !m_comboBox.Create( WS_CHILD | CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | CBS_HASSTRINGS,
				rect, this, IDC_COLLISTCTRL_COMBOBOX ) )
			return FALSE;

		HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
		if (hFont == NULL)
			hFont = (HFONT)GetStockObject(ANSI_VAR_FONT);
		m_comboBox.SendMessage(WM_SETFONT, (WPARAM)hFont);
	}

	// Add Strings
	if( nItem >= 0 && nItem < m_aptrItemStrings.GetSize() )
	{
		CStringArray	* pastr	=	(CStringArray *) m_aptrItemStrings.ElementAt(nItem);
		if( NULL != pastr && pastr->GetSize() > 0 )
		{
			m_comboBox.ResetContent();
			for( int k=0; k<pastr->GetSize(); k++ )
				m_comboBox.AddString( pastr->ElementAt(k) );
			m_comboBox.SelectString( 0, GetItemText(nItem,m_nComboBoxColumn) );
			return TRUE;
		}
	}
	return FALSE;
}

int	CColListCtrl::ShowItemComboBox( int nItem )
{
	// Hide and Save Old
	HideItemComboBox( );

	m_nCurItem	=	nItem;
	// Valid
	if( nItem < 0 || m_nComboBoxColumn < 0 )
		return	-1;

	// Create and Show
	if( CreateComboBox( nItem ) )
	{
		CRect rect;
		GetSubItemRect( nItem, m_nComboBoxColumn, LVIR_BOUNDS, rect );
		m_comboBox.SetWindowPos( NULL, rect.left, rect.top+1, rect.Width(), rect.Height()-1, SWP_SHOWWINDOW );
		m_comboBox.SetFocus();
		m_comboBox.SelectString( 0, GetItemText( nItem, m_nComboBoxColumn ) );
		m_comboBox.ShowDropDown( TRUE );
	}
	return	0;
}

int	CColListCtrl::HideItemComboBox( )
{
	// Save Old
	if( m_nCurItem >= 0 && m_nComboBoxColumn >= 0 
		&& m_comboBox.GetSafeHwnd() && m_comboBox.IsWindowVisible() )
	{
		CString		strText;
		m_comboBox.GetWindowText( strText );
		SetItemText( m_nCurItem, m_nComboBoxColumn, strText );
	}

	// Clear m_nCurItem
	m_nCurItem	=	-1;
	
	if( NULL == m_comboBox.GetSafeHwnd() || !m_comboBox.IsWindowVisible() )
		return -1;

	m_comboBox.SetWindowPos( NULL, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE );
	Invalidate( );
	return	0;
}

void CColListCtrl::OnKillFocus(CWnd* pNewWnd) 
{
	CListCtrl::OnKillFocus(pNewWnd);
	if( pNewWnd->GetSafeHwnd() != m_comboBox.GetSafeHwnd() )
	{
		HideItemComboBox( );
	}
}

BOOL CColListCtrl::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
{
	if( IDC_COLLISTCTRL_COMBOBOX == nID && EN_KILLFOCUS == nCode )	
	{
		HideItemComboBox( );
	}
	return CListCtrl::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

void CColListCtrl::OnNcLButtonDown(UINT nHitTest, CPoint point) 
{
	HideItemComboBox( );
	CListCtrl::OnNcLButtonDown(nHitTest, point);
}

/////////////////////////////////////////////////////////////////////////////
// CSetColumnDlg dialog

CSetColumnDlg::CSetColumnDlg(CWnd* pParent /*=NULL*/)
	: CXFDialog(CSetColumnDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSetColumnDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_nYieldAverageDaysOld	=	AfxGetProfile().GetYieldAverageDays();

	m_bUserIndexModified	=	FALSE;
}

void CSetColumnDlg::SetListColumnItems( CSPDWordArray & anShow, BOOL bSetDefault )
{
	m_listColumn.DeleteAllItems( );

	CSPDWordArray	& anOrder	= AfxGetProfile().GetSListColumnsOrder( );
	CIndexContainer	& acol	=	AfxGetProfile().GetSListColumnsUser( );

	CString	strDay;
	strDay.LoadString( IDS_SLHHDR_DAY );

	int	nCount	=	0;
	for( int i=0; i<anOrder.GetSize(); i++ )
	{
		// Set Item Text
		CString	strName, strDes;
		int	nItem	=	-1;
		UINT	nID	=	anOrder[i];
		strName	=	AfxGetVariantName( nID, FALSE );
		if( strName.IsEmpty() )
			continue;
		if( nID >= SLH_USERDEFINE_BEGIN )
			strDes.LoadString( IDS_SETCOLUMN_USERDEFINE );
		else
			strDes	=	(LPCTSTR)AfxGetSLHDescript( nID );

		nItem	=	m_listColumn.InsertItem( nCount, strName, -1 );
		m_listColumn.SetItemText( nItem, 1, strDes );
		m_listColumn.SetItemData( nItem, nID );
		nCount	++;

		// SetCheck
		for( int j=0; j<anShow.GetSize(); j++ )
		{
			if( anShow[j] == nID )
			{
				m_listColumn.SetCheck( nItem );
				break;
			}
		}

		// Set Column Combo Text
		CStringArray	astr;
		if( SLH_DIFF == nID || SLH_DIFFPERCENT == nID || SLH_SCOPE == nID
			|| SLH_RATIO_CHANGEHAND == nID || SLH_RATIO_VOLUME == nID || SLH_RS == nID )
		{
			for( int nDays=1; nDays<=STKLIB_DAYS_CALCULATE; nDays ++ )
			{
				CString	strTemp;
				strTemp.Format( "%d%s", nDays, strDay );
				astr.Add( strTemp );
			}
		}
		else if( SLH_ANNGAINS_AVERAGE == nID )
		{
			CString	strTemp;
			strTemp.Format( "%d%s", 20, strDay );		astr.Add( strTemp );
			strTemp.Format( "%d%s", 40, strDay );		astr.Add( strTemp );
			strTemp.Format( "%d%s", 60, strDay );		astr.Add( strTemp );
			strTemp.Format( "%d%s", 120, strDay );		astr.Add( strTemp );
			strTemp.Format( "%d%s", STKLIB_DAYS_INONEYEAR, strDay );			astr.Add( strTemp );
			strTemp.Format( "%d%s", 2*STKLIB_DAYS_INONEYEAR, strDay );		astr.Add( strTemp );
			strTemp.Format( "%d%s", 3*STKLIB_DAYS_INONEYEAR, strDay );		astr.Add( strTemp );
			strTemp.Format( "%d%s", 6*STKLIB_DAYS_INONEYEAR, strDay );		astr.Add( strTemp );
			strTemp.Format( "%d%s", 10*STKLIB_DAYS_INONEYEAR, strDay );		astr.Add( strTemp );
		}
		if( astr.GetSize() > 0 )
			m_listColumn.SetItemStrings( nItem, astr );

		// Set Current Parameter
		CString	strParam;
		if( SLH_DIFF == nID )
		{
			if( bSetDefault )	AfxGetProfile().SetDiffDays( -1 );
			strParam.Format( "%d%s", AfxGetProfile().GetDiffDays(), strDay );
		}
		else if( SLH_DIFFPERCENT == nID )
		{
			if( bSetDefault )	AfxGetProfile().SetDiffPercentDays( -1 );
			strParam.Format( "%d%s", AfxGetProfile().GetDiffPercentDays(), strDay );
		}
		else if( SLH_SCOPE == nID )
		{
			if( bSetDefault )	AfxGetProfile().SetScopeDays( -1 );
			strParam.Format( "%d%s", AfxGetProfile().GetScopeDays(), strDay );
		}
		else if( SLH_RATIO_CHANGEHAND == nID )
		{
			if( bSetDefault )	AfxGetProfile().SetRatioChangeHandDays( -1 );
			strParam.Format( "%d%s", AfxGetProfile().GetRatioChangeHandDays(), strDay );
		}
		else if( SLH_RATIO_VOLUME == nID )
		{
			if( bSetDefault )	AfxGetProfile().SetRatioVolumeDays( -1 );
			strParam.Format( "%d%s", AfxGetProfile().GetRatioVolumeDays( ), strDay );
		}
		else if( SLH_RS == nID )
		{
			if( bSetDefault )	AfxGetProfile().SetRSDays( -1 );
			strParam.Format( "%d%s", AfxGetProfile().GetRSDays( ), strDay );
		}
		else if( SLH_ANNGAINS_AVERAGE == nID )
		{
			if( bSetDefault )	AfxGetProfile().SetYieldAverageDays( -1 );
			strParam.Format( "%d%s", AfxGetProfile().GetYieldAverageDays( ), strDay );
		}
		else if( SLH_ANNGAINS_STDDEV == nID || SLH_BETA == nID || SLH_SHARP == nID )
		{
			strParam.LoadString( IDS_SETCOLUMN_SAMEASYIELDAVERAGE );
		}
		if( strParam.GetLength() > 0 )
			m_listColumn.SetItemText( nItem, 2, strParam );
	}

	m_listColumn.SetComboBoxColumn( 2 );
	m_listColumn.SetItemState( 0, LVIS_SELECTED, LVIS_SELECTED );
}


void CSetColumnDlg::DoDataExchange(CDataExchange* pDX)
{
	CXFDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetColumnDlg)
	DDX_Control(pDX, IDCANCEL, m_btnCancel);
	DDX_Control(pDX, IDC_SETDEFAULT, m_btnSetDefault);
	DDX_Control(pDX, IDC_NEWINDEX, m_btnNewIndex);
	DDX_Control(pDX, IDC_MOVEUP, m_btnMoveUp);
	DDX_Control(pDX, IDC_MOVEDOWN, m_btnMoveDown);
	DDX_Control(pDX, IDC_SETALL, m_btnSetAll);
	DDX_Control(pDX, IDOK, m_btnOK);
	DDX_Control(pDX, IDC_DELINDEX, m_btnDelIndex);
	DDX_Control(pDX, IDC_EDITINDEX, m_btnEditIndex);
	DDX_Control(pDX, IDC_COLUMNLIST, m_listColumn);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetColumnDlg, CXFDialog)
	//{{AFX_MSG_MAP(CSetColumnDlg)
	ON_BN_CLICKED(IDC_MOVEUP, OnMoveup)
	ON_BN_CLICKED(IDC_MOVEDOWN, OnMovedown)
	ON_BN_CLICKED(IDC_NEWINDEX, OnNewindex)
	ON_BN_CLICKED(IDC_EDITINDEX, OnEditindex)
	ON_BN_CLICKED(IDC_DELINDEX, OnDelindex)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -