DS_ABSALIGN 避免计算的样式

DS_ABSALIGN style to avoid calculations

我有一个带手写笔的平板电脑,在正常操作中很容易绘制并找出手写笔的位置,因为硬件提供了正确的坐标。然后我通过 ChangeDisplaySettingsEx API 将显示器旋转 90 º,在这种情况下,我必须应用平移(第二个显示器)+ 我想避免的旋转。然后我在 MSDN 中读到了这种风格 DS_ABSALIGN:

Indicates that the coordinates of the dialog box are screen coordinates. If this style is not specified, the coordinates are client coordinates.

我想在屏幕坐标中绘制到 DC,这就是我正在输入的内容,而不是客户端坐标,但定义该样式没有任何区别。

//unaffected by the style
DrawIcon(hDevCtx, m_Point.x, m_Point.y, LoadCursor(NULL, IDC_ARROW));

有什么方法可以在屏幕坐标中绘制图标吗?

编辑:最后我别无选择,只能每次都进行计算,所以我关闭了问题

您传递给 DrawIcon() 的坐标取决于您拥有的 DC 类型。例如,假设您使用 GetDC() 获取 DC。如果您将 window 句柄传递给它,则传递给 DrawIcon() 的坐标将相对于 window 的客户区。如果将 0 传递给 GetDC(),则坐标将相对于桌面屏幕。如果您想在桌面屏幕上绘图,请使用 GetDC(0) 或更好的方法(如果有的话)。如果您只想将屏幕坐标转换为客户端坐标,反之亦然,请使用 ScreenToClient() 或 ClientToScreen()