DS_ABSALIGN样式以避免计算

时间:2015-03-31 11:56:02

标签: windows winapi gdi

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

  

表示对话框的坐标是屏幕   坐标。如果未指定此样式,则坐标为   客户坐标。

我想在屏幕坐标中绘制一个DC,这是我正在进行的,而不是客户坐标,但定义该样式没有任何区别。

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

有没有办法在屏幕坐标中绘制图标?

编辑:最后我别无选择,只能在每个回合中进行计算,所以我关闭了问题

1 个答案:

答案 0 :(得分:1)

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