我一直在寻找到它使用两种功能的Visual Studio的C ++ Windows应用程序项目SetWindowExt (...)
和SetViewportExt (...)
我感到困惑的是什么这两个函数做的,为什么他们是必要的。 搜索有关这些功能,我来到了逻辑坐标和设备坐标的概念。
任何人都可以请解释什么是这两个概念的重要性?
我一直在寻找到它使用两种功能的Visual Studio的C ++ Windows应用程序项目SetWindowExt (...)
和SetViewportExt (...)
我感到困惑的是什么这两个函数做的,为什么他们是必要的。 搜索有关这些功能,我来到了逻辑坐标和设备坐标的概念。
任何人都可以请解释什么是这两个概念的重要性?
设备坐标是最简单的理解。 这些都直接关系到你使用的,例如该设备,屏幕或打印机。
举一个例子,让我们来看看在屏幕上显示的窗口。 装置坐标是相对于一个特定的设备定义的,所以在一个窗口的情况下,一切都将在客户端的坐标。 这意味着产地将是窗口的客户区和y轴将从顶部运行至底部的左上角。 所有单元都以像素为单位,因为这是一个屏幕上的元件。
您可以使用这些所有的时间,所以你可能已经明白他们比你想象的要好。 例如,当你处理鼠标事件或一个窗口大小调整,您获取和设置设备坐标。
逻辑坐标取当前映射模式考虑在内。 每个设备上下文(DC)可以具有施加到其上(映射模式GetMapMode
和SetMapMode
)。 各种可用的映射模式由定义MM_Xxx
值。 每个这些不同的映射模式将导致起源和y轴方向上进行不同的解释。 文档他们是如何工作会告诉你到底。
当操纵装置上下文(例如,绘制到它),则当前的映射模式是考虑到,因此你与逻辑坐标工作。
与默认MM_TEXT
映射模式,每个逻辑单元映射到一个设备单元(记住,对于一个窗口,这将是一个象素),所以无需转换。 在该映射模式,逻辑和设备坐标系统的工作方式完全相同。 而且,由于这是默认的,可能你的大部分时间工作之一,它可能是你的问题的根源。
相关阅读: 坐标空间和变换 (MSDN)