为什么我的鼠标光标坐标突然缩放?
Why is my mouse cursor coordinates suddenly scaled?
一开始,对不起我的英文。
我现在正在学习如何在 visual studio 2015 年构建 MFC 应用程序。我正在使用 Direct2D 在 window 中绘制线条。
当左键按下时,调用我的 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);
}
所以当我拖动鼠标时它会在 window 中画一条线,昨天它运行良好。
问题是我今天运行的时候,突然不正常了。起点坐标和终点坐标比之前大两倍。所以当我画线时,线显示在右下角的位置,而不是它应该在的位置。
例如,如果我画一条从 (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 and Device-Independent Pixels
您可能更改了客户端矩形的大小,需要对其进行调整。也尝试调整 window 的大小,看看它是否得到正确的坐标。
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);
一开始,对不起我的英文。
我现在正在学习如何在 visual studio 2015 年构建 MFC 应用程序。我正在使用 Direct2D 在 window 中绘制线条。
当左键按下时,调用我的 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);
}
所以当我拖动鼠标时它会在 window 中画一条线,昨天它运行良好。
问题是我今天运行的时候,突然不正常了。起点坐标和终点坐标比之前大两倍。所以当我画线时,线显示在右下角的位置,而不是它应该在的位置。
例如,如果我画一条从 (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 and Device-Independent Pixels
您可能更改了客户端矩形的大小,需要对其进行调整。也尝试调整 window 的大小,看看它是否得到正确的坐标。
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);