【发布时间】:2015-03-31 11:56:02
【问题描述】:
我有一个带触控笔的平板电脑,在正常操作中很容易绘制并找出触控笔的位置,因为硬件会提供正确的坐标。然后我通过 ChangeDisplaySettingsEx API 将显示器旋转 90 度,在这种情况下,我必须应用我想避免的平移(第二个显示器)+ 旋转。然后我在 MSDN 中读到了这种风格的 DS_ABSALIGN:
表示对话框的坐标是屏幕 坐标。如果未指定此样式,则坐标为 客户坐标。
我想在屏幕坐标中绘制一个 DC,这是我正在接收的内容,而不是客户端坐标,但定义该样式没有任何区别。
//unaffected by the style
DrawIcon(hDevCtx, m_Point.x, m_Point.y, LoadCursor(NULL, IDC_ARROW));
有没有办法在屏幕坐标中绘制图标?
编辑:最后我别无选择,只能对每一轮进行计算,所以我关闭了问题
【问题讨论】:
-
我的直觉告诉我
DS_ABSALIGN仅适用于您的对话模板中指定的坐标,不适用于后来创建的 DC;那些仍然在客户空间。我不确定。你为什么关心计算?MapWindowPoints()将为您完成屏幕/客户端转换工作。 -
只是为了节省时间:)
-
写代码的时间?还是在绘图代码中运行时间?如果是后者,那么它真的不会有什么不同(程序在绘图处理程序中开始做更复杂的事情)。
-
DS_ABSALIGN只影响对话框本身的位置;如果您使用所有者窗口创建对话框,它通常会相对于该窗口定位,但使用DS_ABSALIGN您可以指定绝对坐标。它不会影响您在对话框中执行的任何控件或渲染。