📄 downloaddlg.cpp.svn-base
字号:
{
// show message
m_staticStatus.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
m_ctrlProgress.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
CString strMsg;
strMsg.LoadString( IDS_DATA_DOWNLOADING );
m_staticStatus.SetWindowText( strMsg );
CDownloadDlg::m_hEventKillDownloadThread = CreateEvent(NULL,FALSE,FALSE,NULL);
CDownloadDlg::m_hEventDownloadThreadKilled = CreateEvent(NULL,FALSE,FALSE,NULL);
if( NULL == m_pDownloadInfo )
m_pDownloadInfo = new DOWNLOAD_INFO;
memset( m_pDownloadInfo, 0, sizeof(DOWNLOAD_INFO) );
m_pDownloadInfo->hMainWnd = GetSafeHwnd();
m_pDownloadInfo->pNetDB = &m_netdb;
m_pDownloadInfo->bReport = m_btnCheckReport.GetCheck();
m_pDownloadInfo->bDay = m_btnCheckDay.GetCheck();
m_pDownloadInfo->tmDayFrom = m_tmDayFrom.GetTime();
m_pDownloadInfo->tmDayTo = m_tmDayTo.GetTime();
m_pDownloadInfo->bMin5 = m_btnCheckMin5.GetCheck();
m_pDownloadInfo->tmMin5From = m_tmMin5From.GetTime();
m_pDownloadInfo->tmMin5To = m_tmMin5To.GetTime();
m_pDownloadInfo->bBase = m_btnCheckBase.GetCheck();
m_pDownloadInfo->bXDR = m_btnCheckXDR.GetCheck();
if( m_pDownloadInfo->bReport )
{
::SendMessage( GetSafeHwnd(), WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_REPORT );
::SendMessage( GetSafeHwnd(), WM_USER_DOWNLOAD_PROGRESS, 0, NULL );
m_nReportCount = 0;
m_bReportFinished = FALSE;
AfxGetStkReceiver().AddRcvDataWnd( GetSafeHwnd() );
CStockContainer & container = AfxGetStockContainer();
container.Lock();
m_nReportTotal = container.GetSize();
m_nReportRequestSent = AfxGetStkReceiver().RequestStockData( CStock::dataReport, container.GetData(), min(160,container.GetSize()), 0, 0 );
container.UnLock();
}
else
{
AfxBeginThread( DownloadMain, (LPVOID)m_pDownloadInfo,THREAD_PRIORITY_NORMAL);
}
}
else
{
// disable and enble buttons
m_btnOK.EnableWindow( TRUE );
m_btnCancel.EnableWindow( TRUE );
m_btnProxySet.EnableWindow( TRUE );
m_btnRefreshServers.EnableWindow( TRUE );
m_btnStop.EnableWindow( FALSE );
}
}
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();
}
void CDownloadDlg::OnRefreshServers()
{
UpdateData( );
// disable and enble buttons
m_btnRefreshServers.EnableWindow( FALSE );
m_btnOK.EnableWindow( FALSE );
m_btnStop.EnableWindow( FALSE );
m_btnCancel.EnableWindow( FALSE );
m_btnProxySet.EnableWindow( FALSE );
m_btnStopRefresh.EnableWindow( TRUE );
// show message
m_staticRefreshServer.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
CString strMsg;
strMsg.LoadString( IDS_SERVERS_REFRESHING );
m_staticRefreshServer.SetWindowText( strMsg );
m_bStopRefresh = FALSE;
BOOL bOK = TRUE;
// refresh servers
CString strServer = AfxGetProfile().GetMainServer();
CDownloadServer server;
if( !server.FromString( strServer ) )
{
AfxMessageBox( IDS_NOSERVER_DEFINED, MB_OK | MB_ICONINFORMATION );
bOK = FALSE;
}
if( bOK && !m_netdb.SetServer( server.m_strAddress, server.m_nPort ) )
{
AfxMessageBox( IDS_NOSERVER_DEFINED, MB_OK | MB_ICONINFORMATION );
bOK = FALSE;
}
// set access type
if( bOK && !m_netdb.SetAccessType( AfxGetQSProfile().GetAccessType(), AfxGetQSProfile().GetProxyType(),
AfxGetQSProfile().GetProxyAddress(), AfxGetQSProfile().GetProxyPort(),
AfxGetQSProfile().GetProxyUser(), AfxGetQSProfile().GetProxyPasswd() ) )
{
AfxMessageBox( IDS_NOSERVER_DEFINED, MB_OK | MB_ICONINFORMATION );
bOK = FALSE;
}
// login
if( bOK && !m_netdb.Login( AfxGetSView().GetS(), AfxGetSView().GetU(),
NULL, AfxGetProfile().GetVersion() ) )
{
char szErr[1024];
if( m_netdb.GetLastErrorMessage(szErr,1023) )
AfxMessageBox( szErr, MB_OK | MB_ICONINFORMATION );
else
AfxMessageBox( IDS_LOGIN_FAILED, MB_OK | MB_ICONINFORMATION );
bOK = FALSE;
}
// load server info
if( bOK && ! m_netdb.NetloadServerInfo( NULL, NULL ) )
{
char szErr[1024];
if( m_netdb.GetLastErrorMessage(szErr,1023) )
AfxMessageBox( szErr, MB_OK | MB_ICONINFORMATION );
else
AfxMessageBox( IDS_REFRESHSERVERS_FAILED, MB_OK | MB_ICONINFORMATION );
}
// refresh server combo list
if( bOK )
{
CServers & servers = m_netdb.GetServers();
servers.SaveToProfile();
InitComboServers();
}
// logout
m_netdb.Logout();
// set message and enable buttons
if( bOK )
strMsg.LoadString( IDS_SERVERS_REFRESHED );
else
strMsg.LoadString( IDS_REFRESHSERVERS_PAUSED );
m_staticRefreshServer.SetWindowText( strMsg );
m_btnRefreshServers.EnableWindow( TRUE );
m_btnOK.EnableWindow( TRUE );
m_btnCancel.EnableWindow( TRUE );
m_btnProxySet.EnableWindow( TRUE );
m_btnStop.EnableWindow( FALSE );
m_btnStopRefresh.EnableWindow( FALSE );
}
void CDownloadDlg::OnStopRefresh()
{
// TODO: Add your control notification handler code here
// set message and enable buttons
m_bStopRefresh = TRUE;
}
void CDownloadDlg::OnStop()
{
if( !m_bReportFinished )
{
m_bReportFinished = TRUE;
::PostMessage( GetSafeHwnd(), WM_USER_DOWNLOAD_END, FALSE, 0 );
}
if( m_hEventKillDownloadThread )
SetEvent( m_hEventKillDownloadThread );
// if( m_hEventDownloadThreadKilled )
// WaitForSingleObject( m_hEventDownloadThreadKilled, INFINITE );
}
LRESULT CDownloadDlg::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 )
{
m_nReportCount += pCommPacket->m_dwCount;
for( DWORD i=0; i<pCommPacket->m_dwCount; i++ )
{
CKData kdata;
kdata.SetKType( CKData::ktypeDay );
KDATA kd;
if( UpdateKDATAByREPORT( kd, &(pCommPacket->m_pReport[i]) ) )
{
kdata.Add( kd );
AfxGetDB().InstallKData( kdata, FALSE );
}
}
CStockContainer & container = AfxGetStockContainer();
if( m_nReportRequestSent - m_nReportCount < 64 && m_nReportRequestSent < (UINT)container.GetSize() )
{
container.Lock();
m_nReportRequestSent += AfxGetStkReceiver().RequestStockData( CStock::dataReport, container.GetData()+m_nReportRequestSent, min(160,container.GetSize()-m_nReportRequestSent), 0, 0 );
container.UnLock();
}
if( !m_bReportFinished && m_nReportCount > 0.95 * m_nReportTotal )
{
m_bReportFinished = TRUE;
::SendMessage( GetSafeHwnd(), WM_USER_DOWNLOAD_PROGRESS, STKLIB_MAX_PROGRESS, NULL );
AfxBeginThread( DownloadMain, (LPVOID)m_pDownloadInfo,THREAD_PRIORITY_NORMAL);
}
else if( !m_bReportFinished && m_nReportTotal > 0 )
{
DWORD dwProgress = STKLIB_MAX_PROGRESS * m_nReportCount / m_nReportTotal;
::SendMessage( GetSafeHwnd(), WM_USER_DOWNLOAD_PROGRESS, dwProgress, NULL );
}
}
break;
}
return 0L;
}
LRESULT CDownloadDlg::OnDownloadMessage(WPARAM wParam, LPARAM lParam)
{
// set message and enable buttons
CString strNewMsg;
CString strOldMsg;
m_staticStatus.GetWindowText( strOldMsg );
if( PROG_NEWGROUP == wParam )
{
strNewMsg.LoadString( lParam );
}
else if( PROG_ERRORPAC == wParam )
{
int i;
for( i=0; i<m_astrErrorPac.GetSize(); i++ )
{
if( 0 == m_astrErrorPac.ElementAt(i).Compare( (LPCTSTR)lParam ) )
break;
}
if( i == m_astrErrorPac.GetSize() )
m_astrErrorPac.Add( (LPCTSTR)lParam );
CString strMsg = CNetDatabase::GetProgressMessage( wParam );
strMsg += (LPCTSTR)lParam;
if( strMsg.GetLength() > 0 )
{
strNewMsg = strOldMsg;
int nIndex = strOldMsg.Find( " -- " );
if( -1 != nIndex )
strNewMsg = strOldMsg.Left( nIndex );
strNewMsg += " -- " + strMsg;
}
}
else
{
CString strMsg = CNetDatabase::GetProgressMessage( wParam );
if( strMsg.GetLength() > 0 )
{
strNewMsg = strOldMsg;
int nIndex = strOldMsg.Find( " -- " );
if( -1 != nIndex )
strNewMsg = strOldMsg.Left( nIndex );
strNewMsg += " -- " + strMsg;
}
}
if( strNewMsg.GetLength() > 0 )
{
if( 0 != strNewMsg.Compare( strOldMsg ) )
m_staticStatus.SetWindowText( strNewMsg );
}
return 1;
}
LRESULT CDownloadDlg::OnDownloadProgress(WPARAM wParam, LPARAM lParam)
{
// set message and enable buttons
if( wParam < 0 )
wParam = 0;
if( wParam > STKLIB_MAX_PROGRESS )
wParam = STKLIB_MAX_PROGRESS;
m_ctrlProgress.SetPos( wParam );
CString strProgressNew;
strProgressNew.Format( "%.2f%%", 100.*wParam/STKLIB_MAX_PROGRESS );
CString strProgressOld;
m_staticProgress.GetWindowText( strProgressOld );
if( 0 != strProgressNew.Compare( strProgressOld ) )
m_staticProgress.SetWindowText( strProgressNew );
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 CDownloadDlg::OnSetfocusTimeDay(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
m_btnCheckDay.SetCheck( 1 );
*pResult = 0;
}
void CDownloadDlg::OnSetfocusTimeMin5(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
m_btnCheckMin5.SetCheck( 1 );
*pResult = 0;
}
void CDownloadDlg::OnProxySet()
{
AfxDoProxySetting();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -