逻辑坐标和设备之间的困惑在Windows API坐标(Confused between logica

2019-08-20 03:31发布

我一直在寻找到它使用两种功能的Visual Studio的C ++ Windows应用程序项目SetWindowExt (...)SetViewportExt (...) 我感到困惑的是什么这两个函数做的,为什么他们是必要的。 搜索有关这些功能,我来到了逻辑坐标和设备坐标的概念。

任何人都可以请解释什么是这两个概念的重要性?

Answer 1:

设备坐标是最简单的理解。 这些都直接关系到你使用的,例如该设备,屏幕或打印机。

举一个例子,让我们来看看在屏幕上显示的窗口。 装置坐标是相对于一个特定的设备定义的,所以在一个窗口的情况下,一切都将在客户端的坐标。 这意味着产地将是窗口的客户区和y轴将从顶部运行至底部的左上角。 所有单元都以像素为单位,因为这是一个屏幕上的元件。

您可以使用这些所有的时间,所以你可能已经明白他们比你想象的要好。 例如,当你处理鼠标事件或一个窗口大小调整,您获取和设置设备坐标。

逻辑坐标取当前映射模式考虑在内。 每个设备上下文(DC)可以具有施加到其上(映射模式GetMapModeSetMapMode )。 各种可用的映射模式由定义MM_Xxx值。 每个这些不同的映射模式将导致起源和y轴方向上进行不同的解释。 文档他们是如何工作会告诉你到底。

当操纵装置上下文(例如,绘制到它),则当前的映射模式是考虑到,因此你与逻辑坐标工作。

与默认MM_TEXT映射模式,每个逻辑单元映射到一个设备单元(记住,对于一个窗口,这将是一个象素),所以无需转换。 在该映射模式,逻辑和设备坐标系统的工作方式完全相同。 而且,由于这是默认的,可能你的大部分时间工作之一,它可能是你的问题的根源。

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



文章来源: Confused between logical coordinates and device coordinates in Windows API