// 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; }
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; }