问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MFC环境下用C++怎样实现滚轮对物体的放大和缩小,求详细代码?

发布网友 发布时间:2022-05-01 11:39

我来回答

3个回答

热心网友 时间:2023-10-10 06:22

主要函数为WM_MOUSEWHEEL的函数OnMouseWheel与OnDraw。

缩放使用了GDI的仿射变换实现。代码如下,并附上效果图。

这两个函数中除了m_Scale是成员变量外,其余都是局部变量,

m_Scale你需要自己加入view类中,并在构造函数中初始化为1.0f.

void CScaleObjectView::OnDraw(CDC* pDC)

{

static CPen penStatic(PS_SOLID, 3, RGB(0,255,0));

static CPen penScaled(PS_SOLID, 3, RGB(0,0,255));

static CRect rcDraw(-50, -50, 50, 50);

XFORM xForm =   //the affine tranform matrix which GDI adapted.

1.0f, 0.0f, 

0.0f, 1.0f,

0.0f, 0.0f

};

RECT rcClient;  

this->GetClientRect(&rcClient);

CScaleObjectDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc)   return;

pDC->SetGraphicsMode(GM_ADVANCED);

pDC->SelectObject(::GetStockObject(NULL_BRUSH));

xForm.eM11 = m_Scale;

xForm.eM22 = m_Scale;

xForm.eDx = rcClient.right / 2.0f;

xForm.eDy = rcClient.bottom / 2.0f;

pDC->SetWorldTransform(&xForm);

pDC->SelectObject(penScaled);

pDC->Rectangle(rcDraw);

xForm.eM11 = 1.0f;

xForm.eM22 = 1.0f;

pDC->SetWorldTransform(&xForm);

pDC->SelectObject(penStatic);

pDC->Rectangle(rcDraw);

}

BOOL CScaleObjectView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)

{

static float upLimit = 10.0f;

static float downLinit = 0.04f;

static float fUp = 1.1f;

static float fDown = 0.9f;

if(zDelta > 0 && m_Scale <= upLimit)

{

m_Scale *= fUp;

}

else if(zDelta < 0 && m_Scale >= downLinit)

{

m_Scale *= fDown;

}

this->Invalidate();

return CView::OnMouseWheel(nFlags, zDelta, pt);

}

热心网友 时间:2023-10-10 06:22

怎么联系?

热心网友 时间:2023-10-10 06:23

楼上所写的只是重绘把,并不是真正意义上的放大。恐怕得用OpenGL
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
用六个成语各造一段话 关于把握机会的名言名句 关于把握住机会的名言名句(把握机会,成就未来) 关于把握机会的名言名句(把握机会的励志句子) 关于机会的名言名句篇一 包括“机遇”的名言名句(一) BPM中国普及之路还有多远? 哪个公司可以做OA系统 目前业内有很多人认为OA现在某些应用或者说功能在向BPM领域延生,请问... ting的三个声调组词 // Error: No object matches name什么意思? 禁止百度转码 加了禁止代码 还是转码 请大神指教3DMax,如何设置才能出现左边的移动坐标 有谁用unity3D做过赛车游戏 Our clavichord is kept in the living room .That&#39;s where we ______it 京东到家推荐码在哪里 如何在ros 使用odometry python 小红书第三方信息共享怎么关闭 如何在小红书上取消不能截图 unity3D JS脚本错误 BCE0044: unexpected char: 0xFF1B 小红书保存成功分享命令如何关闭 在unity3d里无法移动物体 怎样更方便的控制unity scene里面的右上角坐标轴 旋转场景 词语辨析transform, transfer, transfigure 保全财产需要交多少钱 他哪怎么弄的为什么我手机保存不了微信个性签名 三星平板电脑手机型号sm一111外屏坏了换一下要多少钱 4s如何保存微信个性签名 请问下,为什么我微信上的个性签名不会保存起来,保存了一下就没了,一直都这样,我谁知道是什么原因么? 三星平板电脑smt110如何操作与手机连接 京东到家怎么查看端口数据 Repetition does not trans form a lie into a truth是什么意思 京东到家金币在哪 C#中怎样重写form才能使窗体支持透明色 宁波烟草25档相当于什么级别 小米智能点唱机如何接自家音响? 烟草证25档一星期多少烟 烟草升到25档不好升了吗 什么点唱机品牌好些? 上海烟草证25档每个星期大概多少条烟 小米3怎么下载歌并发送到ktv点歌机 辽宁烟照25档能一次进货多少 取消关注了转转的公众号快递到了还会不会收到消息 咸蛋黄珍珠丸子怎么做 请问小米电视3可以下载想KTV点唱机那种软件吗? 25档烟草证一年能赚多少钱 珍珠粉和蛋黄可以做面膜吗?合适什麽性质的皮肤? 下一个奥运会在哪个国家举行? 烟草档级25一月份能点多少烟- 问一问 网贷没工作单位怎么填- 问一问