www.gusucode.com > VC++简单多人聊天室源码-源码程序 > VC++简单多人聊天室源码-源码程序\code\Chatter\TransferProgress.cpp

    // TransferProgress.cpp : implementation file
// Download by http://www.NewXing.com

#include "stdafx.h"
#include "chatter.h"
#include "TransferProgress.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTransferProgress

int CTransferProgress::m_nHeight = 15;

CTransferProgress::CTransferProgress()
{
	VERIFY(m_font.CreateFont(
		12,                        // nHeight
		0,                         // nWidth
		0,                         // nEscapement
		0,                         // nOrientation
		FW_NORMAL,                 // nWeight
		FALSE,                     // bItalic
		FALSE,                     // bUnderline
		0,                         // cStrikeOut
		ANSI_CHARSET,              // nCharSet
		OUT_DEFAULT_PRECIS,        // nOutPrecision
		CLIP_DEFAULT_PRECIS,       // nClipPrecision
		DEFAULT_QUALITY,           // nQuality
		DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
		"宋体"));                 // lpszFacename
	
	m_pDC = NULL;
}

CTransferProgress::~CTransferProgress()
{
	delete m_pDC;
}


/////////////////////////////////////////////////////////////////////////////
// CTransferProgress message handlers

BOOL CTransferProgress::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd) 
{
	CRect progressRect(rect), labelRect(rect), velocityRect(rect);

	labelRect.right -= 150;
	velocityRect.left +=160;
	velocityRect.right -= 30;
	progressRect.left += 200;
	
	m_progress.Create(dwStyle, progressRect, pParentWnd, 1);
	m_label.Create("", dwStyle, labelRect, pParentWnd, 0xffff);
	m_velocity.Create("", dwStyle, labelRect, pParentWnd, 0xffff);

	m_pDC = new CClientDC(&m_label);
	m_pDC->SelectObject(&m_font);
	
	return TRUE;
}

void CTransferProgress::SetRange(DWORD nMaxRange)
{
	m_nStep = nMaxRange/100;
	m_progress.SetRange32(0, 100);
}
void CTransferProgress::SetPos(DWORD nPos)
{
	nPos = nPos/m_nStep;
	m_progress.SetPos(nPos);
}

void CTransferProgress::SetVelocity(DWORD nVelocity)
{
	m_velocity.SetFont(&m_font);
	CString str;
	str.Format("%d k/s", nVelocity);
	m_velocity.SetWindowText(str);

}
void CTransferProgress::SetLabel(LPCSTR szLabel)
{	
	CRect rect;
	m_label.GetClientRect(&rect);

	rect.bottom -= 1;
//	rect.right -= 40;
	CSize size = m_pDC->GetTextExtent(szLabel);
	
	CString str(szLabel);
	CString s(str);

	if(rect.Width()<size.cx)
	{
		s = str.Left((int)(1.0*rect.Width()/size.cx*str.GetLength()));
		s.SetAt(s.GetLength()-1, '.');
		s.SetAt(s.GetLength()-2, '.');
		s.SetAt(s.GetLength()-3, '.');
	}
	
	m_label.SetFont(&m_font);
	m_label.SetWindowText(s);
}

void CTransferProgress::MovePlace(CRect &rect)
{
	CRect progressRect(rect), labelRect(rect), velocityRect(rect);
	
	labelRect.right = labelRect.left+200;

	progressRect.left = labelRect.right + 10;
	progressRect.right = progressRect.left + rect.Width()/3;

	velocityRect.left = progressRect.right + 10;

	progressRect.top += 5;
	m_progress.MoveWindow(progressRect);
	m_label.MoveWindow(labelRect);
	m_velocity.MoveWindow(velocityRect);
	
}