【问题标题】:How to rotate circle in Direct2D in Visual C++ using pressed left mouse button?如何使用按下鼠标左键在 Visual C++ 中的 Direct2D 中旋转圆?
【发布时间】:2015-07-04 07:00:53
【问题描述】:

我开始使用 Direct2D,我想知道如何在 Win32 Visual C++ 应用程序中按下鼠标左键在 Direct2D 中旋转圆圈? 我将非常感谢您的帮助。

【问题讨论】:

    标签: visual-c++ vector-graphics direct2d


    【解决方案1】:

    您可以使用 ID2D1RenderTarget::SetTransform 方法和 D2D1::Matrix3x2F 辅助类对渲染目标应用旋转变换。有关完整示例,请参阅 this MSDN topic

    如果您想旋转它以响应鼠标左键单击,您可以在窗口过程中处理 WM_LBUTTONDOWN 消息:

    LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
        case WM_LBUTTONDOWN:
            // Code to re-draw the circle with a different rotation transform
    
        ...
        }
    }
    

    【讨论】:

    • 我不需要单击鼠标来旋转圆圈,但我需要按住 LMB 并按住它用鼠标旋转圆圈。
    • 在最后一种情况下如何将鼠标坐标与圆坐标绑定在一起?
    • OK,那么您可以改为处理 WM_MOUSEMOVE,并检查包含鼠标光标坐标的窗口过程中的 lParam 参数(有关 WM_MOUSEMOVE,请参阅 MSDN 文档)。然后使用 x 和 y 坐标相对于圆心的角度调用 Matrix3x2F::Rotation。我不确定如何计算角度。也许为此问另一个问题。
    • 谢谢。而且这种方法不仅适用于圆的旋转,还适用于圆弧、直线、矩形等的旋转?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2010-10-18
    • 1970-01-01
    • 2010-09-27
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多