void CSListView::ResetColumns( ) { CStockContainer & container = AfxGetSListStockContainer(); container.Lock(); // its list control through a call to GetListCtrl(). CSPDWordArray & auint = AfxGetProfile().GetSListColumnsShow( ); ASSERT( auint.GetSize() > 0 ); m_Grid.SetRedraw( FALSE ); m_Grid.DeleteAllItems(); m_Grid.SetRowCount(1); m_Grid.SetFixedRowCount(1); m_Grid.SetFixedColumnCount(1); m_Grid.SetColumnCount(auint.GetSize()); for( int nCol=0; nCol<auint.GetSize(); nCol++ ) { CString string = AfxGetVariantName(auint[nCol],TRUE); m_Grid.SetItemText( 0, nCol, string ); m_Grid.SetItemData( 0, nCol, auint[nCol] ); m_Grid.SetItemFormat( 0, nCol, DT_CENTER|DT_VCENTER|DT_SINGLELINE ); m_Grid.SetItemBkColour( 0, nCol, AfxGetProfile().GetColor(CColorClass::clrSListBK) ); m_Grid.SetItemFgColour( 0, nCol, AfxGetProfile().GetColor(CColorClass::clrTitle) ); } m_Grid.AutoSizeColumns(); m_Grid.SetRedraw( TRUE, TRUE ); m_Grid.Invalidate( ); container.UnLock(); }
void CSListView::StockInfoChanged( LONG infoid, CStockInfo & info ) { CStockContainer & container = AfxGetSListStockContainer(); container.Lock(); // update grid value for( int nRow=m_Grid.GetRowCount()-1; nRow >= 0; nRow-- ) { LPARAM id = m_Grid.GetItemData(nRow,0); if( id == infoid ) { for( int nCol=0; nCol<m_Grid.GetColumnCount(); nCol++ ) { LPARAM lParam = m_Grid.GetItemData(0,nCol); m_Grid.SetItemText( nRow, nCol, AfxGetVariantDispString( lParam, info, &container ) ); m_Grid.SetItemFgColour( nRow, nCol, AfxGetVariantColor( lParam, info ) ); } m_Grid.RedrawRow( nRow ); break; } } container.UnLock(); }
void CQuoteTipDlg::OnNext() { m_nIndexStart += m_nPageCount; if( m_nIndexStart >= AfxGetSListStockContainer().GetSize() ) m_nIndexStart -= m_nPageCount; UpdateButtons(); Invalidate( ); }
void CSListView::SetCurrentStatus( int nType, LPCTSTR lpszDomain, DWORD dwDate ) { AfxGetSListStockContainer().RetrieveFromStatic( nType, lpszDomain, AfxGetActiveStrategy(), dwDate ); OnUpdate( NULL, UPDATE_HINT_SLISTVIEW, NULL ); CMainFrame * pFrame = AfxGetMainFrame(); if( pFrame ) pFrame->m_DateBox.SetCurrentWindowText( ); }
BOOL CStkUIApp::OnDBChanged( BOOL bRecalculate ) { CWaitCursor waitcursor; // Reload DB AfxGetStockContainer().Load( &AfxGetDB(), NULL, NULL ); AfxGetDomainContainer().Load( AfxGetProfile().GetDomainFile() ); AfxGetGroupContainer().Load( AfxGetProfile().GetGroupFile() ); AfxGetDB().LoadKDataCache( AfxGetStockContainer(), NULL, NULL, 0, STKLIB_MAX_PROGRESS ); AfxGetStockContainer().OnDataChanged( ); AfxGetStkReceiver().RefreshStockContainer( AfxGetStockContainer(), TRUE ); // Reload AfxGetStockMain() AfxReloadStockMain( ); // Recalcuate Yield if( bRecalculate && IDYES == AfxMessageBox( IDS_INSTALLPAC_IFRECALCULATE, MB_YESNO|MB_ICONINFORMATION ) ) { AfxRecalculateYield( AfxGetProfile().GetYieldAverageDays(), TRUE ); AfxGetStockContainer().ReloadBase( &AfxGetDB() ); } // Update SListBar CMainFrame * pMainFrame = AfxGetMainFrame(); if( pMainFrame ) { pMainFrame->m_SearchBox.InitStocks( TRUE, TRUE, TRUE ); pMainFrame->m_SearchBox.SetCurrentWindowText( ); //pMainFrame->m_DateBox.InitDates( ); //pMainFrame->m_DateBox.SetCurrentWindowText( ); } // Update Views AfxGetSListStockContainer().ReRetrieveFromStatic( AfxGetActiveStrategy(), TRUE ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_SLISTVIEW, NULL ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_GRAPHVIEW, NULL ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_BASEVIEW, NULL ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_SIMUVIEW_REREALRUN, NULL ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_SELECTORVIEW, NULL ); ::PostMessage( AfxGetGroupView()->GetSafeHwnd(), WM_USER_UPDATEGROUPS, 0, 0 ); return TRUE; }
int CALLBACK ItemCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { if( lParam1 < 0 && lParam2 < 0 ) return 0; if( lParam1 < 0 ) return 1; if( lParam2 < 0 ) return -1; CStockContainer & container = AfxGetSListStockContainer(); if( lParam1 >= container.GetSize() || lParam2 >= container.GetSize() ) { ASSERT( FALSE ); return 0; } CStockInfo &s1 = container.ElementAt(lParam1); CStockInfo &s2 = container.ElementAt(lParam2); return CStockContainer::SortFunction( &s1, &s2 ); }
void CSListView::OnDblclkItem( int nStockIndex ) { CStockContainer & container = AfxGetSListStockContainer(); int nType; CSPString strDomain; DWORD dwDate = -1; if( nStockIndex >= 0 ) { container.GetCurrentType( &nType, &strDomain, &dwDate ); if( ( nType == CStockContainer::typeDomain && strDomain.IsEmpty() ) || ( nType == CStockContainer::typeGroup && strDomain.IsEmpty() ) ) { CStockInfo & info = container.GetStockInfoByID( nStockIndex ); AfxShowSlist( nType, CString(info.GetStockName()), dwDate ); } else AfxShowStockGraph( nStockIndex, TRUE ); } }
void CSListView::GetSelectedStocks( CSPStringArray & astr ) { CStockContainer & container = AfxGetSListStockContainer(); container.Lock(); int nTotalCount = m_Grid.GetSelectedCount(); astr.RemoveAll(); astr.SetSize( 0, nTotalCount > 10 ? nTotalCount : -1 ); for( int nRow=1; nRow<m_Grid.GetRowCount(); nRow++ ) { BOOL bSelected = FALSE; for( int nCol=0; nCol<m_Grid.GetColumnCount(); nCol ++ ) bSelected |= ( m_Grid.GetItemState(nRow,nCol) & GVIS_SELECTED ); if( !bSelected ) continue; LPARAM id = m_Grid.GetItemData(nRow,0); CStockInfo & info = container.GetStockInfoByID(id); astr.Add( info.GetStockCode() ); } container.UnLock(); }
void CSListView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { // TODO: Add your specialized code here and/or call the base class if( UPDATE_HINT_SLISTVIEW != lHint ) return; if( IsWindowVisible() ) SetFocus( ); int nColumnCount = m_Grid.GetColumnCount(); if( nColumnCount <= 0 ) return; if( GetParentFrame()->GetSafeHwnd() != AfxGetMainFrame()->GetActiveFrame()->GetSafeHwnd() ) { m_bShouldUpdate = TRUE; return; } m_bShouldUpdate = FALSE; CStockContainer & container = AfxGetSListStockContainer(); container.Lock(); m_Grid.DeleteNonFixedRows(); // Progress CUIntArray anParams; anParams.SetSize( 0, nColumnCount ); for( int nCol=0; nCol < nColumnCount; nCol ++ ) { LPARAM lParam = m_Grid.GetItemData( 0, nCol ); anParams.Add( lParam ); } CRect rectClient; GetClientRect( &rectClient ); int nPageCount = 1 + rectClient.Height() / abs(m_Grid.GetFixedRowHeight()) + 1; /** disabled for( int i=0; i<container.GetSize(); i++ ) { CStockInfo & info = container.GetStockInfoByID(i); int nRow = m_Grid.InsertRow( info.GetStockName() ); m_Grid.SetItemData( nRow, 0, i ); for( int nCol=0; nCol<anParams.GetSize(); nCol++ ) { m_Grid.SetItemFormat( nRow, nCol, DT_CENTER|DT_VCENTER|DT_SINGLELINE ); m_Grid.SetItemText( nRow, nCol, AfxGetVariantDispString( anParams[nCol], info, &container ) ); m_Grid.SetItemBkColour( nRow, nCol, AfxGetProfile().GetColor(CColorClass::clrSListBK) ); m_Grid.SetItemFgColour( nRow, nCol, AfxGetVariantColor( anParams[nCol], info ) ); if( anParams[nCol] == SLH_DATE ) m_Grid.SetColumnWidth( nCol, 80 ); } if( i == nPageCount+5 ) { m_Grid.Invalidate( ); MSG msg; while (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE) ) AfxGetApp()->PumpMessage(); } if( pMainFrame ) pMainFrame->SetProgress( 100*i/container.GetSize() ); } // Set Average and Weight Average SetAverageItem( m_Grid, container, FALSE ); // 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 ); } } */ for(int i= 0;i<1;i++) { int nRow = m_Grid.InsertRow( "sz002376"); m_Grid.SetItemData( nRow, 0, i ); const char * paramValues [] = {"新北洋","sz002376","1000","1000","1000","17.74","19.08","17740","-1340.0"}; for( int nCol=0; nCol<9; nCol++ ) { m_Grid.SetItemFormat( nRow, nCol, DT_CENTER|DT_VCENTER|DT_SINGLELINE ); m_Grid.SetItemText( nRow, nCol, paramValues[nCol] ); m_Grid.SetItemBkColour( nRow, nCol, AfxGetProfile().GetColor(CColorClass::clrSListBK) ); //m_Grid.SetItemFgColour( nRow, nCol, ); if( anParams[nCol] == SLH_DATE ) m_Grid.SetColumnWidth( nCol, 80 ); } } int nRow = m_Grid.InsertRow( "summary"); //m_Grid.SetItemData( nRow, 0, 1 ); const char * sumValues [] = {"","","","","","","合计(人民币)","17740","-1340.0"}; for( int ic=0; ic<9; ic++ ) { m_Grid.SetItemFormat( nRow, ic, DT_CENTER|DT_VCENTER|DT_SINGLELINE ); m_Grid.SetItemText( nRow, ic, sumValues[ic] ); m_Grid.SetItemBkColour( nRow, 0, AfxGetProfile().GetColor(CColorClass::clrSListBK) ); } nRow = m_Grid.InsertRow( "blank"); m_Grid.SetItemText( nRow, 0, "" ); m_Grid.SetItemBkColour( nRow, 0, AfxGetProfile().GetColor(CColorClass::clrSListBK) ); //m_Grid.SetItemData( nRow, 0, 1 ); nRow = m_Grid.InsertRow( "allheader"); const char * allValues [] = {"币种","资金余额","可用资金","可取资金","证券市值","资产总值","","",""}; for( ic=0; ic<9; ic++ ) { m_Grid.SetItemFormat( nRow, ic, DT_CENTER|DT_VCENTER|DT_SINGLELINE ); m_Grid.SetItemText( nRow, ic, allValues[ic] ); m_Grid.SetItemBkColour( nRow, ic, AfxGetProfile().GetColor(CColorClass::clrSListBK) ); m_Grid.SetItemFgColour( nRow, ic, 0x00ff0000 ); LOGFONT *pfont = m_Grid.GetItemFont(nRow,ic); pfont->lfWeight = 700; m_Grid.SetItemFont(nRow,ic,pfont); } nRow = m_Grid.InsertRow( "alldata"); const char * alldataValues [] = {"人民币","2163.99","2163.99","2163.99","17740","19903.99","","",""}; for( ic=0; ic<9; ic++ ) { m_Grid.SetItemFormat( nRow, ic, DT_CENTER|DT_VCENTER|DT_SINGLELINE ); m_Grid.SetItemText( nRow, ic, alldataValues[ic] ); m_Grid.SetItemBkColour( nRow, ic, AfxGetProfile().GetColor(CColorClass::clrSListBK) ); } if( m_bFirstUpdate ) m_Grid.AutoSizeColumns( ); else m_Grid.SetColumnWidth( 0, 80 ); m_bFirstUpdate = FALSE; m_Grid.Invalidate( ); //SendRequestQuote(TRUE); container.UnLock(); }
void CSListView::SendRequestQuote( BOOL bForced ) { static int nLastStart = -1; static int nLastCount = -1; BOOL bQuoteTipSended = FALSE; BOOL bInTrade = CSPTime::InTradeTime(CSPTime::GetCurrentTime().GetTime(),900); CView * pView = AfxGetStaticDoc()->GetActiveView(); if( bForced ) { CStockContainer stocks; CStockInfo info; if( AfxGetStockContainer().GetStockInfo( STKLIB_CODE_MAIN, &info ) ) stocks.Add(info); if( AfxGetStockContainer().GetStockInfo( STKLIB_CODE_MAINSZN, &info ) ) stocks.Add(info); if( stocks.GetSize() > 0 ) AfxGetStkReceiver().RequestStockData( CStock::dataReport, stocks.GetData(), stocks.GetSize(), 0, 0 ); } if( bForced || pView == this ) { CCellRange cr = m_Grid.GetVisibleNonFixedCellRange(); int nStart = cr.GetMinRow() - 1; int nCount = cr.GetMaxRow() - cr.GetMinRow() + 1; CStockContainer & container = AfxGetSListStockContainer(); container.Lock(); if( nStart >= 0 && nCount > 0 && container.GetSize() > 0 && (bInTrade || bForced || nLastStart != nStart || nLastCount != nCount) ) { nLastStart = nStart; nLastCount = nCount; AfxGetStkReceiver().RequestStockData( CStock::dataReport, container.GetData()+nStart, min(nCount,container.GetSize()-nStart), 0, 0 ); bQuoteTipSended = (0 == nStart && nCount >= 9); } container.UnLock(); } if( bInTrade ) { // 预警系统所需股票行情刷新 CAlarmCondContainer & conds = AfxGetProfile().GetAlarmCondContainer(); CStockContainer stocks; stocks.SetSize( 0, conds.GetSize() + 5 ); for( int i=0; i<conds.GetSize(); i++ ) { ALARMCOND cond = conds.GetAt(i); CStockInfo info; if( AfxGetStockContainer().GetStockInfo( cond.m_szCode, &info ) ) stocks.Add( info ); } CStockInfo infoMain, infoMainSzn; if( AfxGetStockContainer().GetStockInfo( STKLIB_CODE_MAIN, &infoMain ) && AfxGetStockContainer().GetStockInfo( STKLIB_CODE_MAINSZN, &infoMainSzn ) ) { stocks.Add( infoMain ); stocks.Add( infoMainSzn ); } // 行情QuoteTip 需要行情数据 if( !bQuoteTipSended ) { CStockContainer & container = AfxGetSListStockContainer(); container.Lock(); for( int i=0; i<9 && i<container.GetSize(); i++ ) stocks.Add( container.ElementAt(i) ); container.UnLock(); } if( stocks.GetSize() > 0 ) AfxGetStkReceiver().RequestStockData( CStock::dataReport, stocks.GetData(), stocks.GetSize(), 0, 0 ); } }
void CSListView::ExportList( CListExportDlg * pDlg ) { ASSERT( pDlg ); if( NULL == pDlg ) return; int nColumnCount = m_Grid.GetColumnCount(); ASSERT( nColumnCount > 0 ); if( nColumnCount <= 0 ) return; CStockContainer & container = AfxGetSListStockContainer(); // Get Current StockList Time DWORD dwDate; CSPTime sptime; CSPTime time; if( container.GetCurrentType( NULL, NULL, &dwDate ) && (-1 != dwDate || container.GetLatestTechDate(&dwDate)) && sptime.FromStockTimeDay( dwDate ) ) time = CSPTime( sptime.GetTime() ); // Set Column CStringArray astrColumn; CUIntArray anWidth; CUIntArray anParams; for(int nCol = 0; nCol < nColumnCount; nCol ++ ) { astrColumn.Add( m_Grid.GetItemText(0,nCol) ); anWidth.Add( m_Grid.GetColumnWidth(nCol) ); anParams.Add( m_Grid.GetItemData(0,nCol) ); } if( ! pDlg->ExportBegin( astrColumn, anWidth, TRUE ) || ! pDlg->ExportOpenTable( time, TRUE ) ) return; container.Lock(); // set Item int nCount = 0, nTotalCount = 0; if( pDlg->m_bItemAll ) { nTotalCount = m_Grid.GetRowCount()-1; pDlg->SetProgressRange( 0, nTotalCount ); for( int nRow=1; nRow<m_Grid.GetRowCount(); nRow++ ) { CStringArray astrItemText; astrItemText.SetSize( 0, nColumnCount+1 ); LPARAM id = m_Grid.GetItemData(nRow,0); CStockInfo & info = container.GetStockInfoByID(id); for(nCol=0; nCol<anParams.GetSize(); nCol++ ) { astrItemText.Add( m_Grid.GetItemText( nRow, nCol ) ); } pDlg->ExportAddItem( astrItemText ); nCount ++; pDlg->SetProgress( nCount ); } } else if( pDlg->m_bItemSelected ) { nTotalCount = m_Grid.GetSelectedCount(); pDlg->SetProgressRange( 0, nTotalCount ); for( int nRow=1; nRow<m_Grid.GetRowCount(); nRow++ ) { BOOL bSelected = FALSE; for( nCol=0; nCol<m_Grid.GetColumnCount(); nCol ++ ) bSelected |= ( m_Grid.GetItemState(nRow,nCol) & GVIS_SELECTED ); if( !bSelected ) continue; CStringArray astrItemText; astrItemText.SetSize( 0, nColumnCount+1 ); LPARAM id = m_Grid.GetItemData(nRow,0); CStockInfo & info = container.GetStockInfoByID(id); for(nCol=0; nCol<anParams.GetSize(); nCol++ ) { astrItemText.Add( m_Grid.GetItemText( nRow, nCol ) ); } pDlg->ExportAddItem( astrItemText ); nCount ++; pDlg->SetProgress( nCount ); } } else if( pDlg->m_bItemDefine ) { nTotalCount = min(m_Grid.GetRowCount()-1,pDlg->m_nItemEnd) - max(1,pDlg->m_nItemBegin) + 1; pDlg->SetProgressRange( 0, nTotalCount ); for( int nRow=max(1,pDlg->m_nItemBegin); nRow<=min(m_Grid.GetRowCount()-1,pDlg->m_nItemEnd); nRow++ ) { CStringArray astrItemText; astrItemText.SetSize( 0, nColumnCount+1 ); LPARAM id = m_Grid.GetItemData(nRow,0); CStockInfo & info = container.GetStockInfoByID(id); for(nCol=0; nCol<anParams.GetSize(); nCol++ ) { astrItemText.Add( m_Grid.GetItemText( nRow, nCol ) ); } pDlg->ExportAddItem( astrItemText ); nCount ++; pDlg->SetProgress( nCount ); } } container.UnLock(); pDlg->ExportFinish( ); }
void CSetColumnDlg::OnOK() { // TODO: Add extra validation here m_btnOK.EnableWindow( FALSE ); // Store Show Items CSPDWordArray & anShow = AfxGetProfile().GetSListColumnsShow( ); CSPDWordArray & anOrder = AfxGetProfile().GetSListColumnsOrder( ); anShow.RemoveAll(); anOrder.RemoveAll(); for( int i=0; i<m_listColumn.GetItemCount(); i++ ) { UINT nID = m_listColumn.GetItemData( i ); anOrder.Add( nID ); if( m_listColumn.GetCheck( i ) ) anShow.Add( nID ); } if( 0 == anShow.GetSize() && IDNO == AfxMessageBox( IDS_SETCOLUMN_NOSELECT, MB_YESNO ) ) return; // Store Parameters m_listColumn.HideItemComboBox( ); for( int nItem=0; nItem<m_listColumn.GetItemCount(); nItem++ ) { // Set Item Text UINT nID = m_listColumn.GetItemData(nItem); // Set Column Combo Text CString strParam; if( SLH_DIFF == nID ) { strParam = m_listColumn.GetItemText( nItem, 2 ); int nDays = atol( strParam ); AfxGetProfile().SetDiffDays( nDays ); } else if( SLH_DIFFPERCENT == nID ) { strParam = m_listColumn.GetItemText( nItem, 2 ); int nDays = atol( strParam ); AfxGetProfile().SetDiffPercentDays( nDays ); } else if( SLH_SCOPE == nID ) { strParam = m_listColumn.GetItemText( nItem, 2 ); int nDays = atol( strParam ); AfxGetProfile().SetScopeDays( nDays ); } else if( SLH_RATIO_CHANGEHAND == nID ) { strParam = m_listColumn.GetItemText( nItem, 2 ); int nDays = atol( strParam ); AfxGetProfile().SetRatioChangeHandDays( nDays ); } else if( SLH_RATIO_VOLUME == nID ) { strParam = m_listColumn.GetItemText( nItem, 2 ); int nDays = atol( strParam ); AfxGetProfile().SetRatioVolumeDays( nDays ); } else if( SLH_RS == nID ) { strParam = m_listColumn.GetItemText( nItem, 2 ); int nDays = atol( strParam ); AfxGetProfile().SetRSDays( nDays ); } else if( SLH_ANNGAINS_AVERAGE == nID ) { strParam = m_listColumn.GetItemText( nItem, 2 ); int nDays = atol( strParam ); AfxGetProfile().SetYieldAverageDays( nDays ); } } AfxGetProfile().StoreProfile( ); CXFDialog::OnOK(); //CMainFrame * pMainFrame = AfxGetMainFrame(); //if( pMainFrame ) //{ // pMainFrame->m_DateBox.InitDates( ); // pMainFrame->m_DateBox.SetCurrentWindowText( ); //} // Recalculate Yield Average if( AfxGetProfile().GetYieldAverageDays() != m_nYieldAverageDaysOld ) { // Need Recalculate if( IDYES == AfxMessageBox( IDS_SETCOLUMN_IFRECALCULATE, MB_YESNO|MB_ICONINFORMATION ) ) { AfxRecalculateYield( AfxGetProfile().GetYieldAverageDays(), TRUE ); AfxGetStockContainer().ReloadBase( &AfxGetDB() ); AfxGetSListStockContainer().ReRetrieveFromStatic( AfxGetActiveStrategy() ); } } // Clear the User Defined Index Cache if( m_bUserIndexModified ) AfxGetSListStockContainer().ClearVariantSaveValue(); }
void CQuoteTipDlg::UpdateButtons( ) { m_btnPrior.EnableWindow( m_nIndexStart > 0 ); m_btnNext.EnableWindow( m_nIndexStart + m_nPageCount < AfxGetSListStockContainer().GetSize() ); }
void CQuoteTipDlg::OnPaint() { // Do not call CTipDialog::OnPaint() for painting messages // CTipDialog::OnPaint(); CPaintDC dc(this); // device context for painting dc.SetBkMode( TRANSPARENT ); CFont * pOldFont = AfxSelectDCFont(&dc,14); CRect rectAll; GetClientRect( &rectAll ); int nWidthTotal = rectAll.Width(); double o = (nWidthTotal-10) / 26; CRect rect; int x = 5, y = 5; int nCount = 0; CStockContainer & container = AfxGetSListStockContainer(); // Draw Header Title { CString strCode = AfxGetVariantName(SLH_CODE,FALSE); CString strClose = AfxGetVariantName(SLH_CLOSE,FALSE); CString strDiffPercent = AfxGetVariantName(SLH_DIFFPERCENT,FALSE); CString strVolume = AfxGetVariantName(SLH_VOLUME,FALSE); dc.SetTextColor( AfxGetProfile().GetColor(CColorClass::clrTitle) ); rect = CRect(x,y,x+6*o,y+m_nItemHeight-1); dc.DrawText( strCode, rect, DT_VCENTER | DT_CENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS ); rect = CRect(x+6*o,y,x+13*o,y+m_nItemHeight-1); dc.DrawText( strClose, rect, DT_VCENTER | DT_CENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS ); rect = CRect(x+13*o,y,x+19*o,y+m_nItemHeight-1); dc.DrawText( strDiffPercent, rect, DT_VCENTER | DT_CENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS ); rect = CRect(x+19*o,y,rectAll.right-5,y+m_nItemHeight-1); dc.DrawText( strVolume, rect, DT_VCENTER | DT_CENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS ); y += m_nItemHeight; } y += 2; for( int nIndex=m_nIndexStart; nIndex<container.GetSize(); nIndex++ ) { nCount ++; if( nCount > m_nPageCount ) break; CStockInfo & info = container.ElementAt(nIndex); CString strCode = AfxGetVariantDispString(SLH_CODE,info,NULL); CString strClose = AfxGetVariantDispString(SLH_CLOSE,info,NULL); CString strDiffPercent = AfxGetVariantDispString(SLH_DIFFPERCENT,info,NULL); CString strVolume = AfxGetVariantDispString(SLH_VOLUME,info,NULL); rect = CRect(x,y,x+6*o,y+m_nItemHeight-1); dc.SetTextColor( AfxGetVariantColor(SLH_CODE,info) ); dc.DrawText( strCode, rect, DT_VCENTER | DT_RIGHT | DT_SINGLELINE | DT_WORD_ELLIPSIS ); rect = CRect(x+6*o,y,x+13*o,y+m_nItemHeight-1); dc.SetTextColor( AfxGetVariantColor(SLH_CLOSE,info) ); dc.DrawText( strClose, rect, DT_VCENTER | DT_RIGHT | DT_SINGLELINE | DT_WORD_ELLIPSIS ); rect = CRect(x+13*o,y,x+18*o,y+m_nItemHeight-1); dc.SetTextColor( AfxGetVariantColor(SLH_DIFFPERCENT,info) ); dc.DrawText( strDiffPercent, rect, DT_VCENTER | DT_RIGHT | DT_SINGLELINE | DT_WORD_ELLIPSIS ); rect = CRect(x+18*o,y,rectAll.right-10,y+m_nItemHeight-1); dc.SetTextColor( AfxGetVariantColor(SLH_VOLUME,info) ); dc.DrawText( strVolume, rect, DT_VCENTER | DT_RIGHT | DT_SINGLELINE | DT_WORD_ELLIPSIS ); y += m_nItemHeight; } dc.SelectObject(pOldFont); }
void CSListView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { // TODO: Add your specialized code here and/or call the base class if( UPDATE_HINT_SLISTVIEW != lHint ) return; if( IsWindowVisible() ) SetFocus( ); int nColumnCount = m_Grid.GetColumnCount(); if( nColumnCount <= 0 ) return; if( GetParentFrame()->GetSafeHwnd() != AfxGetMainFrame()->GetActiveFrame()->GetSafeHwnd() ) { m_bShouldUpdate = TRUE; return; } m_bShouldUpdate = FALSE; CStockContainer & container = AfxGetSListStockContainer(); container.Lock(); m_Grid.DeleteNonFixedRows(); // Progress CMainFrame * pMainFrame = AfxGetMainFrame(); if( pMainFrame ) { pMainFrame->ShowProgressBar( ); pMainFrame->SetProgress( 0 ); pMainFrame->SetMessageText( IDS_MAINFRAME_WAITING ); } CUIntArray anParams; anParams.SetSize( 0, nColumnCount ); for( int nCol=0; nCol < nColumnCount; nCol ++ ) { LPARAM lParam = m_Grid.GetItemData( 0, nCol ); anParams.Add( lParam ); } CRect rectClient; GetClientRect( &rectClient ); int nPageCount = 1 + rectClient.Height() / abs(m_Grid.GetFixedRowHeight()) + 1; for( int i=0; i<container.GetSize(); i++ ) { CStockInfo & info = container.GetStockInfoByID(i); int nRow = m_Grid.InsertRow( info.GetStockName() ); m_Grid.SetItemData( nRow, 0, i ); for( int nCol=0; nCol<anParams.GetSize(); nCol++ ) { m_Grid.SetItemFormat( nRow, nCol, DT_CENTER|DT_VCENTER|DT_SINGLELINE ); m_Grid.SetItemText( nRow, nCol, AfxGetVariantDispString( anParams[nCol], info, &container ) ); m_Grid.SetItemBkColour( nRow, nCol, AfxGetProfile().GetColor(CColorClass::clrSListBK) ); m_Grid.SetItemFgColour( nRow, nCol, AfxGetVariantColor( anParams[nCol], info ) ); if( anParams[nCol] == SLH_DATE ) m_Grid.SetColumnWidth( nCol, 80 ); if( anParams[nCol] == SLH_CODE ) m_Grid.SetColumnWidth( nCol, 60 ); } if( i == nPageCount+5 ) { m_Grid.Invalidate( ); MSG msg; while (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE) ) AfxGetApp()->PumpMessage(); } if( pMainFrame ) pMainFrame->SetProgress( 100*i/container.GetSize() ); } // Set Average and Weight Average // SetAverageItem( m_Grid, container, FALSE ); // 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(); }
BOOL CSListView::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if( m_Grid.GetSafeHwnd() == pMsg->hwnd ) { if( WM_LBUTTONDBLCLK == pMsg->message || ( WM_KEYDOWN == pMsg->message && VK_RETURN == pMsg->wParam ) ) { int nColumnCount = m_Grid.GetColumnCount(); int nRowCount = m_Grid.GetRowCount(); if( nColumnCount <=0 || nRowCount <= 0 ) return CFormView::PreTranslateMessage(pMsg); CRect rectCell; m_Grid.GetCellRect(0,0,&rectCell); CPoint pt = pMsg->pt; ::ScreenToClient( m_Grid.GetSafeHwnd(), &pt ); if( pt.y >= rectCell.top && pt.y < rectCell.bottom ) return CFormView::PreTranslateMessage(pMsg); int nSelRow = m_Grid.GetFocusCell().row; if( nSelRow >= 1 && nSelRow < m_Grid.GetRowCount() ) { int id = m_Grid.GetItemData(nSelRow,0); OnDblclkItem( id ); } } else if( WM_LBUTTONUP == pMsg->message ) { int nColumnCount = m_Grid.GetColumnCount(); int nRowCount = m_Grid.GetRowCount(); if( nColumnCount <=0 || nRowCount <= 0 ) return CFormView::PreTranslateMessage(pMsg); CRect rectCell; m_Grid.GetCellRect(0,0,&rectCell); CPoint pt = pMsg->pt; ::ScreenToClient( m_Grid.GetSafeHwnd(), &pt ); if( pt.y < rectCell.top || pt.y >= rectCell.bottom ) return CFormView::PreTranslateMessage(pMsg); CCellID cell = m_Grid.GetFocusCell(); if( cell.col >=0 && cell.col < nColumnCount ) { BOOL bSortAscendNew = ( m_nColSort == cell.col ? !m_bSortAscend : FALSE ); RemoveSortSign( ); m_nColSort = cell.col; m_bSortAscend = bSortAscendNew; SetSortSign( ); LPARAM lParam = m_Grid.GetItemData( 0, cell.col ); if( lParam >= 0 ) { CStockContainer & container = AfxGetSListStockContainer(); container.Lock(); //if( container.Sort( lParam, m_bSortAscend ) ) // OnUpdate( NULL, UPDATE_HINT_SLISTVIEW, NULL ); CStockContainer::m_pSortContainer = &container; container.m_nSortVariantID = lParam; container.m_bSortAscend = m_bSortAscend; m_Grid.SortItems( ItemCompareFunc, 0, TRUE ); container.UnLock(); } m_Grid.Invalidate( ); } } } return CFormView::PreTranslateMessage(pMsg); }
void CSetBaseDlg::OnStart() { UpdateData( ); CNetDatabase netdb; if( !netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) ) { AfxMessageBox( IDS_ROOTPATH_ERROR, MB_OK | MB_ICONINFORMATION ); return; } if( ( m_strFileF10.IsEmpty() && m_strFileTdx.IsEmpty() && m_strFileFxj.IsEmpty() && m_strPathFxjBlock.IsEmpty() ) || ( 0 != access(m_strFileF10,0) && 0 != access(m_strFileTdx,0) && 0 != access(m_strFileFxj,0) && 0 != access(m_strPathFxjBlock,0) ) ) { AfxMessageBox( IDS_SETBASE_FILENOTEXISTS, MB_OK|MB_ICONINFORMATION ); return; } m_btnStart.EnableWindow( FALSE ); AfxGetApp()->WriteProfileString( "setbasedlg", "filef10", m_strFileF10 ); AfxGetApp()->WriteProfileString( "setbasedlg", "filetdx", m_strFileTdx ); AfxGetApp()->WriteProfileString( "setbasedlg", "filefxj", m_strFileFxj ); AfxGetApp()->WriteProfileString( "setbasedlg", "pathfxjblock", m_strPathFxjBlock ); m_ctrlProgress.SetWindowPos( NULL, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE ); m_ctrlProgress.SetRange( 0, STKLIB_MAX_PROGRESS ); m_ctrlProgress.SetPos( 0 ); if( m_strFileF10.GetLength() > 0 ) { CPackage pac; pac.m_nType = CPackage::packageBasetext; pac.m_bIsZipped = ( m_strFileF10.GetLength() > 4 && 0 == m_strFileF10.Right(4).CompareNoCase(".zip") ); pac.m_strDescript = m_strFileF10; if( netdb.InstallPackageEx( pac, m_strFileF10, InstallBaseCallback, GetSafeHwnd() ) ) AfxMessageBox( IDS_SETBASE_INSTALLF10OK, MB_OK|MB_ICONINFORMATION ); else AfxMessageBox( IDS_SETBASE_INSTALLF10FAIL, MB_OK|MB_ICONINFORMATION ); } if( m_strFileTdx.GetLength() > 0 ) { CPackage pac; pac.m_nType = CPackage::packageBasetable; pac.m_bIsZipped = ( m_strFileTdx.GetLength() > 4 && 0 == m_strFileTdx.Right(4).CompareNoCase(".zip") ); pac.m_strDescript = m_strFileTdx; if( netdb.InstallPackageEx( pac, m_strFileTdx, NULL, NULL ) ) AfxMessageBox( IDS_SETBASE_INSTALLTDXOK, MB_OK|MB_ICONINFORMATION ); else AfxMessageBox( IDS_SETBASE_INSTALLTDXFAIL, MB_OK|MB_ICONINFORMATION ); } if( m_strFileFxj.GetLength() > 0 ) { CPackage pac; pac.m_nType = CPackage::packageBasetable; pac.m_bIsZipped = ( m_strFileFxj.GetLength() > 4 && 0 == m_strFileFxj.Right(4).CompareNoCase(".zip") ); pac.m_strDescript = m_strFileFxj; if( netdb.InstallPackageEx( pac, m_strFileFxj, NULL, NULL ) ) AfxMessageBox( IDS_SETBASE_INSTALLFXJOK, MB_OK|MB_ICONINFORMATION ); else AfxMessageBox( IDS_SETBASE_INSTALLFXJFAIL, MB_OK|MB_ICONINFORMATION ); } if( m_strPathFxjBlock.GetLength() > 0 ) { CPackage pac; pac.m_nType = CPackage::packageCode; pac.m_bIsZipped = ( m_strPathFxjBlock.GetLength() > 4 && 0 == m_strPathFxjBlock.Right(4).CompareNoCase(".zip") ); pac.m_strDescript = m_strPathFxjBlock; BOOL bOK = FALSE; int nFileCountTotal = CNetDatabase::GetFileCount( m_strPathFxjBlock, FALSE ); DWORD attr = GetFileAttributes( m_strPathFxjBlock ); if( 0xFFFFFFFF != attr && (attr & FILE_ATTRIBUTE_DIRECTORY) ) bOK = netdb.InstallPackagePath( pac, m_strPathFxjBlock, InstallBaseCallback, GetSafeHwnd(), nFileCountTotal, 0, FALSE ); else bOK = netdb.InstallPackage( pac, m_strPathFxjBlock, InstallBaseCallback, GetSafeHwnd() ); if( bOK ) { AfxGetDomainContainer().Store( AfxGetProfile().GetDomainFile() ); AfxMessageBox( IDS_SETBASE_INSTALLFXJBLOCKOK, MB_OK|MB_ICONINFORMATION ); } else AfxMessageBox( IDS_SETBASE_INSTALLFXJBLOCKFAIL, MB_OK|MB_ICONINFORMATION ); } m_ctrlProgress.SetPos( STKLIB_MAX_PROGRESS ); m_btnStart.EnableWindow( TRUE ); AfxGetStockContainer().ReloadBase( &AfxGetDB() ); AfxGetSListStockContainer().ReRetrieveFromStatic( AfxGetActiveStrategy() ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_GRAPHVIEW, NULL ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_BASEVIEW, NULL ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_SLISTVIEW, NULL ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_SELECTORVIEW, NULL ); }
void CSetKDataDlg::OnCompleted( ) { AfxGetSListStockContainer().ReRetrieveFromStatic( AfxGetActiveStrategy() ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_GRAPHVIEW, NULL ); AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_SLISTVIEW, NULL ); }