我一直在研究使用两个函数SetWindowExt (...)
和SetViewportExt (...)
的Visual Studio C ++ Windows应用程序项目。我对这两个函数的作用以及为什么它们是必要的而感到困惑。搜索这些函数,我得出了逻辑坐标和设备坐标的概念。
任何人都可以解释一下这两个概念的重要性吗?
答案 0 :(得分:11)
设备坐标是最容易理解的。它们与您正在使用的设备直接相关,例如屏幕或打印机。
举个例子,让我们看一下屏幕上显示的窗口。设备坐标是相对于特定设备定义的,因此在窗口的情况下,一切都将在客户端坐标中。这意味着原点将是窗口客户区的左上角,y轴将从上到下运行。所有单位都以像素为单位进行测量,因为这是一个屏幕上的元素。
你总是使用这些,所以你可能已经比你想象的更好地理解它们了。例如,无论何时处理鼠标事件或调整窗口大小,都可以获取并设置设备坐标。
逻辑坐标考虑当前的映射模式。每个设备上下文(DC)都可以应用映射模式(GetMapMode
和SetMapMode
)。各种可用的映射模式由MM_Xxx
值定义。这些不同的映射模式中的每一个将导致原点和y轴方向被不同地解释。 The documentation会告诉您它们的确切运作方式。
当您操纵设备上下文(例如,绘制到它上面)时,会考虑当前的映射模式,因此您可以使用逻辑坐标。
使用默认的MM_TEXT
映射模式,每个逻辑单元映射到一个设备单元(请记住,对于一个窗口,这将是一个像素),因此不需要转换。在此映射模式下,逻辑和设备坐标系统的工作方式完全相同。由于这是默认设置,可能是您大部分时间都在使用的设备,因此可能是您混淆的原因。
相关阅读: Coordinate Spaces and Transformations(MSDN)