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

📄 slistview.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
	// Sort If Needed
	if( -1 != m_nColSort )
	{
		LPARAM	lParam	=	m_Grid.GetItemData( 0, m_nColSort );
		if( lParam >= 0 )
		{
			CStockContainer::m_pSortContainer	=	&container;
			container.m_nSortVariantID	=	lParam;
			container.m_bSortAscend		=	m_bSortAscend;
			m_Grid.SortItems( ItemCompareFunc, 0, TRUE );
		}
	}

	if( pMainFrame )
	{
		pMainFrame->SetProgress( 100 );
		pMainFrame->HideProgressBar( );
		pMainFrame->SetMessageText( IDS_MAINFRAME_FINISHED );
		pMainFrame->SetMessageText( IDS_HELPTIP_SLIST );
	}

	if( m_bFirstUpdate )
		m_Grid.AutoSizeColumns( );
	else
		m_Grid.SetColumnWidth( 0, 80 );
	m_bFirstUpdate	=	FALSE;
	m_Grid.Invalidate( );

	SendRequestQuote(TRUE);

	container.UnLock();
}

/////////////////////////////////////////////////////////////////////////////
// CSListView printing

BOOL CSListView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CSListView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
	if( ::IsWindow( m_Grid.GetSafeHwnd() ) )
		m_Grid.OnBeginPrinting(pDC, pInfo);
}

void CSListView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
{
	if( ::IsWindow( m_Grid.GetSafeHwnd() ) )
		m_Grid.OnPrint(pDC, pInfo);
}

void CSListView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
	if( ::IsWindow( m_Grid.GetSafeHwnd() ) )
		m_Grid.OnEndPrinting(pDC, pInfo);
}

void CSListView::OnFilePrint() 
{
	if( ::IsWindow( m_Grid.GetSafeHwnd() ) )
		m_Grid.Print( );
}

void CSListView::OnUpdateFilePrint(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( ::IsWindow( m_Grid.GetSafeHwnd() ) );
}

/////////////////////////////////////////////////////////////////////////////
// CSListView diagnostics

#ifdef _DEBUG
void CSListView::AssertValid() const
{
	CFormView::AssertValid();
}

void CSListView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSListView message handlers

int CSListView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;

	// Create GridCtrl
	CRect rect;
	GetClientRect(rect);
	if( !m_Grid.Create(rect, this, IDC_SLISTVIEW_GRID, WS_CHILD|WS_BORDER|WS_TABSTOP|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL) )
	{
		TRACE( "CSListView::OnCreate(...), Create m_Grid Error.\n" );
		return -1;
	}

	// fill it up with stuff
	m_Grid.SetEditable(FALSE);
	m_Grid.SetListMode(TRUE);
	m_Grid.SetHeaderSort( FALSE ); 
	m_Grid.SetSingleRowSelection(FALSE);
	m_Grid.EnableDragAndDrop(TRUE);
	m_Grid.SetGridLines( GVL_NONE );
	m_Grid.EnableTitleTips( TRUE );
	m_Grid.SetRowResize( TRUE );
	m_Grid.SetColumnResize( TRUE );

	m_Grid.SetBkColor( AfxGetProfile().GetColor(CColorClass::clrSListBK) );
	m_Grid.SetTextBkColor( AfxGetProfile().GetColor(CColorClass::clrSListBK) );
	m_Grid.SetSelectedBkColor(AfxGetProfile().GetColor(CColorClass::clrSListSelected));

	LOGFONT lf;
	memset( &lf, 0, sizeof(lf) );
	AfxGetProfile().GetFontSListView( &lf );
	SetFont( &lf );

	// 实时行情刷新
	AfxGetStkReceiver().AddRcvDataWnd( GetSafeHwnd() );

	SetTimer( SLV_TIMER_REFRESH, 20000, NULL );
	
	return 0;
}

void CSListView::OnDestroy() 
{
	// 停止行情刷新通知消息
	AfxGetStkReceiver().RemoveRcvDataWnd( GetSafeHwnd() );
	KillTimer( SLV_TIMER_REFRESH );

	StoreColumnOrderArray( );

	CFormView::OnDestroy();
}

void CSListView::OnTimer(UINT nIDEvent) 
{
	if( SLV_TIMER_REFRESH == nIDEvent )
	{
		SendRequestQuote(FALSE);
	}
	
	CFormView::OnTimer(nIDEvent);
}

