为什么我的鼠标光标坐标突然缩放



一开始,对不起我的英语。

我现在正在学习如何在Visual Studio 2015中构建MFC应用程序。我正在使用 Direct2D 在窗口中绘制线条。

当左按钮关闭时,我的OnLbuttonDown()函数被调用:

void CMyProjectNameView::OnLButtonDown(UINT nFlags, CPoint point)
{
    startPoint = point;   // start point of the line, a gloable variable.
    pRenderTarget->BeginDraw();
    CView::OnLButtonDown(nFlags, point);
}

当左键打开时,我的 OnLButtonUp() 函数被调用:

void CMyProjectNameView::OnLButtonUp(UINT nFlags, CPoint point)
{
    pRenderTarget->DrawLine(startPoint, point, m_pbrush, 1.0f); // draw the line
    pRenderTarget->EndDraw();
    CView::OnLButtonUp(nFlags, point);
}

所以当我拖动鼠标时它会在窗口中画一条线,昨天工作正常。

问题是当我今天运行它时,它突然变得异常。起点坐标和终点坐标比以前大两倍。因此,当我画线时,与应有的位置相比,这条线显示在右下角的位置。

例如,如果我画一条从(100,100)到(500,500)的线,屏幕上会出现一条从(100,100)到(500,500)的线,但是当我在(100,100)

处单击鼠标左键时,将其移动到(500,500)并释放左键,将绘制从(200,200)到(1000,1000)的线。

OnLButtonDown(UINT nFlags, CPoint point)
OnLButtonUp(UINT nFlags, CPoint point)

所以基本上,上面的这两点在传入之前是缩放的。我是否意外更改了任何配置?有什么办法可以解决这个问题吗? 我确定我没有更改我的代码。

DrawLine的坐标以与设备无关的像素为单位。另请参阅 DPI 和与设备无关的像素

您可能已经更改了客户端矩形的大小,需要进行调整。还要尝试调整窗口大小,看看它是否获得正确的坐标。

CRect rc;
GetClientRect(&rc);
D2D1_SIZE_F size = pRenderTarget->GetSize();
const float x = size.width / rc.right;
const float y = size.height / rc.bottom;
D2D1_POINT_2F p1;
D2D1_POINT_2F p2;
p1.x = 100 * x;
p1.y = 100 * y;
p2.x = 500 * x;
p2.y = 500 * y;
pRenderTarget->DrawLine(p1, p2, brush);

相关内容

  • 没有找到相关文章

最新更新