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

📄 transferstatus.cpp

📁 vc++6.0开发网络典型应用实例导航 1. 本光盘提供了本书中所有的实例源程序文件。 2. 附录文件夹下是Winsock 函数参考以及错误码列表
💻 CPP
字号:
// TransferStatus.cpp : implementation file
//

#include "stdafx.h"
#include "Netmsg.h"
#include "TransferStatus.h"
#include "FileSend.h"
#include "Contact.h"
#include "FxFileSend.h"
#include "StatusThread.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTransferStatus dialog

#define CHECK_WND_P(x) if (!::IsWindow(x->m_hWnd)) return;

CTransferStatus::CTransferStatus(CWnd* pParent, CStatusThread *pStatusThread)
	: CDialog(CTransferStatus::IDD, pParent)
{
	StatusThread = pStatusThread;
	//{{AFX_DATA_INIT(CTransferStatus)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CTransferStatus::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTransferStatus)
	DDX_Control(pDX, IDC_XFERED, m_Xfered);
	DDX_Control(pDX, IDC_TRANSFER, m_Transfer);
	DDX_Control(pDX, IDC_FILETOTAL, m_FileTotal);
	DDX_Control(pDX, IDC_TOFROM, m_ToFrom);
	DDX_Control(pDX, IDC_STATUS, m_Status);
	DDX_Control(pDX, IDC_FILENAME, m_FileName);
	DDX_Control(pDX, IDC_PROGRESS, m_Progress);
	//}}AFX_DATA_MAP
}

void CTransferStatus::InitStatus(CFileSocketThread *pThread, CContact *pContact, bool bSending, char *szFileName)
{
	char buf[512];
	CHECK_WND_P(this)
	m_FileName.ModifyStyle(NULL, SS_PATHELLIPSIS);
	strcpy(FileName, szFileName);
	Contact = pContact;
	Thread = pThread;
	Sending = bSending;
	m_Progress.SetRange(0, 100);
	m_FileName.SetWindowText(pContact->Transfer->szFile);
	sprintf(buf, "File size: %s", FormatBytes(pThread->FileLen));
	m_FileTotal.SetWindowText(buf);
	sprintf(buf, "%s: %s", Sending ? "To" : "From", Contact->GetScreenName());
	m_ToFrom.SetWindowText(buf);
}

void CTransferStatus::SetPercent(int nPercent)
{
	char buf[512], buf2[512];
	CHECK_WND_P(this)
	m_Progress.SetPos(nPercent);
	nopath(buf2, FileName);
	sprintf(buf, "%s %d%% of %s", Sending ? "Sent" : "Received", nPercent, buf2);
	SetWindowText(buf);
}

void CTransferStatus::SetStats(unsigned long Total, unsigned long Transfered)
{
	char buf[512];
	CHECK_WND_P(this)
	sprintf(buf, "Approx. transfer rate: %s/s", FormatBytes(Transfered));
	m_Transfer.SetWindowText(buf);
	sprintf(buf, "Transfered: %s", FormatBytes(Total));
	m_Xfered.SetWindowText(buf);
}

void CTransferStatus::SetStatus(const char *Text)
{
	char buf[512];
	CHECK_WND_P(this)
	strcpy(buf, "Status: ");
	strcat(buf, Text);
	m_Status.SetWindowText(buf);
}

void CTransferStatus::Remove()
{
	CHECK_WND_P(this)
	EndDialog(IDOK);
}

void CTransferStatus::Ended()
{
	CHECK_WND_P(this)
	CButton *Close = (CButton *)GetDlgItem(IDOK);
	m_Transfer.SetWindowText("");
	m_Xfered.SetWindowText("");
	m_FileTotal.SetWindowText("");
	Close->SetWindowText("Close");
}

BEGIN_MESSAGE_MAP(CTransferStatus, CDialog)
	//{{AFX_MSG_MAP(CTransferStatus)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTransferStatus message handlers

void CTransferStatus::OnOK() 
{
	Thread->Kill();
	CDialog::OnOK();
}

BOOL CTransferStatus::OnInitDialog() 
{
	CDialog::OnInitDialog();
	StatusThread->Init = true;	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CTransferStatus::OnClose() 
{
	OnOK();
}

void CTransferStatus::OnCancel() 
{

}

⌨️ 快捷键说明

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