使用 WM_MOUSEWHEEL 消息处理时如何存储 Direct2D window 的缩放
How to store zoom of Direct2D window when using WM_MOUSEWHEEL message handling
我正在尝试使用 Direct2D 辅助函数在鼠标位置放大我的 ID2D1HwndRenderTarget* renderTarget
-window。经过一些测试后,我发现每次单击鼠标滚轮时 GET_WHEEL_DELTA_WPARAM(wParam)
returns 120(int?短?)。
但现在需要知道如何存储我的缩放级别。因为每次我慢慢转动鼠标滚轮时,缩放因子都会是 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)
}
正如 Jonathan Potter 所建议的,解决方法非常简单,只需将缩放因子添加到包含我的 renderTarget
的 class
我正在尝试使用 Direct2D 辅助函数在鼠标位置放大我的 ID2D1HwndRenderTarget* renderTarget
-window。经过一些测试后,我发现每次单击鼠标滚轮时 GET_WHEEL_DELTA_WPARAM(wParam)
returns 120(int?短?)。
但现在需要知道如何存储我的缩放级别。因为每次我慢慢转动鼠标滚轮时,缩放因子都会是 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)
}
正如 Jonathan Potter 所建议的,解决方法非常简单,只需将缩放因子添加到包含我的 renderTarget