DWORD CSPTime::ToStockTimeSecOrder( DWORD dwStockExchange ) { if( -1 == GetTime() || GetTime() < 0 || 0 == GetTime() ) return 0; if( GetHour() < 9 || (GetHour() == 9 && GetMinute() < 30) ) return 0; CSPTime tmStart = CSPTime(GetYear(),GetMonth(),GetDay(),9,30,0); CSPTime tmEnd = CSPTime(GetYear(),GetMonth(),GetDay(),15,0,0); if( *this < tmStart ) return 0; if( *this > tmEnd ) return 14400; CSPTimeSpan tmSpan = *this - tmStart; int nSec = tmSpan.GetTotalSeconds(); if( nSec >= 0 && nSec <= 7200 ) return nSec; if( nSec > 7200 && nSec < 12600 ) return 7200; if( nSec >= 12600 && nSec <= 19800 ) return nSec-5400; ASSERT( FALSE ); return 0; }
time_t CSPTime::GetLatestTradeTime( time_t tmNow ) { CSPTime tNow(tmNow); CSPTime tTradeLatest = tNow; if( 7 == tNow.GetDayOfWeek() ) { tNow -= CSPTimeSpan(1,0,0,0); tTradeLatest = CSPTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),15,0,0); } else if( 1 == tNow.GetDayOfWeek() ) { tNow -= CSPTimeSpan(2,0,0,0); tTradeLatest = CSPTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),15,0,0); } else if( (tNow.GetHour() == 9 && tNow.GetMinute() < 25 ) || tNow.GetHour() < 9 ) { tNow -= CSPTimeSpan(1,0,0,0); tTradeLatest = CSPTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),15,0,0); } else if( (tNow.GetHour() == 11 && tNow.GetMinute() >= 30) || tNow.GetHour() == 12 ) { tTradeLatest = CSPTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),11,30,0).GetTime(); } else if( tNow.GetHour() >= 15 ) { tTradeLatest = CSPTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),15,0,0).GetTime(); } return tTradeLatest.GetTime(); }
time_t CSPTime::GetTimeTradeLatest( time_t tmTradeFirstToday ) { CSPTime tNow = CSPTime::GetCurrentTime(); CSPTime tTradeFirstToday( tmTradeFirstToday ); time_t tmTradeLatest = -1; int nYear = tTradeFirstToday.GetYear(); int nMonth = tTradeFirstToday.GetMonth(); int nDay = tTradeFirstToday.GetDay(); if( tNow > tTradeFirstToday && tNow.GetYear() == nYear && tNow.GetMonth() == nMonth && tNow.GetDay() == nDay ) { tmTradeLatest = tNow.GetTime(); if( (tNow.GetHour() == 11 && tNow.GetMinute() >= 30) || tNow.GetHour() == 12 ) tmTradeLatest = CSPTime(nYear,nMonth,nDay,11,30,0).GetTime(); else if( tNow.GetHour() >= 15 ) tmTradeLatest = CSPTime(nYear,nMonth,nDay,15,0,0).GetTime(); } else if( tNow > tTradeFirstToday ) tmTradeLatest = CSPTime(nYear,nMonth,nDay,15,0,0).GetTime(); return tmTradeLatest; }
/*** 手动改变拥有股票数量 */ void CSimuRealOp::OnModified() { // TODO: Add your control notification handler code here CSimuAddStockDlg dlg; dlg.SetStrategy( m_pStrategy ); dlg.SetMode( CSimuAddStockDlg::modeModifiedCash, "", m_pStrategy->RealGetCurrentCash(), 0 ); if( IDOK == dlg.DoModal( ) ) { double dValue = dlg.GetValue(); double dValueOld = m_pStrategy->RealGetCurrentCash(); OPRECORD record; memset( &record, 0, sizeof(record) ); CSPTime tmNow = CSPTime::GetCurrentTime(); CSPTime tmDay = CSPTime( tmNow.GetYear(), tmNow.GetMonth(), tmNow.GetDay(), 0, 0, 0 ); record.time = tmDay.GetTime(); if( dValue > dValueOld ) record.lOpType = STRATEGY_OPTYPE_ADDCASH; else record.lOpType = STRATEGY_OPTYPE_REMOVECASH; record.dSharePrice = fabs(dValue-dValueOld); if( m_pStrategy->RealOperate( record ) ) Initialize( ); else AfxMessageBox( IDS_SIMUREALOP_MODIFIEDCASHFAILED, MB_OK|MB_ICONINFORMATION ); m_bModified = TRUE; } }
/*** 手动移除拥有股票 */ void CSimuRealOp::OnDeletestock() { // TODO: Add your control notification handler code here if( m_pStrategy && m_listStockOwn.IsWindowVisible() ) { int nSelected = m_listStockOwn.GetSelected(); if( -1 == nSelected ) { AfxMessageBox( IDS_SIMUREALOP_OPRECORDNOSEL, MB_OK | MB_ICONINFORMATION ); return; } int nStock = m_listStockOwn.GetItemData( nSelected ); CStockOwnContainer & stockown = m_pStrategy->RealGetStockOwn(); BOOL bOK = FALSE; if( nStock >= 0 && nStock < stockown.GetSize() ) { OPRECORD record; memset( &record, 0, sizeof(record) ); CSPTime tmNow = CSPTime::GetCurrentTime(); CSPTime tmDay = CSPTime( tmNow.GetYear(), tmNow.GetMonth(), tmNow.GetDay(), 0, 0, 0 ); record.time = tmDay.GetTime(); record.lOpType = STRATEGY_OPTYPE_REMOVESTOCK; strncpy( record.szCode, stockown.ElementAt(nStock).szCode, sizeof(record.szCode) ); record.dwShare = stockown.ElementAt(nStock).dwShare; bOK = m_pStrategy->RealOperate( record ); Initialize( ); m_bModified = TRUE; } if( !bOK ) AfxMessageBox( IDS_SIMUREALOP_CANNOTDELETE, MB_OK | MB_ICONINFORMATION ); } }
/*** 手动加入拥有股票 */ void CSimuRealOp::OnAddstock() { CSimuAddStockDlg dlg; dlg.SetStrategy( m_pStrategy ); dlg.SetMode( CSimuAddStockDlg::modeAddStock, "", 0, 0 ); if( IDOK == dlg.DoModal( ) ) { CString strStockCode = dlg.GetStockCode(); double dShare = dlg.GetValue(); double dSharePrice = dlg.GetPrice(); OPRECORD record; memset( &record, 0, sizeof(record) ); CSPTime tmNow = CSPTime::GetCurrentTime(); CSPTime tmDay = CSPTime( tmNow.GetYear(), tmNow.GetMonth(), tmNow.GetDay(), 0, 0, 0 ); record.time = tmDay.GetTime(); record.lOpType = STRATEGY_OPTYPE_ADDSTOCK; strncpy( record.szCode, strStockCode.GetBuffer(sizeof(record.szCode)+1), sizeof(record.szCode) ); strStockCode.ReleaseBuffer(); record.dwShare = (DWORD)dShare; record.dSharePrice = dSharePrice; if( m_pStrategy->RealOperate( record ) ) Initialize( ); else AfxMessageBox( IDS_SIMUREALOP_ADDSTOCKFAILED, MB_OK|MB_ICONINFORMATION ); m_bModified = TRUE; } }
/*** 初始化操作记录列表的数据 */ BOOL CReportListCtrl::LoadOpRecordList( COpRecordContainer & container ) { DeleteAllItems(); for( int i=0; i<container.GetSize(); i++ ) { OPRECORD & record = container.ElementAt(i); CString strTime, strOp, strStock, strShare, strSharePrice, strAmount, strRateCost; strTime = CSPTime(record.time).Format( "%Y/%m/%d" ); strOp = AfxGetStrategyOpTypeString( record.lOpType ); CStockInfo info; strStock = record.szCode; if( AfxGetStockContainer().GetStockInfo( record.szCode, &info ) ) strStock = info.GetStockName(); strShare.Format( "%u", record.dwShare ); strSharePrice.Format( "%.2f", record.dSharePrice ); strAmount.Format( "%.2f", record.dwShare*record.dSharePrice ); strRateCost.Format( "%.2f", record.dRateCost ); InsertItem( i, strStock ); SetItemText( i, 0, strTime ); SetItemText( i, 1, strOp ); SetItemText( i, 2, strStock ); SetItemText( i, 3, strShare ); SetItemText( i, 4, strSharePrice ); SetItemText( i, 5, strAmount ); SetItemText( i, 6, strRateCost ); SetItemData( i, i ); } if( GetItemCount() > 0 ) SetItemState( 0, LVIS_SELECTED, LVIS_SELECTED ); return TRUE; }
BOOL CSPTime::FromStockTimeMin( DWORD date, DWORD year ) { int nYear = year; if( -1 == nYear ) nYear = 1990 + date/100000000; date = date % 100000000; int nMonth = date/1000000; int nDay = (date - nMonth*1000000)/10000; int nHour = (date - nMonth*1000000 - nDay*10000)/100; int nMinute = (date - nMonth*1000000 - nDay*10000 - nHour*100); struct tm atm; atm.tm_sec = 0; atm.tm_min = nMinute; atm.tm_hour = nHour; if( nDay < 1 || nDay > 31) return FALSE; atm.tm_mday = nDay; if( nMonth < 1 || nMonth > 12) return FALSE; atm.tm_mon = nMonth - 1; // tm_mon is 0 based if( nYear < 1900 ) return FALSE; atm.tm_year = nYear - 1900; // tm_year is 1900 based atm.tm_isdst = -1; time_t tmt = mktime(&atm); if( tmt == -1 ) // indicates an illegal input time return FALSE; *this = CSPTime( nYear, nMonth, nDay, nHour, nMinute, 0 ); 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; }
void CEditKDATADlg::SetKDATA( KDATA kd, int nKType ) { m_kd = kd; m_nKType = nKType; CSPTime sptime; if( sptime.FromStockTime( kd.m_date, CKData::IsDayOrMin(m_nKType) ) ) m_tmDate = CSPTime( sptime.GetTime() ); m_strOpen.Format( "%.3f", kd.m_fOpen ); m_strHigh.Format( "%.3f", kd.m_fHigh ); m_strLow.Format( "%.3f", kd.m_fLow ); m_strClose.Format( "%.3f", kd.m_fClose ); m_dwVolume = (DWORD)(kd.m_fVolume/100); m_dwAmount = (DWORD)(kd.m_fAmount/1000); }
// update KDATA by Report data BOOL UpdateKDATAByREPORT( KDATA &kd, REPORT * pReport ) { SP_ASSERT( pReport ); if( NULL == pReport ) return FALSE; memset( &kd, 0, sizeof(kd) ); kd.m_dwMarket = pReport->m_dwMarket; strncpy( kd.m_szCode, pReport->m_szCode, min(sizeof(kd.m_szCode)-1,sizeof(pReport->m_szCode)) ); kd.m_time = pReport->m_time; if( 0 == pReport->m_time || -1 == pReport->m_time ) kd.m_date = CSPTime::GetCurrentTime().ToStockTimeDay(); else kd.m_date = CSPTime(pReport->m_time).ToStockTimeDay(); kd.m_fOpen = pReport->m_fOpen; kd.m_fHigh = pReport->m_fHigh; kd.m_fLow = pReport->m_fLow; kd.m_fClose = pReport->m_fNew; kd.m_fAmount = pReport->m_fAmount; kd.m_fVolume = pReport->m_fVolume; return TRUE; }
UINT DownloadMain(LPVOID pParam) { LPDOWNLOAD_INFO pInfo=(LPDOWNLOAD_INFO)pParam; int nCountDay = 0; int nCountBase = 0; int nCountXDR = 0; int nCountMin5 = 0; if( pInfo->bDay ) { ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_DAY ); ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_PROGRESS, 0, NULL ); CSPTime tmFrom( pInfo->tmDayFrom ); CSPTime tmTo( pInfo->tmDayTo ); tmFrom = CSPTime( tmFrom.GetYear(), tmFrom.GetMonth(), tmFrom.GetDay(), 0, 0, 0 ); tmTo = CSPTime( tmTo.GetYear(), tmTo.GetMonth(), tmTo.GetDay(), 23, 59, 59 ); nCountDay = pInfo->pNetDB->NetloadDayKLine( NULL, &tmFrom, &tmTo, DownloadCallback, pInfo->hMainWnd ); } // User wants to quit program if(WAIT_OBJECT_0 == WaitForSingleObject(CDownloadDlg::m_hEventKillDownloadThread,0) ) { ::PostMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, FALSE, 0 ); SetEvent(CDownloadDlg::m_hEventDownloadThreadKilled); AfxEndThread( 0, TRUE ); return 0; } if( pInfo->bBase ) { ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_BASE ); ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_PROGRESS, 0, NULL ); nCountBase = pInfo->pNetDB->NetloadBasetable( NULL, NULL, NULL, DownloadCallback, pInfo->hMainWnd ); } // User wants to quit program if(WAIT_OBJECT_0 == WaitForSingleObject(CDownloadDlg::m_hEventKillDownloadThread,0) ) { ::PostMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, FALSE, 0 ); ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_PROGRESS, 0, NULL ); SetEvent(CDownloadDlg::m_hEventDownloadThreadKilled); AfxEndThread( 0, TRUE ); return 0; } if( pInfo->bXDR ) { ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_XDR ); ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_PROGRESS, 0, NULL ); nCountXDR = pInfo->pNetDB->NetloadDRData( NULL, NULL, NULL, DownloadCallback, pInfo->hMainWnd ); } // User wants to quit program if(WAIT_OBJECT_0 == WaitForSingleObject(CDownloadDlg::m_hEventKillDownloadThread,0) ) { ::PostMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, FALSE, 0 ); SetEvent(CDownloadDlg::m_hEventDownloadThreadKilled); AfxEndThread( 0, TRUE ); return 0; } if( pInfo->bMin5 ) { ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_MIN5 ); ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_PROGRESS, 0, NULL ); CSPTime tmFrom( pInfo->tmMin5From ); CSPTime tmTo( pInfo->tmMin5To ); tmFrom = CSPTime( tmFrom.GetYear(), tmFrom.GetMonth(), tmFrom.GetDay(), 0, 0, 0 ); tmTo = CSPTime( tmTo.GetYear(), tmTo.GetMonth(), tmTo.GetDay(), 23, 59, 59 ); nCountMin5 = pInfo->pNetDB->Netload5MinKLine( NULL, &tmFrom, &tmTo, DownloadCallback, pInfo->hMainWnd ); } if( pInfo->bMin5 && nCountMin5 == 0 ) { CString strNote; strNote.LoadString( IDS_DLMIN5_NOTSUPPORT ); ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, TRUE, (LPARAM)strNote.GetBuffer(strNote.GetLength()+1) ); strNote.ReleaseBuffer(); } else if( pInfo->bBase && nCountBase == 0 ) { CString strNote; strNote.LoadString( IDS_DLBASE_NOTSUPPORT ); ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, TRUE, (LPARAM)strNote.GetBuffer(strNote.GetLength()+1) ); strNote.ReleaseBuffer(); } else { ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, TRUE, 0 ); } AfxEndThread( 0, TRUE ); return 0; }
BOOL CDownloadDlg::OnInitDialog() { CXFDialog::OnInitDialog(); // TODO: Add extra initialization here m_staticRefreshServer.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_HIDEWINDOW); m_staticStatus.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_HIDEWINDOW); m_ctrlProgress.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_HIDEWINDOW); m_btnStopRefresh.EnableWindow( FALSE ); m_btnStop.EnableWindow( FALSE ); InitComboServers(); m_ctrlProgress.SetRange( 0, STKLIB_MAX_PROGRESS ); m_ctrlProgress.SetPos( 0 ); m_btnCheckReport.SetCheck( AfxGetStkReceiver().NetEngineIsWorking() ); m_btnCheckReport.EnableWindow( AfxGetStkReceiver().NetEngineIsWorking() ); m_btnCheckDay.SetCheck( TRUE ); // Set Time CSPTime tmCurrent = CSPTime::GetCurrentTime(); if( tmCurrent.GetHour() < 15 ) tmCurrent -= CSPTimeSpan(1,0,0,0); if( tmCurrent.GetMonth() == 1 && tmCurrent.GetDay() == 1 ) tmCurrent -= CSPTimeSpan(1,0,0,0); if( tmCurrent.GetMonth() == 5 && tmCurrent.GetDay() == 1 ) tmCurrent -= CSPTimeSpan(1,0,0,0); if( tmCurrent.GetMonth() == 10 && tmCurrent.GetDay() == 1 ) tmCurrent -= CSPTimeSpan(1,0,0,0); if( tmCurrent.GetDayOfWeek() == 1 ) tmCurrent -= CSPTimeSpan(2,0,0,0); if( tmCurrent.GetDayOfWeek() == 7 ) tmCurrent -= CSPTimeSpan(1,0,0,0); m_tmDayFrom = m_netdb.GetTimeInitial().GetTime(); m_tmDayTo = tmCurrent; m_tmMin5From = m_tmMin5To = tmCurrent; CSPTime tmLatest; if( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) && m_netdb.GetTimeLocalRange( &tmLatest, NULL, NULL ) ) { CString strTimeLatest = (LPCTSTR)AfxGetTimeString( tmLatest.GetTime(), "%Y-%m-%d", TRUE ); //tmLatest.Format( "%Y-%m-%d,%A" ); m_staticLatest.SetWindowText( strTimeLatest ); m_tmDayFrom = CSPTime(tmLatest.GetTime()) + CSPTimeSpan(1,0,0,0 ); if( m_tmDayFrom.GetMonth() == 1 && m_tmDayFrom.GetDay() == 1 ) m_tmDayFrom += CSPTimeSpan(1,0,0,0); if( m_tmDayFrom.GetMonth() == 5 && m_tmDayFrom.GetDay() == 1 ) m_tmDayFrom += CSPTimeSpan(1,0,0,0); if( m_tmDayFrom.GetMonth() == 10 && m_tmDayFrom.GetDay() == 1 ) m_tmDayFrom += CSPTimeSpan(1,0,0,0); if( m_tmDayFrom.GetDayOfWeek() == 1 ) m_tmDayFrom += CSPTimeSpan(1,0,0,0); if( m_tmDayFrom.GetDayOfWeek() == 7 ) m_tmDayFrom += CSPTimeSpan(2,0,0,0); if( m_tmDayFrom > m_tmDayTo ) m_tmDayTo = m_tmDayFrom; } // Initial Download if( m_bInitDownloadTime ) { m_tmDayFrom = m_tmDLBegin; m_tmDayTo = m_tmDLEnd; } UpdateData( FALSE ); if( m_bAutoRun ) { UpdateWindow( ); ShowWindow( SW_SHOW ); OnOK( ); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
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( ); }
CSPTime PASCAL CSPTime::GetCurrentTime() // return the current system time { return CSPTime(::time(NULL)); }