📄 exportdest.cpp.svn-base
字号:
// ExportDest.cpp : implementation file
//
#include "stdafx.h"
#include "ExportDest.h"
#include "SelectStk.h"
#include "ExportOption.h"
#include <io.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CExportDest property page
void CExportDest::StoreProfile( )
{
AfxGetApp()->WriteProfileInt( "exportdest", "txtcheck", m_bTxtCheck );
AfxGetApp()->WriteProfileInt( "exportdest", "mdbcheck", m_bMdbCheck );
AfxGetApp()->WriteProfileInt( "exportdest", "csvcheck", m_bCsvCheck );
AfxGetApp()->WriteProfileInt( "exportdest", "odbccheck", m_bODBCCheck );
AfxGetApp()->WriteProfileString( "exportdest", "txtdest", m_strTxtDest );
AfxGetApp()->WriteProfileString( "exportdest", "mdbdest", m_strMdbDest );
AfxGetApp()->WriteProfileString( "exportdest", "csvdest", m_strCsvDest );
AfxGetApp()->WriteProfileString( "exportdest", "odbcdest", m_strODBCDest );
AfxGetApp()->WriteProfileInt( "exportdest", "exeonfinish", m_bExeOnFinish );
AfxGetApp()->WriteProfileInt( "exportdest", "overwrite", m_bOverwrite );
}
void CExportDest::LoadProfile( )
{
m_bTxtCheck = TRUE;
m_bOverwrite = TRUE;
m_bExeOnFinish = TRUE;
m_strTxtDest = AfxGetProfile().GetExportPath() + "txt";
m_strMdbDest = AfxGetProfile().GetExportPath() + "KData.mdb";
m_strCsvDest = AfxGetProfile().GetExportPath() + "csv";
m_strODBCDest = "ODBC;DSN=Excel Files;DBQ="
+ AfxGetProfile().GetExportPath()
+ "KData.xls;DefaultDir="
+ AfxGetProfile().GetExportPath()
+ ";DriverId=790;MaxBufferSize=2048;PageTimeout=5;";
if( (0 != access( m_strTxtDest, 0 ) || FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( m_strTxtDest ) )
&& !CreateDirectory( m_strTxtDest, NULL ) )
m_strTxtDest = AfxGetProfile().GetExportPath();
if( (0 != access( m_strCsvDest, 0 ) || FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( m_strCsvDest ) )
&& !CreateDirectory( m_strCsvDest, NULL ) )
m_strCsvDest = AfxGetProfile().GetExportPath();
m_bTxtCheck = AfxGetApp()->GetProfileInt( "exportdest", "txtcheck", m_bTxtCheck );
m_bMdbCheck = AfxGetApp()->GetProfileInt( "exportdest", "mdbcheck", m_bMdbCheck );
m_bCsvCheck = AfxGetApp()->GetProfileInt( "exportdest", "csvcheck", m_bCsvCheck );
m_bODBCCheck = AfxGetApp()->GetProfileInt( "exportdest", "odbccheck", m_bODBCCheck );
m_strTxtDest = AfxGetApp()->GetProfileString( "exportdest", "txtdest", m_strTxtDest );
m_strMdbDest = AfxGetApp()->GetProfileString( "exportdest", "mdbdest", m_strMdbDest );
m_strCsvDest = AfxGetApp()->GetProfileString( "exportdest", "csvdest", m_strCsvDest );
m_strODBCDest = AfxGetApp()->GetProfileString( "exportdest", "odbcdest", m_strODBCDest );
m_bExeOnFinish = AfxGetApp()->GetProfileInt( "exportdest", "exeonfinish", m_bExeOnFinish );
m_bOverwrite = AfxGetApp()->GetProfileInt( "exportdest", "overwrite", m_bOverwrite );
}
IMPLEMENT_DYNCREATE(CExportDest, CPropertyPageEx)
CExportDest::CExportDest() : CPropertyPageEx(CExportDest::IDD)
{
//{{AFX_DATA_INIT(CExportDest)
m_strTxtDest = _T("");
m_strMdbDest = _T("");
m_strCsvDest = _T("");
m_bTxtCheck = FALSE;
m_bMdbCheck = FALSE;
m_bCsvCheck = FALSE;
m_bExeOnFinish = FALSE;
m_bODBCCheck = FALSE;
m_strODBCDest = _T("");
//}}AFX_DATA_INIT
m_bExporting = FALSE;
m_bCanceled = FALSE;
m_dwButtonFlags = PSWIZB_BACK | PSWIZB_NEXT;
}
CExportDest::CExportDest(UINT nIDCaption, UINT nIDTitle, UINT nIDSubTitle)
: CPropertyPageEx(CExportDest::IDD, nIDCaption, nIDTitle, nIDSubTitle)
{
m_strTxtDest = _T("");
m_strMdbDest = _T("");
m_strCsvDest = _T("");
m_bTxtCheck = FALSE;
m_bMdbCheck = FALSE;
m_bCsvCheck = FALSE;
m_bExeOnFinish = FALSE;
m_bODBCCheck = FALSE;
m_strODBCDest = _T("");
m_bExporting = FALSE;
m_bCanceled = FALSE;
m_dwButtonFlags = PSWIZB_BACK | PSWIZB_NEXT;
}
CExportDest::~CExportDest()
{
}
BOOL CExportDest::ExportBegin(CStringArray &astrColumnName, CUIntArray &anWidth,
BOOL bReportError )
{
CString strTxt, strMdb, strCsv, strODBC;
if( m_bTxtCheck ) strTxt = AfxGetFileDirectoryExist( m_strTxtDest, (LPCTSTR)AfxGetProfile().GetExportPath() );
if( m_bMdbCheck ) strMdb = m_strMdbDest;
if( m_bCsvCheck ) strCsv = AfxGetFileDirectoryExist( m_strCsvDest, (LPCTSTR)AfxGetProfile().GetExportPath() );
if( m_bODBCCheck ) strODBC = m_strODBCDest;
if( !m_exportdb.OpenAllDB(strTxt, TRUE, strMdb, strCsv, TRUE, strODBC,
bReportError ) )
return FALSE;
if( ! m_exportdb.SetTableColumn( astrColumnName, anWidth ) )
return FALSE;
return TRUE;
}
BOOL CExportDest::ExportOpenTable( CStock &stock, int ktype, BOOL bReportError )
{
CString strTableName = stock.GetStockCode();
strTableName += AfxGetKTypeString( ktype );
if( !m_exportdb.OpenAllTable( strTableName, m_bOverwrite, bReportError ) )
return FALSE;
return TRUE;
}
BOOL CExportDest::ExportAddItem( CStringArray &astrItemText )
{
// Pump Message
MSG msg;
while (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE) )
AfxGetApp()->PumpMessage();
return m_exportdb.AddItem( astrItemText );
}
void CExportDest::ExportCloseTable( )
{
m_exportdb.CloseAllTable( );
}
BOOL CExportDest::ExportFinish( )
{
m_exportdb.CloseAllDB( );
if( m_bExeOnFinish )
{
if( m_bTxtCheck && m_strTxtDest.GetLength() > 0 )
ShellExecute( NULL, "open", m_strTxtDest, NULL, NULL, SW_SHOW );
if( m_bMdbCheck && m_strMdbDest.GetLength() > 0 )
ShellExecute( NULL, "open", m_strMdbDest, NULL, NULL, SW_SHOW );
if( m_bCsvCheck && m_strCsvDest.GetLength() > 0 )
ShellExecute( NULL, "open", m_strCsvDest, NULL, NULL, SW_SHOW );
if( m_bODBCCheck && m_strODBCDest.GetLength() > 0 )
CExportDB::ExecuteODBCFile( m_strODBCDest );
}
// Set Progress
m_ctrlProgress.SetWindowPos( NULL, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE );
m_staticProgress.SetWindowPos( NULL, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE );
int nLower = 0, nUpper = 100;
m_ctrlProgress.GetRange( nLower, nUpper );
if( nUpper > nLower )
{
m_ctrlProgress.SetPos( nUpper );
CString strInfo;
strInfo.LoadString( IDS_EXPORTDB_FINISHED );
m_staticProgress.SetWindowText( strInfo );
}
return TRUE;
}
void CExportDest::DoExport( )
{
// if( !AfxAssertFunclimitProf( ) )
// return;
// EnableWindow FALSE
CPropertySheetEx * pSheet = DYNAMIC_DOWNCAST( CPropertySheetEx, GetParent() );
if( pSheet )
{
CWnd * pWnd = pSheet->GetDlgItem( IDCANCEL );
if( pWnd && ::IsWindow( pWnd->GetSafeHwnd() ) )
pWnd->EnableWindow( FALSE );
pWnd = pSheet->GetDlgItem( ID_WIZBACK );
if( pWnd && ::IsWindow( pWnd->GetSafeHwnd() ) )
pWnd->EnableWindow( FALSE );
pWnd = pSheet->GetDlgItem( ID_WIZNEXT );
if( pWnd && ::IsWindow( pWnd->GetSafeHwnd() ) )
pWnd->EnableWindow( FALSE );
}
// Get Pages
CSelectStk * pStk = (CSelectStk *)pSheet->GetPage(0);
CExportOption * pOption = (CExportOption *)pSheet->GetPage(1);
// Store CExportOption tmEnd
CSPTime timeEnd;
if( !AfxGetDB().GetTimeLocalRange( &timeEnd, NULL, NULL ) )
timeEnd = CSPTime::GetCurrentTime();
if( pOption->m_bTimeDefine && timeEnd.GetTime() > pOption->m_tmEnd.GetTime() )
timeEnd = pOption->m_tmEnd.GetTime();
pOption->m_tmEnd = timeEnd.GetTime();
pOption->StoreProfile( );
// Columns
CStringArray astrColumn;
CUIntArray anWidth;
CString strTemp;
strTemp.LoadString( IDS_EXPORTDEST_DATE ); astrColumn.Add( strTemp ); anWidth.Add( SLH_WIDTH_MIN );
strTemp.LoadString( IDS_EXPORTDEST_OPEN ); astrColumn.Add( strTemp ); anWidth.Add( SLH_WIDTH_MIN );
strTemp.LoadString( IDS_EXPORTDEST_HIGH ); astrColumn.Add( strTemp ); anWidth.Add( SLH_WIDTH_MIN );
strTemp.LoadString( IDS_EXPORTDEST_LOW ); astrColumn.Add( strTemp ); anWidth.Add( SLH_WIDTH_MIN );
strTemp.LoadString( IDS_EXPORTDEST_CLOSE ); astrColumn.Add( strTemp ); anWidth.Add( SLH_WIDTH_MIN );
strTemp.LoadString( IDS_EXPORTDEST_AMOUNT ); astrColumn.Add( strTemp ); anWidth.Add( SLH_WIDTH_MIN );
strTemp.LoadString( IDS_EXPORTDEST_VOLUME ); astrColumn.Add( strTemp ); anWidth.Add( SLH_WIDTH_MIN );
m_bExporting = TRUE;
m_bCanceled = FALSE;
if( ExportBegin( astrColumn, anWidth, TRUE ) )
{
CString strText;
int nCount = 0, nTotalCount = pStk->m_domainTemp.GetSize();
SetProgressRange( 0, nTotalCount*10 );
for( int i=0; i<pStk->m_domainTemp.GetSize(); i++ )
{
CStock stock;
stock.SetStockCode( CStock::marketUnknown, pStk->m_domainTemp.ElementAt(i) );
stock.SetDatabase( &AfxGetDB() );
DoExportStock( stock, nCount*10, nCount*10+10, pOption );
nCount ++;
SetProgress( nCount*10 );
// Canceled
if( m_bCanceled )
break;
}
}
// Finish Export
ExportFinish( );
if( m_bCanceled )
{
ExportFinish( );
CPropertyPageEx::OnCancel( );
return;
}
m_bExporting = FALSE;
m_bCanceled = FALSE;
// EnableWindow TRUE
if( pSheet )
{
CWnd * pWnd = pSheet->GetDlgItem( IDCANCEL );
if( pWnd && ::IsWindow( pWnd->GetSafeHwnd() ) )
pWnd->EnableWindow( TRUE );
pWnd = pSheet->GetDlgItem( ID_WIZBACK );
if( pWnd && ::IsWindow( pWnd->GetSafeHwnd() ) )
pWnd->EnableWindow( TRUE );
pWnd = pSheet->GetDlgItem( ID_WIZNEXT );
if( pWnd && ::IsWindow( pWnd->GetSafeHwnd() ) )
pWnd->EnableWindow( TRUE );
}
}
void CExportDest::DoExportStock( CStock &stock, int nProgressStart, int nProgressEnd, CExportOption * pOption )
{
// Prepare Data
if( pOption->m_bKMin5 )
stock.PrepareData( CStock::dataK, CKData::ktypeMin5 );
if( pOption->m_bKMin15 )
stock.PrepareData( CStock::dataK, CKData::ktypeMin15 );
if( pOption->m_bKMin30 )
stock.PrepareData( CStock::dataK, CKData::ktypeMin30 );
if( pOption->m_bKMin60 )
stock.PrepareData( CStock::dataK, CKData::ktypeMin60 );
if( pOption->m_bNoResumeDR )
{
if( pOption->m_bKDay )
stock.PrepareData( CStock::dataK, CKData::ktypeDay );
if( pOption->m_bKMonth )
stock.PrepareData( CStock::dataK, CKData::ktypeMonth );
if( pOption->m_bKWeek )
stock.PrepareData( CStock::dataK, CKData::ktypeWeek );
}
else
{
// DR Up or down, auto begin
int nFormat = CKData::formatXDRdown;
if( pOption->m_bResumeDRUp )
nFormat = CKData::formatXDRup;
DWORD dateAutoDRBegin = -1;
if( pOption->m_bAutoResumeDR )
{
CSPTime sptime( pOption->m_tmAutoResumeDRBegin.GetTime() );
dateAutoDRBegin = sptime.ToStockTimeDay( );
}
stock.PrepareData( CStock::dataDR );
CDRData & drdata = stock.GetDRData();
if( pOption->m_bKDay || pOption->m_bKMonth || pOption->m_bKWeek )
{
stock.PrepareData( CStock::dataK, CKData::ktypeDay );
stock.GetKDataDay().SetDRData( drdata );
stock.GetKDataDay().ChangeCurFormat( nFormat, dateAutoDRBegin, pOption->m_nAutoResumeDRLimit );
if( pOption->m_bKMonth )
stock.ExtractKData( CKData::ktypeMonth, TRUE );
if( pOption->m_bKWeek )
stock.ExtractKData( CKData::ktypeWeek, TRUE );
}
stock.GetKDataMin5().SetDRData( drdata );
stock.GetKDataMin5().ChangeCurFormat( nFormat, dateAutoDRBegin, pOption->m_nAutoResumeDRLimit );
stock.GetKDataMin15().SetDRData( drdata );
stock.GetKDataMin15().ChangeCurFormat( nFormat, dateAutoDRBegin, pOption->m_nAutoResumeDRLimit );
stock.GetKDataMin30().SetDRData( drdata );
stock.GetKDataMin30().ChangeCurFormat( nFormat, dateAutoDRBegin, pOption->m_nAutoResumeDRLimit );
stock.GetKDataMin60().SetDRData( drdata );
stock.GetKDataMin60().ChangeCurFormat( nFormat, dateAutoDRBegin, pOption->m_nAutoResumeDRLimit );
}
// Calcuate Progress
int nTotal = 0, nCount = 0;
if( pOption->m_bKMonth ) nTotal += stock.GetKDataMonth().GetSize();
if( pOption->m_bKWeek ) nTotal += stock.GetKDataWeek().GetSize();
if( pOption->m_bKDay ) nTotal += stock.GetKDataDay().GetSize();
if( pOption->m_bKMin5 ) nTotal += stock.GetKDataMin5().GetSize();
if( pOption->m_bKMin15 ) nTotal += stock.GetKDataMin15().GetSize();
if( pOption->m_bKMin30 ) nTotal += stock.GetKDataMin30().GetSize();
if( pOption->m_bKMin60 ) nTotal += stock.GetKDataMin60().GetSize();
if( 0 == nTotal )
return;
// time
DWORD dateDayBegin = 0, dateDayEnd = (DWORD(-1));
DWORD dateMinBegin = 0, dateMinEnd = (DWORD(-1));
if( pOption->m_bTimeDefine )
{
dateDayBegin= CSPTime(pOption->m_tmBegin.GetTime()).ToStockTimeDay();
dateDayEnd = CSPTime(pOption->m_tmEnd.GetTime()).ToStockTimeDay();
dateMinBegin= CSPTime(pOption->m_tmBegin.GetTime()).ToStockTimeMin();
dateMinEnd = CSPTime(pOption->m_tmEnd.GetTime()).ToStockTimeMin();
}
// Begin Export Month
if( pOption->m_bKMonth
&& ExportOpenTable( stock, CKData::ktypeMonth, TRUE ) )
{
CKData & kdata = stock.GetKDataMonth( );
for( int k=0; k<kdata.GetSize(); k++ )
{
KDATA kd = kdata.ElementAt(k);
CStringArray astrItemText;
if( DoExportKDATAToStringArray( kd, astrItemText, TRUE, dateDayBegin, dateDayEnd, stock.GetStockInfo().DigitBit() ) )
ExportAddItem( astrItemText );
nCount ++;
SetProgress( nProgressStart + (nProgressEnd-nProgressStart)*nCount/nTotal );
if( m_bCanceled ) return;
}
ExportCloseTable( );
}
// Begin Export Week
if( pOption->m_bKWeek
&& ExportOpenTable( stock, CKData::ktypeWeek, TRUE ) )
{
CKData & kdata = stock.GetKDataWeek( );
for( int k=0; k<kdata.GetSize(); k++ )
{
KDATA kd = kdata.ElementAt(k);
CStringArray astrItemText;
if( DoExportKDATAToStringArray( kd, astrItemText, TRUE, dateDayBegin, dateDayEnd, stock.GetStockInfo().DigitBit() ) )
ExportAddItem( astrItemText );
nCount ++;
SetProgress( nProgressStart + (nProgressEnd-nProgressStart)*nCount/nTotal );
if( m_bCanceled ) return;
}
ExportCloseTable( );
}
// Begin Export Day
if( pOption->m_bKDay
&& ExportOpenTable( stock, CKData::ktypeDay, TRUE ) )
{
CKData & kdata = stock.GetKDataDay( );
for( int k=0; k<kdata.GetSize(); k++ )
{
KDATA kd = kdata.ElementAt(k);
CStringArray astrItemText;
if( DoExportKDATAToStringArray( kd, astrItemText, TRUE, dateDayBegin, dateDayEnd, stock.GetStockInfo().DigitBit() ) )
ExportAddItem( astrItemText );
nCount ++;
SetProgress( nProgressStart + (nProgressEnd-nProgressStart)*nCount/nTotal );
if( m_bCanceled ) return;
}
ExportCloseTable( );
}
// Begin Export Min5
if( pOption->m_bKMin5
&& ExportOpenTable( stock, CKData::ktypeMin5, TRUE ) )
{
CKData & kdata = stock.GetKDataMin5( );
for( int k=0; k<kdata.GetSize(); k++ )
{
KDATA kd = kdata.ElementAt(k);
CStringArray astrItemText;
if( DoExportKDATAToStringArray( kd, astrItemText, FALSE, dateMinBegin, dateMinEnd, stock.GetStockInfo().DigitBit() ) )
ExportAddItem( astrItemText );
nCount ++;
SetProgress( nProgressStart + (nProgressEnd-nProgressStart)*nCount/nTotal );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -