📄 slistview.cpp.svn-base
字号:
// 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 + -