コード例 #1
0
// update CStockContainer by Report data
BOOL UpdateStockContainerByREPORT( CStockContainer &container, REPORT * pReport, BOOL bAddIfNotExist, REPORT * pReportLast )
{
	SP_ASSERT( pReport );
	if( NULL == pReport )
		return FALSE;

	REPORT	reportLast;
	memset( &reportLast, 0, sizeof(reportLast) );

	int	id = 0;
	if( container.GetStockInfo( pReport->m_szCode, NULL, &id ) )
	{
		container.Lock();

		CStockInfo	& info	=	container.ElementAt(id);
		reportLast	=	info.m_reportLatest;
		UpdateStockInfoByREPORT( info, pReport );

		container.UnLock();
	}
	else if( bAddIfNotExist && strlen(pReport->m_szCode)>0 )
	{
		CStockInfo	info;
		info.SetStockCode( pReport->m_dwMarket, pReport->m_szCode );
		if( UpdateStockInfoByREPORT( info, pReport ) )
		{
			container.Add( info );
		}
	}

	if( pReportLast )
		memcpy( pReportLast, &reportLast, sizeof(reportLast) );

	return TRUE;
}
コード例 #2
0
ファイル: SListView.cpp プロジェクト: ZhaoboMeng/k-line-print
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;
}