在Windows API中,逻辑坐标和设备坐标之间的区别让人困惑。

11

我一直在研究一个使用了两个函数SetWindowExt (...)SetViewportExt (...)的Visual Studio C++ Windows应用程序项目。我对这两个函数的作用及其必要性感到困惑。通过搜索了解这些函数,我了解到逻辑坐标和设备坐标的概念。

请问有人能够解释一下这两个概念的重要性吗?

1个回答

15

设备坐标最简单易懂。它们直接与您正在使用的设备相关,例如屏幕或打印机。

以窗口为例,让我们看看在屏幕上显示的窗口。设备坐标是相对于特定设备定义的,所以在窗口的情况下,所有内容都将处于客户端坐标系中。这意味着原点将位于窗口客户区的左上角,y轴将从上到下运行。由于这是一个屏幕元素,因此所有单位都以像素为单位。

你经常使用它们,所以你可能比你想象中更了解它们。例如,每当您处理鼠标事件或窗口调整大小时,您都会获取和设置设备坐标。

逻辑坐标考虑了当前映射模式。每个设备上下文(DC)都可以应用映射模式(GetMapModeSetMapMode)。各种可用的映射模式由MM_Xxx值定义。每个不同的映射模式将导致原点和y轴方向被不同地解释。文档将告诉您它们的工作原理。

当您操作设备上下文(例如,在其上绘制时),将考虑当前映射模式,因此您使用逻辑坐标。

在默认的MM_TEXT映射模式下,每个逻辑单位映射到一个设备单位(请记住,对于窗口,这将是一个像素),因此不需要进行转换。在这种映射模式下,逻辑和设备坐标系统完全相同。由于这是默认值,也可能是您大部分时间使用的映射模式,因此可能会引起混淆。

相关阅读:坐标空间和变换 (MSDN)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接