【发布时间】:2016-11-10 09:00:42
【问题描述】:
一开始,对不起我的英语。
我现在正在学习如何在 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)
所以基本上,上面的这两点是在传入之前缩放的。我是否不小心更改了任何配置?有没有什么办法解决这一问题?我确定我没有更改我的代码。
【问题讨论】:
-
你试过打电话给
SetTransform() -
我不关心 Direct2D,但在 GDI 中,有时我碰巧忘记了从设备坐标到逻辑坐标的转换,反之亦然(
CDC::DPToLP和CDC::LPToDPmethods)。我看过一个页面——d.hatena.ne.jp/sugarontop/20121006——不幸的是它不是英文的,可能有一些信息给你。 -
@DavidThomas 我在初始化时调用了这个函数,这似乎不是我的程序的原因。问题解决了,问题是我没有转换我的坐标。谢谢!
-
@sergiol 你是对的,我没有转换我的坐标。谢谢!
标签: c++ visual-studio visual-c++ mfc direct2d