首页 文章

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

提问于
浏览
1

一开始,抱歉我的英语 .

我现在正在学习如何在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)

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

1 回答

  • 1

    DrawLine 的坐标位于与设备无关的像素中 . 另见DPI and Device-Independent Pixels

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

    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);
    

相关问题