如何用鼠标滚轮控制所绘制图形的缩放?

sds123go 2017-12-07 02:56:18
各位大佬好,鄙人新手在做练习遇到以下问题,已绘制出几个简单的图形,例如点、直线、矩形、多边形等;如何通过OnMouseWheel消息对所绘制图形实现放大和缩小呢?绘图代码如下:
CClientDC dc(this);
CPen pen(m_nLineStyle, m_nLineWidth, m_clr);
dc.SelectObject(&pen);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBrush);

switch (m_nDrawType)
{
case 1:

dc.SetPixel(point,m_clr);
break;
case 2:
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
break;
case 3:
dc.Rectangle(CRect(m_ptOrigin, point));
break;
case 4:
dc.Ellipse(CRect(m_ptOrigin, point));
break;
case 5:
if (m_CountPoint == 0)
{
m_PointFirst = point;
}

dc.SetPixel(point, m_clr);
PointArray[m_CountPoint++] = point;
m_ptEnd = point;
if (m_CountPoint >= 2)
{
dc.Polyline(PointArray, m_CountPoint);
}
break;
}
CGraph *pGraph = new CGraph(m_nDrawType, m_ptOrigin, point,m_clr,m_nLineWidth,m_nLineStyle);
m_obArray.Add(pGraph);
CView::OnLButtonUp(nFlags, point);


恳请各位大佬给个思路!!!
...全文
734 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶恭介叶恭介 2017-12-09
  • 打赏
  • 举报
回复
引用 6 楼 worldy 的回复:
1、将你的原始图保存到一个内存DC中 2、设置的一个缩放参数R(float或double) 3、在滚轮事件中OnMouseWheel事件中,调整R值,并发出Invaledate(。。) 4、根据R值和原始图片参数计算图片的目标尺寸, 5、在OnPaint或OnDraw中,根据原始尺寸和目标尺寸,调用StretchBlt()将图片显示出来
StretchBlt 这个不好,对于文字,用这个会缩放会变得模糊。我做过这功能,最好是按比例调整直线,矩形的位置,根据这个调整后的位置绘制。
赵4老师 2017-12-08
  • 打赏
  • 举报
回复
引用 4 楼 sds123go 的回复:
[quote=引用 1 楼 VisualEleven 的回复:] StretchBlt()贴图~
您好,方不方便说一下,怎么个用法[/quote] 百度搜相关关键字。
worldy 2017-12-08
  • 打赏
  • 举报
回复
1、将你的原始图保存到一个内存DC中 2、设置的一个缩放参数R(float或double) 3、在滚轮事件中OnMouseWheel事件中,调整R值,并发出Invaledate(。。) 4、根据R值和原始图片参数计算图片的目标尺寸, 5、在OnPaint或OnDraw中,根据原始尺寸和目标尺寸,调用StretchBlt()将图片显示出来
sds123go 2017-12-07
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
StretchBlt()贴图~
您好,方不方便说一下,怎么个用法
schlafenhamster 2017-12-07
  • 打赏
  • 举报
回复
使用 MM_ANISOTROPIC 及 pDC->SetViewportExt
阿源是少年 2017-12-07
  • 打赏
  • 举报
回复
放大缩小应该用映射模式去控制
Eleven 2017-12-07
  • 打赏
  • 举报
回复
StretchBlt()贴图~

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