【发布时间】:2020-06-06 15:58:02
【问题描述】:
我正在尝试使用 Direct2D 辅助函数在鼠标位置放大我的ID2D1HwndRenderTarget* renderTarget-窗口。经过一些测试,我发现GET_WHEEL_DELTA_WPARAM(wParam) 每次鼠标滚轮点击都会返回 120(整数?短?)。
但现在需要知道如何存储我的缩放级别。因为每次我慢慢旋转鼠标滚轮时,缩放因子将为 1.1 (=1 + 0.1 * 120 / 120),图像增长 10% 但不会进一步增长。它应该类似于 zoom = zoom + deltazoom。但是如何在WindowProc 中存储变量呢?
#include <d2d1.h>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_MOUSEWHEEL:
POINT p = { 0 };
GetCursorPos(&p);
ScreenToClient(hwnd, &p);
renderTarget->SetTransform(
D2D1::Matrix3x2F::Scale(
D2D1::SizeF(
1.0f + 0.1f * GET_WHEEL_DELTA_WPARAM(wParam)/120.0f, // /120.0f to normalize and 0.1 the scale factor
1.0f + 0.1f * GET_WHEEL_DELTA_WPARAM(wParam)/120.0f),
D2D1::Point2F(p.x, p.y)
);
);
return 0;
//
// various other cases
//
}
return DefWindowProc(hwnd, uMsg, wParam, lParam)
}
【问题讨论】:
-
你什么都没画。
-
我的更新和渲染循环在我的程序的主体中。我稍微更改了代码(不需要 begindraw 和 endraw),并且我进行了一些测试,发现
GET_WHEEL_DELTA_WPARAM(wParam)每次单击鼠标滚轮都会返回 120。所以我缩小了我的问题:如何存储缩放因子。 -
你的程序必须有一些全局数据。
renderTarget保存在哪里?将缩放系数存储在同一位置。 -
@JonathanPotter 谢谢!就是这样,为包含我的渲染目标的类添加了缩放因子
-
@mca2 你可以发布一个答案来结束这个话题。