⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloaddlg.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
	{
		// 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 + -