void CSListView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) 
{
	// TODO: Add your specialized code here and/or call the base class
	CMainFrame	* pFrame	=	AfxGetMainFrame( );
	if( pFrame )
		pFrame->SetMessageText( bActivate ? IDS_HELPTIP_SLIST : AFX_IDS_IDLEMESSAGE );

	if( bActivate && m_bShouldUpdate )
	{
		OnUpdate( NULL, UPDATE_HINT_SLISTVIEW, NULL );
		m_bShouldUpdate	=	FALSE;
	}

	CFormView::OnActivateView(bActivate, pActivateView, pDeactiveView);

	if( ::IsWindow(m_wndWorkTab.GetSafeHwnd()) )
	{
		m_wndWorkTab.Invalidate( );
		m_wndWorkTab.UpdateWindow( );
	}
}

void CSListView::OnSelchangeWorktab(NMHDR* pNMHDR, LRESULT* pResult) 
{
	int nCur = m_wndWorkTab.GetCurtab();
	CRect	rect = m_wndWorkTab.GetTabRect( nCur );
	CMenu	menu;
	switch( nCur )
	{
	case SL_WORKTAB_CLASS:
		if( menu.LoadMenu( IDR_MENU_SLISTBARCLASS ) )
		{
			CMenu* pPopupMenu = menu.GetSubMenu(0);
			if( pPopupMenu )
				pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON , rect.left+3, rect.top+6, AfxGetMainFrame() );
		}
		break;
	case SL_WORKTAB_A:
		SetCurrentStatus( CStockContainer::typeA, NULL, -1 );
		break;
	case SL_WORKTAB_MSMALL:
		SetCurrentStatus( CStockContainer::typeClassMsmall, NULL, -1 );
		break;
	case SL_WORKTAB_SHB:
		SetCurrentStatus( CStockContainer::typeClassShab, NULL, -1 );
		break;
	case SL_WORKTAB_SZNB:
		SetCurrentStatus( CStockContainer::typeClassSznb, NULL, -1 );
		break;
	case SL_WORKTAB_BOND:
		SetCurrentStatus( CStockContainer::typeBond, NULL, -1 );
		break;
	case SL_WORKTAB_FUND:
		SetCurrentStatus( CStockContainer::typeFund, NULL, -1 );
		break;
	case SL_WORKTAB_RIGHT:
		SetCurrentStatus( CStockContainer::typeRight, NULL, -1 );
		break;
	case SL_WORKTAB_SELF:
		{
			CString	strSelf;
			strSelf.LoadString( IDS_DOMAIN_SELF );
			SetCurrentStatus( CStockContainer::typeGroup, strSelf, -1 );
		}
		break;
	case SL_WORKTAB_GROUP:
		if( menu.LoadMenu( IDR_MENU_SLISTBARGROUP ) )
		{
			CMenu* pPopupMenu = menu.GetSubMenu(0);
			if( pPopupMenu )
				pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON , rect.left+3, rect.top+6, AfxGetMainFrame() );
		}
		break;
	case SL_WORKTAB_DOMAIN:
		if( menu.LoadMenu( IDR_MENU_SLISTBARDOMAIN ) )
		{
			CMenu* pPopupMenu = menu.GetSubMenu(0);
			if( pPopupMenu )
				pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON , rect.left+3, rect.top+6, AfxGetMainFrame() );
		}
		break;
	default:;
	}
	
	*pResult = 0;
}

LRESULT CSListView::OnGetViewTitle(WPARAM wParam, LPARAM lParam)
{
	CString	strTitle;
	strTitle.LoadString( IDS_TITLE_SLISTVIEW );

	lstrcpyn((LPTSTR)lParam, (LPCTSTR)strTitle, wParam);
	if ((int)wParam > strTitle.GetLength())
		wParam = strTitle.GetLength();
	return wParam;
}

LRESULT CSListView::OnGetViewCmdid(WPARAM wParam, LPARAM lParam)
{
	if( lParam )
		*((LPARAM *)lParam)	=	ID_VIEW_SLIST;
	return 0L;
}

LRESULT CSListView::OnColorChange(WPARAM wParam, LPARAM lParam)
{
	m_wndWorkTab.SetSelectTabColor( AfxGetProfile().GetColor(CColorClass::clrSListBK),
									AfxGetProfile().GetColor(CColorClass::clrTitle) );
	m_wndWorkTab.Invalidate( );

	m_Grid.SetBkColor( AfxGetProfile().GetColor(CColorClass::clrSListBK) );
	m_Grid.SetTextBkColor( AfxGetProfile().GetColor(CColorClass::clrSListBK) );
	m_Grid.SetSelectedBkColor(AfxGetProfile().GetColor(CColorClass::clrSListSelected));

	OnUpdate( NULL, UPDATE_HINT_SLISTVIEW, NULL );
	return 0L;
}

LRESULT CSListView::OnStkReceiverData(WPARAM wParam, LPARAM lParam)
{
	PCOMMPACKET	pCommPacket	=	(PCOMMPACKET)lParam;

	switch( wParam )
	{
	case CStock::dataReport:
		if( pCommPacket && CStock::dataReport == pCommPacket->m_dwDataType 
			&& pCommPacket->m_dwCount > 0 )
		{
			CStockContainer & container = AfxGetSListStockContainer();
			// 如果当前股票列表显示的日期不是今天的,返回,不做刷新
			DWORD	dwDate = -1;;
			AfxGetSListStockContainer().GetCurrentType(NULL,NULL,&dwDate);
			if( -1 != dwDate && dwDate != CSPTime(pCommPacket->m_pReport[0].m_time).ToStockTimeDay() )
				return 0L;

			container.Lock();

			// 刷新数据
			BOOL	bNeedReSort	=	FALSE;
			for( DWORD i=0; i<pCommPacket->m_dwCount; i++ )
			{
				int	id = 0;
				if( container.GetStockInfo( pCommPacket->m_pReport[i].m_szCode, NULL, &id ) )
				{
					CStockInfo	& info	=	container.ElementAt(id);
					UpdateStockInfoByREPORT( info, &(pCommPacket->m_pReport[i]) );
					StockInfoChanged( id, info );
					bNeedReSort	=	TRUE;
				}
			}

			// 统计平均值刷新
			if( bNeedReSort )
			{
				container.SetAverage( );
				SetAverageItem( m_Grid, container, TRUE );
			}

			// 重新排序
			if( -1 != m_nColSort && bNeedReSort )
			{
				LPARAM	lParam	=	m_Grid.GetItemData( 0, m_nColSort );
				if( lParam >= 0 )
				{
					CStockContainer::m_pSortContainer	=	&container;
					container.m_nSortVariantID	=	lParam;
					container.m_bSortAscend		=	m_bSortAscend;
					m_Grid.SortItems( ItemCompareFunc, 0, TRUE );
				}
				m_Grid.Invalidate( );
			}
			container.UnLock();
		}
		break;
	}
	return 0L;
}

BOOL CSListView::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	if( pDC && pDC->IsKindOf(RUNTIME_CLASS(CDC)) )
	{
		CRect rect;
		GetClientRect( &rect );
		CBrush brush;
		brush.CreateSolidBrush( AfxGetProfile().GetColor(CColorClass::clrSListBK) );
		pDC->FillRect( &rect, &brush );
		return TRUE;
	}
	return CFormView::OnEraseBkgnd(pDC);
}

void CSListView::OnSize(UINT nType, int cx, int cy) 
{
	CSize	sizeTotal( cx, cy );
	SetScaleToFitSize( sizeTotal );

	CFormView::OnSize(nType, cx, cy);
	
	CRect rect;
	GetClientRect(rect);
/*	if( ::IsWindow(m_Grid.GetSafeHwnd()) )
	{
		m_Grid.MoveWindow(rect);
	}
*/	
	if( ::IsWindow(m_wndWorkTab.GetSafeHwnd()) )
	{
		rect.InflateRect(1,0,0,1);
		m_wndWorkTab.MoveWindow(rect);
		m_wndWorkTab.Invalidate( );
		m_wndWorkTab.UpdateWindow( );
	}
}

void CSListView::OnSetFocus(CWnd* pOldWnd) 
{
	CFormView::OnSetFocus(pOldWnd);
	
	// TODO: Add your message handler code here
	m_Grid.SetFocus();
	if( !m_Grid.GetFocusCell().IsValid()
		&& m_Grid.GetRowCount() > 1 && m_Grid.GetColumnCount() > 1 )
	{
		m_Grid.SetFocusCell( 1, 1 );
		for( int nCol=0; nCol<m_Grid.GetColumnCount(); nCol ++ )
			m_Grid.SetItemState(1,nCol,m_Grid.GetItemState(1,nCol) | GVIS_SELECTED);
	}
}

void CSListView::OnSlistExportlist() 
{
	// TODO: Add your command handler code here
	CListExportDlg	dlg;
	dlg.m_nItemMax	=	m_Grid.GetRowCount();
	if( m_Grid.GetSelectedCount() > 0 )
	{
		dlg.m_bItemAll		=	FALSE;
		dlg.m_bItemSelected	=	TRUE;
		dlg.m_bItemDefine	=	FALSE;
	}
	dlg.DoModal( );
}

⌨️ 快捷键说明

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