Пример #1
0
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;
}
Пример #2
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();
}
Пример #3
0
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;
}
Пример #4
0
/***
	手动改变拥有股票数量
*/
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;
	}
}
Пример #5
0
/***
	手动移除拥有股票
*/
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 );
	}
}
Пример #6
0
/***
	手动加入拥有股票
*/
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;
	}
}
Пример #7
0
/***
	初始化操作记录列表的数据
*/
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;
}
Пример #8
0
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;
}
Пример #9
0
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;
}
Пример #10
0
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);
}
Пример #11
0
// 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;
}
Пример #12
0
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;
}
Пример #13
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
}
Пример #14
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( );
}
Пример #15
0
CSPTime PASCAL CSPTime::GetCurrentTime()
// return the current system time
{
	return CSPTime(::time(NULL));
}