Windows DS_ABSALIGN样式以避免计算
我有一个带触针的平板电脑,在正常操作中,很容易画出触针的位置,因为硬件提供了正确的坐标。然后我通过ChangeDisplaySettingsEx API将监视器旋转90º,在这种情况下,我必须应用平移(第二个监视器)+旋转,这是我想要避免的。然后我在MSDN中了解了这种样式的DS_Absallign: 指示对话框的坐标在屏幕上显示 协调。如果未指定此样式,则坐标为 客户协调 我想在屏幕坐标中画一个DC,这是我被输入的,不是客户端坐标,但是定义这个样式没有任何区别Windows DS_ABSALIGN样式以避免计算,windows,winapi,gdi,Windows,Winapi,Gdi,我有一个带触针的平板电脑,在正常操作中,很容易画出触针的位置,因为硬件提供了正确的坐标。然后我通过ChangeDisplaySettingsEx API将监视器旋转90º,在这种情况下,我必须应用平移(第二个监视器)+旋转,这是我想要避免的。然后我在MSDN中了解了这种样式的DS_Absallign: 指示对话框的坐标在屏幕上显示 协调。如果未指定此样式,则坐标为 客户协调 我想在屏幕坐标中画一个DC,这是我被输入的,不是客户端坐标,但是定义这个样式没有任何区别 //unaffected by
//unaffected by the style
DrawIcon(hDevCtx, m_Point.x, m_Point.y, LoadCursor(NULL, IDC_ARROW));
有没有办法在屏幕坐标中画一个图标
编辑:最后,我别无选择,只能对每个回合进行计算,因此我关闭了问题传递给DrawIcon()的坐标取决于DC的类型。例如,假设您使用GetDC()获取DC。如果向其传递窗口句柄,则传递给DrawIcon()的坐标将相对于该窗口的客户端区域。如果将0传递给GetDC(),则坐标将相对于桌面屏幕。如果您想在桌面屏幕上绘图,请使用GetDC(0)或更好的方法(如果有)。如果您只想将屏幕坐标转换为客户端坐标,或者反之亦然,请使用ScreenToClient()或ClientoScreen()我的直觉告诉我,
DS\u ABSALIGN
仅适用于对话框模板中指定的坐标,而不适用于以后创建的DC;这些仍将在客户端空间中。我不能肯定。你为什么关心计算MapWindowPoints()
将为您完成屏幕/客户端转换工作。只是为了节省时间:)编写代码的时间?还是图形代码中的运行时?如果是后者,那么它真的不会有什么不同(程序首先在绘图处理程序中执行更复杂的操作)。DS_ABSALIGN
只影响对话框本身的位置;如果您创建一个带有所有者窗口的对话框,它通常会相对于该窗口定位,但使用DS_ABSALIGN
可以指定绝对坐标。它不会影响对话框中的任何控件或渲染。我不知道该功能,只要我能测试它,我就会接受它作为答案