使用WM_MOUSEWHEEL消息处理时,如何存储Direct2D窗口的缩放效果?

问题描述 投票:0回答:1

我正试图放大我的。ID2D1HwndRenderTarget* renderTarget-窗口在鼠标位置使用Direct2D助手函数。经过一些测试,我发现 GET_WHEEL_DELTA_WPARAM(wParam) 每点击一次鼠标滚轮就返回120(int?short?)。

但现在需要知道如何存储我的缩放级别。因为每次我慢慢地旋转鼠标滚轮,zoomfactor将是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)
}
c++ winapi direct2d
1个回答
0
投票

正如Jonathan Potter所建议的,解决方法非常简单,只需将缩放因子添加到包含我的 renderTarget

© www.soinside.com 2019 - 2024. All rights reserved.