void CDateComboBox::SetCurrentWindowText( ) { if( !::IsWindow(m_hWnd) ) return; DWORD dwDate = -1; AfxGetSListStockContainer().GetCurrentType(NULL,NULL,&dwDate); CSPTime sptime; if( DWORD(-2) == dwDate ) { CString strItem; strItem.LoadString( IDS_DATECOMBOBOX_MORE ); SelectString( 0, strItem ); } else if( DWORD(-1) == dwDate ) { CString strItem; strItem.LoadString( IDS_DATECOMBOBOX_NOW ); SelectString( 0, strItem ); } else if( sptime.FromStockTimeDay( dwDate ) ) { CString strItem = AfxGetTimeString( sptime.GetTime(), szDateComboBoxTimeFormat, TRUE ); SelectString( 0, strItem ); } else { CString strItem; strItem.LoadString( IDS_DATECOMBOBOX_NOW ); SelectString( 0, strItem ); } }
BOOL CSetKDataDlg::DeleteKData( CString strStockCode ) { if( strStockCode.GetLength() <= 0 ) return FALSE; UpdateData( ); if( m_tmDate.GetTime() == -1 ) return FALSE; CStockInfo info; CStock stock; if( !info.SetStockCode( CStock::marketUnknown, strStockCode ) ) return FALSE; stock.SetStockInfo( &info ); int nKType = m_comboKType.GetSelect(); AfxPrepareStockData( &AfxGetDB(), stock, nKType, CKData::formatOriginal, CKData::mdtypeClose, FALSE, TRUE ); CKData & kdata = stock.GetKData(nKType); CSPTime sptime = m_tmDate.GetTime(); int nIndex = kdata.GetIndexByDate( sptime.ToStockTime(CKData::IsDayOrMin(kdata.GetKType())) ); if( nIndex >= 0 && nIndex < kdata.GetSize() ) { kdata.RemoveAt(nIndex); AfxGetDB().InstallKData( kdata, TRUE ); return TRUE; } return FALSE; }
BOOL CFilterInfoDlg::OnInitDialog() { CXFDialog::OnInitDialog(); DWORD dwDate = 0; if( AfxGetStockContainer().GetCurrentType( NULL, NULL, &dwDate ) && (-1 != dwDate || AfxGetStockContainer().GetLatestTechDate(&dwDate)) ) { CSPTime sptime; if( -1 != dwDate && sptime.FromStockTimeDay( dwDate ) ) { CString string = sptime.Format( "%Y-%m-%d" ); m_staticTime.SetWindowText( string ); } } InitListInfo( ); OnSelchangeListinfo(); CheckRadioButton( IDC_RADIOAND, IDC_RADIOOR, IDC_RADIOAND ); m_btnAll.SetCheck( 1 ); OnAll( ); m_btnAddToGroup.EnableWindow( FALSE ); m_ctrlProgress.ShowWindow( SW_HIDE ); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
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; }
DWORD CKData::GetDateDay( int nIndex ) { DWORD date = GetDate(nIndex); if( CKData::ktypeMin5 == m_nKType || CKData::ktypeMin15 == m_nKType || CKData::ktypeMin30 == m_nKType || CKData::ktypeMin60 == m_nKType ) { CSPTime sptime; if( sptime.FromStockTimeMin( date ) ) return sptime.ToStockTimeDay(); else return 0; } return date; }
void CSetKDataDlg::LoadKData( CString strStockCode ) { if( strStockCode.GetLength() <= 0 ) return; UpdateData(); m_strOpen.Empty(); m_strHigh.Empty(); m_strLow.Empty(); m_strClose.Empty(); m_dwVolume = 0; m_dwAmount = 0; if( m_tmDate.GetTime() == -1 ) { UpdateData( FALSE ); return; } CStockInfo info; CStock stock; if( !info.SetStockCode( CStock::marketUnknown, strStockCode ) ) return; stock.SetStockInfo( &info ); int nKType = m_comboKType.GetSelect(); AfxPrepareStockData( &AfxGetDB(), stock, nKType, CKData::formatOriginal, CKData::mdtypeClose, FALSE, TRUE ); CKData & kdata = stock.GetKData(nKType); // 价格小数位数格式串 CString strPriceFmt; strPriceFmt.Format( "%%.%df", info.DigitBit() ); CSPTime sptime = m_tmDate.GetTime(); int nIndex = kdata.GetIndexByDate( sptime.ToStockTime(CKData::IsDayOrMin(kdata.GetKType())) ); if( nIndex >= 0 && nIndex < kdata.GetSize() ) { KDATA kd = kdata.ElementAt(nIndex); m_strOpen.Format( strPriceFmt, kd.m_fOpen ); m_strHigh.Format( strPriceFmt, kd.m_fHigh ); m_strLow.Format( strPriceFmt, kd.m_fLow ); m_strClose.Format( strPriceFmt, kd.m_fClose ); m_dwVolume = (DWORD)(kd.m_fVolume/100); m_dwAmount = (DWORD)(kd.m_fAmount/1000); } UpdateData( FALSE ); }
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); }
CInstallPacDlg::CInstallPacDlg( ) : CPropertyPageEx(CInstallPacDlg::IDD) { //{{AFX_DATA_INIT(CInstallPacDlg) //}}AFX_DATA_INIT m_pInstallInfo = NULL; m_bDBModified = FALSE; m_bCodetableInstalled = FALSE; CSPTime tmLatestOld = 0; if( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) ) m_netdb.GetTimeLocalRange( &tmLatestOld, NULL, NULL ); m_tmLatestOld = tmLatestOld.GetTime(); }
int CKData::DayToMonth( CKData &kdday, CKData &kdmonth ) { // convert day k line to month k line SP_ASSERT( ktypeDay == kdday.GetKType() ); SP_ASSERT( ktypeMonth == kdmonth.GetKType() ); kdmonth.SetSize( 0, kdday.GetSize() / 20 + 5 ); int nStart = kdday.GetSize() % 3; int nCount = 0; KDATA dataDest; memset( &dataDest, 0, sizeof(dataDest) ); int nYearCur = 0, nMonthCur = 0 ; for( int pos=nStart; pos<kdday.GetSize(); pos++ ) { KDATA & dataSrc = kdday.ElementAt( pos ); CSPTime tm; if( !tm.FromStockTimeDay(dataSrc.m_date) ) continue; int nYear = tm.GetYear(); int nMonth = tm.GetMonth(); if( nYear != nYearCur || nMonth != nMonthCur ) // a new month { if( 0 != pos ) kdmonth.Add( dataDest ); // add a month memcpy( &dataDest, &dataSrc, sizeof(dataDest) ); // begin a new month nYearCur = nYear; nMonthCur = nMonth; } else { dataDest.m_fAmount += dataSrc.m_fAmount; if( dataDest.m_fHigh < dataSrc.m_fHigh ) dataDest.m_fHigh = dataSrc.m_fHigh; if( dataDest.m_fLow > dataSrc.m_fLow ) dataDest.m_fLow = dataSrc.m_fLow; dataDest.m_fVolume += dataSrc.m_fVolume; dataDest.m_fClose = dataSrc.m_fClose; } if( pos == kdday.GetSize()-1 ) // the latest one kdmonth.Add( dataDest ); } return kdmonth.GetSize(); }
BOOL CSetKDataDlg::StoreKData( CString strStockCode ) { if( strStockCode.GetLength() <= 0 ) return FALSE; UpdateData( ); if( m_tmDate.GetTime() == -1 ) return FALSE; if( !IsNumber(m_strOpen,FALSE) || !IsNumber(m_strHigh,FALSE) || !IsNumber(m_strLow,FALSE) || !IsNumber(m_strClose,FALSE) ) { AfxMessageBox( IDS_SETKDATA_NOTNUMBER ); return FALSE; } DWORD dwMarket = CStock::marketUnknown; CStockInfo info; if( info.SetStockCode(dwMarket, strStockCode) ) dwMarket = info.GetMarket(); int nKType = m_comboKType.GetSelect(); CSPTime sptime = m_tmDate.GetTime(); KDATA kd; memset( &kd, 0, sizeof(kd) ); kd.m_dwMarket = dwMarket; strncpy( kd.m_szCode, strStockCode, min(sizeof(kd.m_szCode)-1,strStockCode.GetLength()) ); kd.m_time = m_tmDate.GetTime(); kd.m_date = sptime.ToStockTime(CKData::IsDayOrMin(nKType)); kd.m_fOpen = (float)atof(m_strOpen); kd.m_fHigh = (float)atof(m_strHigh); kd.m_fLow = (float)atof(m_strLow); kd.m_fClose = (float)atof(m_strClose); kd.m_fVolume = (float)m_dwVolume*100; kd.m_fAmount = (float)m_dwAmount*1000; CKData kdata(nKType); kdata.Add( kd ); AfxGetDB().InstallKData( kdata ); return TRUE; }
void CDownloadDlg::OnCancel() { // TODO: Add extra cleanup here m_btnCancel.EnableWindow( FALSE ); AfxGetStkReceiver().RemoveRcvDataWnd( GetSafeHwnd() ); AfxReleaseDB(); char szErr[1024]; if( !AfxInitializeDB( szErr, sizeof(szErr) ) ) AfxMessageBox( szErr, MB_OK|MB_ICONINFORMATION ); CDialog::OnCancel( ); if( m_bDBModified ) { BOOL bRecalculate = FALSE; CSPTime tmLatest = 0; if( ( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) && m_netdb.GetTimeLocalRange( &tmLatest, NULL, NULL ) && tmLatest.GetTime() > m_tmLatestOld.GetTime() ) ) { bRecalculate = TRUE; } if( m_bAutoRun ) bRecalculate = FALSE; AfxGetStkUIApp()->OnDBChanged( FALSE /*bRecalculate*/ ); } if( !m_bAutoRun ) { CNetInfoDlg dlg; dlg.DoModal( ); if( AfxGetProfile().HasNewVersion() && IDYES == AfxMessageBox( IDS_DOWNLOAD_UPGRADENOW, MB_YESNO ) ) { CUpgradeDlg dlg; dlg.SetAutoRun( TRUE ); dlg.DoModal(); } } CXFDialog::PostNcDestroy(); }
int CKData::DayToWeek( CKData &kdday, CKData &kdweek ) { // convert day k line to week k line SP_ASSERT( ktypeDay == kdday.GetKType() ); SP_ASSERT( ktypeWeek == kdweek.GetKType() ); kdweek.SetSize( 0, kdday.GetSize() / 5 + 5 ); int nStart = kdday.GetSize() % 3; int nCount = 0; KDATA dataDest; memset( &dataDest, 0, sizeof(dataDest) ); for( int pos=nStart; pos<kdday.GetSize(); pos++ ) { KDATA & dataSrc = kdday.ElementAt( pos ); CSPTime tm; if( !tm.FromStockTimeDay(dataSrc.m_date) ) continue; if( tm.GetDayOfWeek() == 2 ) // a new week { if( 0 != pos ) kdweek.Add( dataDest ); // add a week memcpy( &dataDest, &dataSrc, sizeof(dataDest) ); // begin a new week } else { dataDest.m_fAmount += dataSrc.m_fAmount; if( dataDest.m_fHigh < dataSrc.m_fHigh ) dataDest.m_fHigh = dataSrc.m_fHigh; if( dataDest.m_fLow > dataSrc.m_fLow ) dataDest.m_fLow = dataSrc.m_fLow; dataDest.m_fVolume += dataSrc.m_fVolume; dataDest.m_fClose = dataSrc.m_fClose; } if( pos == kdday.GetSize()-1 ) // the latest one kdweek.Add( dataDest ); } return kdweek.GetSize(); }
void CInstallPacDlg::OnCompleted( ) { AfxReleaseDB(); char szErr[1024]; if( !AfxInitializeDB( szErr, sizeof(szErr) ) ) AfxMessageBox( szErr, MB_OK|MB_ICONINFORMATION ); if( m_bDBModified ) { BOOL bRecalculate = FALSE; CSPTime tmLatest = 0; if( m_bCodetableInstalled || ( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) && m_netdb.GetTimeLocalRange( &tmLatest, NULL, NULL ) && tmLatest.GetTime() > m_tmLatestOld.GetTime() ) ) { bRecalculate = TRUE; } AfxGetStkUIApp()->OnDBChanged( FALSE /*bRecalculate*/ ); m_bDBModified = FALSE; } }
/*** 手动改变拥有股票数量 */ 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::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 CDateComboBox::InitDates( ) { ResetContent( ); // Add Date ComboBox Members CSPDWordArray dwArray; AfxGetStockContainer().GetTechDateArray( dwArray ); InitStorage( dwArray.GetSize()+2, 32 ); CString strMore; strMore.LoadString( IDS_DATECOMBOBOX_MORE ); int nIndex = AddString( strMore ); SetItemData( nIndex, -2 ); /*int nMaxDaysCalculate = AfxGetProfile().GetMaxDaysCalculate( );*/ // for( int nCount=dwArray.GetSize()-1; nCount >= 0/*nCount > nMaxDaysCalculate*/; nCount -- ) for( int nCount=0; nCount < dwArray.GetSize(); nCount ++ ) { CSPTime sptime; if( sptime.FromStockTimeDay( dwArray[nCount] ) ) { CSPTime time( sptime.GetTime() ); CString strItem = AfxGetTimeString( time.GetTime(), szDateComboBoxTimeFormat, TRUE ); if( strItem.GetLength() > 0 ) { int nIndex = AddString( strItem ); SetItemData( nIndex, dwArray[nCount] ); } } } CString strNow; strNow.LoadString( IDS_DATECOMBOBOX_NOW ); nIndex = AddString( strNow ); SetItemData( nIndex, -1 ); SetCurSel( nIndex ); return 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 ); } }
double CSPTime::GetTimeTradeRatioOfOneDay( CSPTime tTradeLatestDay, CSPTime tNow ) { DWORD dwSecOrder = tNow.ToStockTimeSecOrder(); if( 0 == dwSecOrder ) return 1; if( tTradeLatestDay.GetYear() == tNow.GetYear() && tTradeLatestDay.GetMonth() == tNow.GetMonth() && tTradeLatestDay.GetDay() == tNow.GetDay() ) return ((double)dwSecOrder) / GetTradeSecondsOfOneDay(); return 1; }
CDownloadDlg::CDownloadDlg(CWnd* pParent /*=NULL*/) : CXFDialog(CDownloadDlg::IDD, pParent) { //{{AFX_DATA_INIT(CDownloadDlg) m_tmDayFrom = 0; m_tmDayTo = 0; m_tmMin5From = 0; m_tmMin5To = 0; //}}AFX_DATA_INIT m_pDownloadInfo = NULL; m_bDBModified = FALSE; CSPTime tmLatestOld = 0; if( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) ) m_netdb.GetTimeLocalRange( &tmLatestOld, NULL, NULL ); m_tmLatestOld = tmLatestOld.GetTime(); m_bInitDownloadTime = FALSE; m_bAutoRun = FALSE; m_bReportFinished = TRUE; }
/*** 初始化拥有股票列表的数据 */ BOOL CReportListCtrl::LoadStockOwnList( CStockOwnContainer & stockown, double dCash, CSPTime tmCur, double dAsset, CTechStockContainer & techstocks ) { DeleteAllItems(); int i; for( i=0; i<stockown.GetSize(); i++ ) { STOCKOWN & own = stockown.ElementAt(i); CString strStock, strShare, strBuyPrice, strNowPrice; CStockInfo info; strStock = own.szCode; if( AfxGetStockContainer().GetStockInfo( own.szCode, &info ) ) strStock = info.GetStockName(); strShare.Format( "%u", own.dwShare ); strBuyPrice.Format( "%.2f", own.dBuyPrice ); double dNowPrice = 0; if( techstocks.GetClosePrice( own.szCode, tmCur.GetTime(), &dNowPrice ) ) strNowPrice.Format( "%.2f", dNowPrice ); InsertItem( i, strStock ); SetItemText( i, 0, strStock ); SetItemText( i, 1, strShare ); SetItemText( i, 2, strBuyPrice ); SetItemText( i, 3, strNowPrice ); SetItemData( i, i ); } CString strCash; strCash.LoadString( IDS_SIMUREPORT_CASH ); InsertItem( i, strCash ); strCash.Format( "%.2f", dCash ); SetItemText( i, 1, strCash ); i++; CString strAsset; strAsset.LoadString( IDS_SIMUREPORT_ASSET ); InsertItem( i, strAsset ); strAsset.Format( "%.2f", dAsset ); SetItemText( i, 1, strAsset ); if( GetItemCount() > 0 ) SetItemState( 0, LVIS_SELECTED, LVIS_SELECTED ); return TRUE; }
void DDX_DateTimeCtrl(CDataExchange* pDX, int nIDC, CSPTime& value) { CTime tm = value.GetTime(); DDX_DateTimeCtrl(pDX, nIDC,tm); value = tm.GetTime(); }
DWORD CSPTime::GetStockTimeNext( DWORD dwDate, int ktype, DWORD dwYear ) { CSPTime sptime; if( ktype == ktypeDay ) { if( !sptime.FromStockTimeDay( dwDate ) ) return -1; if( 6 == sptime.GetDayOfWeek() ) // Friday sptime += CSPTimeSpan(3,0,0,0); else sptime += CSPTimeSpan(1,0,0,0); return sptime.ToStockTimeDay(); } else if( ktype == ktypeWeek ) { if( !sptime.FromStockTimeDay( dwDate ) ) return -1; sptime += CSPTimeSpan(7,0,0,0); return sptime.ToStockTimeDay(); } else if( ktype == ktypeMonth ) { if( !sptime.FromStockTimeDay( dwDate ) ) return -1; int nYearNew = sptime.GetYear(); int nMonthNew = sptime.GetMonth(); nYearNew = ( nMonthNew >= 12 ? nYearNew+1 : nYearNew ); nMonthNew = ( nMonthNew >= 12 ? 1 : nMonthNew+1 ); CSPTime sptime2( nYearNew, nMonthNew, sptime.GetDay(), sptime.GetHour(),sptime.GetMinute(), sptime.GetSecond() ); if( 6 == sptime2.GetDayOfWeek() ) // Friday sptime2 += CSPTimeSpan(3,0,0,0); else sptime2 += CSPTimeSpan(1,0,0,0); return sptime2.ToStockTimeDay(); } else if( ktype == ktypeMin5 ) { if( !sptime.FromStockTimeMin( dwDate ) ) return -1; if( sptime.GetHour() == 11 && sptime.GetMinute() >= 25 ) sptime += CSPTimeSpan(0,1,35,0); else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 55 ) sptime += CSPTimeSpan(0,18,35,0); else sptime += CSPTimeSpan(0,0,5,0); return sptime.ToStockTimeMin(); } else if( ktype == ktypeMin15 ) { if( !sptime.FromStockTimeMin( dwDate ) ) return -1; if( sptime.GetHour() == 11 && sptime.GetMinute() >= 15 ) sptime += CSPTimeSpan(0,1,45,0); else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 45 ) sptime += CSPTimeSpan(0,18,45,0); else sptime += CSPTimeSpan(0,0,15,0); return sptime.ToStockTimeMin(); } else if( ktype == ktypeMin30 ) { if( !sptime.FromStockTimeMin( dwDate ) ) return -1; if( sptime.GetHour() == 11 && sptime.GetMinute() >= 0 ) sptime += CSPTimeSpan(0,2,0,0); else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 30 ) sptime += CSPTimeSpan(0,19,0,0); else sptime += CSPTimeSpan(0,0,30,0); return sptime.ToStockTimeMin(); } else if( ktype == ktypeMin60 ) { if( !sptime.FromStockTimeMin( dwDate ) ) return -1; if( (sptime.GetHour() == 10 && sptime.GetMinute() >= 30) || sptime.GetHour() == 11 ) sptime += CSPTimeSpan(0,2,30,0); else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 0 ) sptime += CSPTimeSpan(0,19,30,0); else sptime += CSPTimeSpan(0,1,0,0); return sptime.ToStockTimeMin(); } else { ASSERT( FALSE ); return -1; } }
LRESULT CDownloadDlg::OnDownloadEnd(WPARAM wParam, LPARAM lParam) { // logout m_netdb.Logout(); m_ctrlProgress.SetPos( STKLIB_MAX_PROGRESS ); CString strProgressNew; strProgressNew.Format( "%.2f%%", 100. ); m_staticProgress.SetWindowText( strProgressNew ); // set message and enable buttons CString strMsg; if( wParam ) strMsg.LoadString( IDS_DOWNLOAD_FINISHED ); else strMsg.LoadString( IDS_DOWNLOAD_PAUSED ); CString strComma; strComma.LoadString( IDS_COMMA ); CString strFullStop; strFullStop.LoadString( IDS_FULLSTOP ); for( int i=0; i<m_astrErrorPac.GetSize(); i++ ) { if( 0 == i ) strMsg += CNetDatabase::GetProgressMessage( PROG_ERRORPAC ); else strMsg += strComma; strMsg += m_astrErrorPac.ElementAt(i); } if( m_astrErrorPac.GetSize() > 0 ) strMsg += strFullStop; if( lParam ) strMsg += (LPCTSTR)lParam; m_staticStatus.SetWindowText( strMsg ); m_btnOK.EnableWindow( TRUE ); m_btnCancel.EnableWindow( TRUE ); m_btnProxySet.EnableWindow( TRUE ); m_btnRefreshServers.EnableWindow( TRUE ); m_btnStop.EnableWindow( FALSE ); if( CDownloadDlg::m_hEventKillDownloadThread ) CloseHandle(CDownloadDlg::m_hEventKillDownloadThread); if( CDownloadDlg::m_hEventDownloadThreadKilled ) CloseHandle(CDownloadDlg::m_hEventDownloadThreadKilled); CDownloadDlg::m_hEventKillDownloadThread = NULL; CDownloadDlg::m_hEventDownloadThreadKilled = NULL; CSPTime tmLatest; if( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) && m_netdb.GetTimeLocalRange( &tmLatest, NULL, NULL ) ) { CString strTimeLatest = tmLatest.Format( "%Y-%m-%d,%A" ); m_staticLatest.SetWindowText( strTimeLatest ); } m_bDBModified = TRUE; if( m_bAutoRun && wParam ) OnCancel( ); return 1; }
void CMultiSort::DrawMultiSort( CDC * pDC, CSPDWordArray &adwSortID, CRect rect, UINT nSLH, int nSelectPos ) { DECLARE_COLOR_DEFINATION int x = rect.left+8; int x2 = (int)( rect.left+0.56*rect.Width() ); int x3 = rect.right-8; int y = rect.top+20; int yStep = (rect.Height()-23) / 6 ; if( yStep <= 0 ) return; CFont * pOldFont = AfxSelectDCFont( pDC, 14 ); pDC->SetBkColor( clrBK ); for( int i=0; i<adwSortID.GetSize(); i++ ) { if( (int)adwSortID[i] < 0 || (int)adwSortID[i] >= AfxGetStockContainer().GetSize() ) continue; CStockInfo & info = AfxGetStockContainer().ElementAt(adwSortID[i]); pDC->SetTextColor( clrText ); //#ifdef CLKLAN_ENGLISH_US // pDC->TextOut( x, y, info.GetStockCode() ); //#else pDC->TextOut( x, y, info.GetStockName() ); //#endif UINT nOldAlign = pDC->SetTextAlign( TA_RIGHT | TA_TOP ); pDC->SetTextColor( AfxGetVariantColor(SLH_CLOSE,info) ); pDC->TextOut( x2, y, (LPCTSTR)AfxGetVariantDispString(SLH_CLOSE,info,NULL) ); pDC->SetTextColor( AfxGetVariantColor(nSLH,info) ); if( SLH_RATIO_VOLUME == nSLH ) { double dVolRatio = 1; CSPTime tTrade; if( AfxGetVariantValue(nSLH,info,&dVolRatio,NULL) && tTrade.FromStockTimeDay( info.m_datetech ) ) dVolRatio = dVolRatio / CSPTime::GetTimeTradeRatioOfOneDay( tTrade, CSPTime::GetCurrentTime() ); CString strTemp; strTemp.Format( "%.2f", dVolRatio ); pDC->TextOut( x3, y, strTemp ); } else { pDC->TextOut( x3, y, (LPCTSTR)AfxGetVariantDispString(nSLH,info,NULL) ); } y += yStep; pDC->SetTextAlign( nOldAlign ); // 选中股票 if( nSelectPos == i ) { int ySel = y-yStep+16; if( ySel > rect.top && ySel < rect.bottom ) DrawLine( pDC, 2, clrBorder, rect.left+5, ySel, rect.right-5, ySel ); } } // 补足股票排名 for( i=adwSortID.GetSize(); i<6; i++ ) { pDC->SetTextColor( clrText ); pDC->TextOut( x, y, "-" ); UINT nOldAlign = pDC->SetTextAlign( TA_RIGHT | TA_TOP ); pDC->TextOut( x2, y, "-" ); pDC->TextOut( x3, y, "-" ); y += yStep; pDC->SetTextAlign( nOldAlign ); } pDC->SelectObject( pOldFont ); }
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( ); }