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

📄 ftp3view.cpp

📁 《Visual C++ Bible》或者说是《Visual C++ 宝典》的对应的源码文件
💻 CPP
字号:
// FTP3View.cpp : implementation of the CFTP3View class
//

#include "stdafx.h"
#include "FTP3.h"

#include "FTP3Doc.h"
#include "FTP3View.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFTP3View

IMPLEMENT_DYNCREATE(CFTP3View, CView)

BEGIN_MESSAGE_MAP(CFTP3View, CView)
	//{{AFX_MSG_MAP(CFTP3View)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFTP3View construction/destruction

CFTP3View::CFTP3View()
{

	m_bConnectAttempted = FALSE;

}

CFTP3View::~CFTP3View()
{
}

BOOL CFTP3View::PreCreateWindow(CREATESTRUCT& cs)
{
	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CFTP3View drawing

void CFTP3View::OnDraw(CDC* pDC)
{
	CFTP3Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	if( !m_bConnectAttempted ){
		m_bConnectAttempted = TRUE;
		AfxBeginThread( (AFX_THREADPROC) CFTPThread::GetFile,
			&m_nFileStatus );
		}

}

/////////////////////////////////////////////////////////////////////////////
// CFTP3View diagnostics

#ifdef _DEBUG
void CFTP3View::AssertValid() const
{
	CView::AssertValid();
}

void CFTP3View::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CFTP3Doc* CFTP3View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFTP3Doc)));
	return (CFTP3Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CFTP3View message handlers
/////////////////////////////////////////////////////////////////////////////
// CFTPThread

IMPLEMENT_DYNCREATE(CFTPThread, CWinThread)

CFTPThread::CFTPThread()
{
}

CFTPThread::~CFTPThread()
{
}

BOOL CFTPThread::InitInstance()
{
	// TODO:  perform and per-thread initialization here
	return TRUE;
}

int CFTPThread::ExitInstance()
{
	// TODO:  perform any per-thread cleanup here
	return CWinThread::ExitInstance();
}

UINT CFTPThread::GetFile( LPVOID Status )
{
	int *pnFileStatus;
	CInternetSession *pInetSession;
	CFtpConnection *pFtpConnection = NULL;

	pnFileStatus = (int *) Status;
	*pnFileStatus = 0;

	pInetSession =
		new CInternetSession( AfxGetAppName(),
		1, PRE_CONFIG_INTERNET_ACCESS );

	try{
		pFtpConnection =
			pInetSession->GetFtpConnection( "ftp.microsoft.com");
		}
	catch( CInternetException *pEx ){
		pEx->Delete();
		pFtpConnection = NULL;
		*pnFileStatus = -1;
		goto BailOut;
		}

	*pnFileStatus = 1;
	remove( "disclaimer.txt" );
	if( !pFtpConnection->GetFile( "disclaimer.txt",
		"disclaimer.txt" ) )
		*pnFileStatus = -2;
	else
		*pnFileStatus = 2;

BailOut:
	if( pFtpConnection != NULL ){
		pFtpConnection->Close();
		delete pFtpConnection;
		}

	delete pInetSession;

	AfxEndThread( 0 );
	return( FALSE );

}

BEGIN_MESSAGE_MAP(CFTPThread, CWinThread)
	//{{AFX_MSG_MAP(CFTPThread)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFTPThread message handlers

⌨️ 快捷键说明

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