www.pudn.com > ZoomPIx.rar > ImgWnd.cpp


// ImgWnd.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "ZoomImgDemo.h" 
#include "ImgWnd.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CImgWnd 
 
CImgWnd::CImgWnd() 
{ 
	m_nStrechType = STRECH_1_1; 
} 
 
CImgWnd::~CImgWnd() 
{ 
} 
 
 
BEGIN_MESSAGE_MAP(CImgWnd, CStatic) 
	//{{AFX_MSG_MAP(CImgWnd) 
	ON_WM_PAINT() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CImgWnd message handlers 
void CImgWnd::SetImage(UINT resID) 
{ 
	m_bmpImage.LoadBitmap(resID); 
} 
void CImgWnd::SetStrechType(int nStrechType) 
{ 
	m_nStrechType = nStrechType; 
 
	//重画 
	Invalidate(); 
} 
void CImgWnd::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	 
	//获得窗口大小 
	CRect r; 
	GetClientRect(&r); 
 
	//填充背景 
	HBRUSH brush = (HBRUSH)::GetStockObject(GRAY_BRUSH);  
	::FillRect(dc.m_hDC,&r,brush); 
	dc.SetStretchBltMode(HALFTONE); 
 
	//将位图选进设备场景中 
	CDC memdc; 
	memdc.CreateCompatibleDC( &dc ); 
	CBitmap* pOldBmp= memdc.SelectObject(&m_bmpImage); 
	 
	//获得位图参数 
	BITMAP bmp; 
	m_bmpImage.GetBitmap(&bmp); 
 
	//开始缩放 
	switch(m_nStrechType) 
	{ 
	case STRECH_1_1://1:1 
			dc.BitBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,SRCCOPY); 
		break; 
	case STRECH_FULL_X://按宽度 
		dc.StretchBlt(r.left,r.top,r.Width(),bmp.bmHeight,&memdc,0,0, 
			bmp.bmWidth,bmp.bmHeight,SRCCOPY); 
		break; 
	case STRECH_FULL_Y://按高度 
		dc.StretchBlt(r.left,r.top,bmp.bmWidth,r.Height(),&memdc,0,0, 
			bmp.bmWidth,bmp.bmHeight,SRCCOPY); 
		break; 
	case STRECH_FULL://充满窗口 
		dc.StretchBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0, 
			bmp.bmWidth,bmp.bmHeight,SRCCOPY); 
		break; 
	case STRECH_CENTER://居中显示,大小为窗口的一半 
		dc.StretchBlt(r.Width()/4,r.Height()/4,r.Width()/2,r.Height()/2,&memdc,0,0, 
			bmp.bmWidth,bmp.bmHeight,SRCCOPY); 
		break; 
	} 
	 
	//还原 
	memdc.SelectObject(pOldBmp); 
	 
}