📄 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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -