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

📄 upgradedlg.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
字号:
// UpgradeDlg.cpp : implementation file
//

#include "stdafx.h"

#include "UpgradeDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


#define	ST_UPGRADE_PAUSED			1
#define	ST_UPGRADE_DLOK				2
#define	ST_UPGRADE_NOTFOUND			3
#define	ST_UPGRADE_CANNOTOPENFILE	4


HANDLE CUpgradeDlg::m_hEventKillUpgradeThread	=	NULL;
HANDLE CUpgradeDlg::m_hEventUpgradeThreadKilled	=	NULL;
HFILE  CUpgradeDlg::m_hFileUpgrade				=	NULL;


BOOL CALLBACK UpgradeCallback(DWORD dwCode, DWORD dwProgress,
							LPCTSTR lpszMsg, void *cookie)
{
	HWND	hMainWnd	=	(HWND)cookie;

	if( PROG_PROGRESS == dwCode )
	{
		::SendMessage( hMainWnd, WM_USER_UPGRADE_PROGRESS, dwProgress, (LPARAM)lpszMsg );
	}
	else
	{
		::SendMessage( hMainWnd, WM_USER_UPGRADE_MESSAGE, dwCode, (LPARAM)lpszMsg );
	}

	// User wants to quit program
	if(WAIT_OBJECT_0 == WaitForSingleObject(CUpgradeDlg::m_hEventKillUpgradeThread,0) )
	{
		::PostMessage( hMainWnd, WM_USER_UPGRADE_END, ST_UPGRADE_PAUSED, 0 );
		SetEvent(CUpgradeDlg::m_hEventUpgradeThreadKilled);
		if( NULL != CUpgradeDlg::m_hFileUpgrade )
		{
			::CloseHandle( (HANDLE)CUpgradeDlg::m_hFileUpgrade );
			CUpgradeDlg::m_hFileUpgrade	=	NULL;
		}
		AfxEndThread( 0, TRUE );
		return FALSE;
	}
	return TRUE;
}

char	szUpgradeFileName[]	=	"upgrade.exe";

UINT UpgradeMain(LPVOID pParam)
{	
	LPUPGRADE_INFO pInfo=(LPUPGRADE_INFO)pParam;
	
	PostMessage( pInfo->hMainWnd, WM_USER_UPGRADE_PROGRESS, 0, 0 );

	CHttpClient	http;
	http.SetServer( AfxGetProfile().GetHTTPServerDomain(), AfxGetProfile().GetHTTPServerPort() );
	http.SetAccessType( AfxGetQSProfile().GetAccessType(), AfxGetQSProfile().GetProxyType(),
						AfxGetQSProfile().GetProxyAddress(), AfxGetQSProfile().GetProxyPort(),
						AfxGetQSProfile().GetProxyUser(), AfxGetQSProfile().GetProxyPasswd() );
	
	CFile	file;
	CString	sFileName	=	AfxGetProfile().GetWorkDirectory() + szUpgradeFileName;
	if( file.Open( sFileName, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite) )
	{
		CUpgradeDlg::m_hFileUpgrade	=	(HFILE)file.m_hFile;
		DWORD dwHttpCode = http.WGet( AfxGetProfile().GetUpgradeURL(), &file, UpgradeCallback, pInfo->hMainWnd );
		file.Close();
		CUpgradeDlg::m_hFileUpgrade	=	NULL;
		if( HTTP_STATUS_OK == dwHttpCode )
		{
			::SendMessage( pInfo->hMainWnd, WM_USER_UPGRADE_END, ST_UPGRADE_DLOK, 0 );
		}
		else
		{
			::SendMessage( pInfo->hMainWnd, WM_USER_UPGRADE_END, ST_UPGRADE_NOTFOUND, 0 );
		}
	}
	else
	{
		::SendMessage( pInfo->hMainWnd, WM_USER_UPGRADE_END, ST_UPGRADE_CANNOTOPENFILE, 0 );
		if( NULL != CUpgradeDlg::m_hFileUpgrade )
		{
			::CloseHandle( (HANDLE)CUpgradeDlg::m_hFileUpgrade );
			CUpgradeDlg::m_hFileUpgrade	=	NULL;
		}
	}
	
	AfxEndThread( 0, TRUE );
	return 0;
}

/////////////////////////////////////////////////////////////////////////////
// CUpgradeDlg dialog


CUpgradeDlg::CUpgradeDlg(CWnd* pParent /*=NULL*/)
	: CXFDialog(CUpgradeDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUpgradeDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_pUpgradeInfo	=	NULL;
	m_bAutoRun		=	FALSE;
}

CUpgradeDlg::~CUpgradeDlg( )
{
	if( m_pUpgradeInfo )
	{
		delete	m_pUpgradeInfo;
		m_pUpgradeInfo	=	NULL;
	}
}

void CUpgradeDlg::SetAutoRun( BOOL bAutoRun )
{
	m_bAutoRun	=	bAutoRun;
}

void CUpgradeDlg::DoDataExchange(CDataExchange* pDX)
{
	CXFDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUpgradeDlg)
	DDX_Control(pDX, IDOK, m_btnOK);
	DDX_Control(pDX, IDCANCEL, m_btnCancel);
	DDX_Control(pDX, IDC_STATIC_STATUS, m_staticStatus);
	DDX_Control(pDX, IDC_STATIC_PROGRESS, m_staticProgress);
	DDX_Control(pDX, IDC_PROXY_SET, m_btnProxySet);
	DDX_Control(pDX, IDC_EDIT_EXPLAIN, m_editExplain);
	DDX_Control(pDX, IDC_DL_PROGRESS, m_ctrlProgress);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUpgradeDlg, CXFDialog)
	//{{AFX_MSG_MAP(CUpgradeDlg)
	ON_BN_CLICKED(IDC_PROXY_SET, OnProxySet)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_USER_UPGRADE_MESSAGE, OnUpgradeMessage)
	ON_MESSAGE(WM_USER_UPGRADE_PROGRESS, OnUpgradeProgress)
	ON_MESSAGE(WM_USER_UPGRADE_END, OnUpgradeEnd)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUpgradeDlg message handlers

BOOL CUpgradeDlg::OnInitDialog() 
{
	CXFDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	HRSRC		hReSrc = NULL;
	HGLOBAL		hRead = NULL;
	LPCTSTR		lpText;

	HINSTANCE	hModule	=	AfxGetResourceHandle();

	hReSrc = ::FindResource( hModule, MAKEINTRESOURCE(IDR_TEXT_UPGRADEEXPLAIN), _T("Text") );
	if( hReSrc )
		hRead	=	::LoadResource( hModule, hReSrc );
	if( hRead )
	{
		lpText	=	(LPCTSTR)::LockResource( hRead );
		if( lpText )
		{
			m_editExplain.SetWindowText( lpText );
		}
		::UnlockResource( hRead );
	}

	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_ctrlProgress.SetRange( 0, STKLIB_MAX_PROGRESS );
	m_ctrlProgress.SetPos( 0 );

	if( m_bAutoRun )
		OnOK( );
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CUpgradeDlg::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData( );

	// disable and enble buttons
	m_btnOK.EnableWindow( FALSE );
	m_btnProxySet.EnableWindow( FALSE );

	// 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);
	
	CUpgradeDlg::m_hEventKillUpgradeThread = CreateEvent(NULL,FALSE,FALSE,NULL);
	CUpgradeDlg::m_hEventUpgradeThreadKilled = CreateEvent(NULL,FALSE,FALSE,NULL);

	if( NULL == m_pUpgradeInfo )
		m_pUpgradeInfo	=	new UPGRADE_INFO;
	memset( m_pUpgradeInfo, 0, sizeof(UPGRADE_INFO) );
	m_pUpgradeInfo->hMainWnd	=	GetSafeHwnd();
	AfxBeginThread( UpgradeMain, (LPVOID)m_pUpgradeInfo,THREAD_PRIORITY_NORMAL);
}

void CUpgradeDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	SetEvent( m_hEventKillUpgradeThread );
	// WaitForSingleObject( m_hEventUpgradeThreadKilled, INFINITE );

	CXFDialog::OnCancel();
}

void CUpgradeDlg::OnProxySet() 
{
	// TODO: Add your control notification handler code here
	AfxDoProxySetting();
}

LRESULT CUpgradeDlg::OnUpgradeMessage(WPARAM wParam, LPARAM lParam)
{
	// set message and enable buttons
	CString	strNewMsg;
	CString	strOldMsg;
	m_staticStatus.GetWindowText( strOldMsg );
	
	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 CUpgradeDlg::OnUpgradeProgress(WPARAM wParam, LPARAM lParam)
{
	// set message and enable buttons
	if( wParam < 0 )
		wParam	=	0;
	if( wParam > STKLIB_MAX_PROGRESS-1 )
		wParam = STKLIB_MAX_PROGRESS-1;
	m_ctrlProgress.SetPos( wParam );

	CString	strProgressNew;
	strProgressNew.Format( "%.2f%%", float(wParam)/100. );
	CString	strProgressOld;
	m_staticProgress.GetWindowText( strProgressOld );
	if( 0 != strProgressNew.Compare( strProgressOld ) )
		m_staticProgress.SetWindowText( strProgressNew );
	return 1;
}

LRESULT CUpgradeDlg::OnUpgradeEnd(WPARAM wParam, LPARAM lParam)
{
	m_ctrlProgress.SetPos( STKLIB_MAX_PROGRESS );
	CString	strProgressNew;
	strProgressNew.Format( "%.2f%%", 100. );
	m_staticProgress.SetWindowText( strProgressNew );

	// set message and enable buttons
	CString	strMsg;
	if( ST_UPGRADE_PAUSED == wParam )
		strMsg.LoadString( IDS_UPGRADE_PAUSED );
	else if( ST_UPGRADE_NOTFOUND == wParam )
		strMsg.LoadString( IDS_UPGRADE_NOTFOUND );
	else if( ST_UPGRADE_DLOK == wParam )
		strMsg.LoadString( IDS_UPGRADE_DLOK );
	else if( ST_UPGRADE_CANNOTOPENFILE == wParam )
		strMsg.LoadString( IDS_UPGRADE_CANNOTOPENFILE );
	else
		ASSERT( FALSE );
		
	m_staticStatus.SetWindowText( strMsg );

	if( ST_UPGRADE_DLOK == wParam )
	{
		// Upgrade Now
		AfxGetMainFrame()->PostMessage( WM_CLOSE );
		ShellExecute( NULL, "open", AfxGetProfile().GetWorkDirectory()+szUpgradeFileName,
					  NULL, AfxGetProfile().GetWorkDirectory(), SW_SHOW );
	}

	m_btnOK.EnableWindow( TRUE );
	m_btnCancel.EnableWindow( TRUE );
	m_btnProxySet.EnableWindow( TRUE );

	CloseHandle(CUpgradeDlg::m_hEventKillUpgradeThread);
	CloseHandle(CUpgradeDlg::m_hEventUpgradeThreadKilled);

	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -