MFC单文档实现滚轮图片缩放显示

本文详细介绍了如何在MFC单文档应用中利用滚轮实现图片的缩放功能。通过OnDraw函数结合CImage类的StretchBlt方法,根据滚轮上/下滚动调整图片缩放比例。滚轮向上时,以鼠标位置为中心放大图片;滚轮向下时,以绘图区中心缩小图片。同时,文章涵盖了滚轮消息响应函数的添加和屏幕坐标到工作区坐标的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标

实现滚轮的缩放:滚轮向上,以鼠标当前在绘图区的位置进行放大;滚轮向下,以绘图去的中心进行缩小。

核心

1、OnDraw函数

2、CImage

3、CImage::StretchBlt方法【缩放原理】

4、滚轮的消息响应函数

5、工作区Client坐标、屏幕Screen坐标

核心概述

1、OnDraw函数

  • 应用窗口的工作区Client进行绘图的代码都必须写在这个函数当中

2、CImage

  • 首先需要用一个CImage的对象去加载一个地址的图片,也就是我们要显示的图片
  • 如果之前有图片对象,则销毁对象,重新创建
  • 然后获取相关的图片参数:宽、高
//判断是否加载过图片
if (!cimgImage.IsNull())
{
    //加载过,销毁
    cimgImage.Destroy();
}
//加载图片
cimgImage.Load(cstrLoadPathName);
//放大倍数清零
m_fMultiple = 0;
//原图的宽度
m_nWidthSrc = cimgImage.GetWidth();
//原图的高度
m_nHeightSrc = cimgImage.GetHeight();
//源的原点清零
 m_OriginSrcPoint = (0, 0);
//使当前的窗口无效:让Windows知道这个窗口现在该重新绘制一下了
Invalidate();

3、CImage::StretchBlt()方法【缩放原理】

  • 显示图片的核心方法
  • 主要是通过改变源Src的坐标原点xSrc、ySrc以及宽度nSrcWidth和高度nSrcHeight进行缩放的操作
  • 坐标原点影响缩放的位置
  • 宽度nSrcWidth、高度nSrcHeight影响缩放的大小(小于原图的宽高:相当于放大原图的某个区域)
BOOL StretchBlt( 
   //目标
   HDC hDestDC,  //对目标设备上下文的句柄。【pDC->m_hDC】pDC是画布的对象指针,m_hDC是对象的成员,画布的句柄
   int xDest,    //x坐标,在逻辑单位,目标矩形的左上角。
   int yDest,    //y坐标,在逻辑单位,目标矩形的左上角。
   int nDestWidth,   //宽度,在逻辑单位,目标矩形。
   int nDestHeight,  //高度,在逻辑单位,目标矩形。
   //源:不需要源的DC句柄,加载的时候已经获取
   int xSrc,     //x坐标,在逻辑单位,源矩形的左上角。
   int ySrc,     //y坐标,在逻辑单位,源矩形的左上角。
   int nSrcWidth,  //宽度,在逻辑单位,源矩形。
   int nSrcHeight, //高度,在逻辑单位,源矩形。
   DWORD dwROP = SRCCOPY  
) const throw( ); 

4、滚轮的消息响应函数

  • 类视图》CxxxView类》右键》属性》消息》WM_MOUSEWHEEL:添加
  • 主要有滚轮上/下的标识为zDelta,屏幕坐标系的坐标点pt
  • BOOL CMyRipView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)

5、工作区Client坐标、屏幕Screen坐标

  • 屏幕坐标系转工作区坐标系:ScreenToClient(&p
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值