Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows DS_ABSALIGN样式以避免计算_Windows_Winapi_Gdi - Fatal编程技术网

Windows DS_ABSALIGN样式以避免计算

Windows DS_ABSALIGN样式以避免计算,windows,winapi,gdi,Windows,Winapi,Gdi,我有一个带触针的平板电脑,在正常操作中,很容易画出触针的位置,因为硬件提供了正确的坐标。然后我通过ChangeDisplaySettingsEx API将监视器旋转90º,在这种情况下,我必须应用平移(第二个监视器)+旋转,这是我想要避免的。然后我在MSDN中了解了这种样式的DS_Absallign: 指示对话框的坐标在屏幕上显示 协调。如果未指定此样式,则坐标为 客户协调 我想在屏幕坐标中画一个DC,这是我被输入的,不是客户端坐标,但是定义这个样式没有任何区别 //unaffected by

我有一个带触针的平板电脑,在正常操作中,很容易画出触针的位置,因为硬件提供了正确的坐标。然后我通过ChangeDisplaySettingsEx API将监视器旋转90º,在这种情况下,我必须应用平移(第二个监视器)+旋转,这是我想要避免的。然后我在MSDN中了解了这种样式的DS_Absallign:

指示对话框的坐标在屏幕上显示 协调。如果未指定此样式,则坐标为 客户协调

我想在屏幕坐标中画一个DC,这是我被输入的,不是客户端坐标,但是定义这个样式没有任何区别

//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
可以指定绝对坐标。它不会影响对话框中的任何控件或渲染。我不知道该功能,只要我能测试它,我就会接受它作为答案