Windows API中的逻辑坐标和设备坐标混淆 我一直在研究VisualStudioC++应用程序项目,它使用了两个函数:代码> StWielOWEXT(…)>代码>和 StVIEW(…)>代码>。我对这两个功能的作用以及为什么它们是必要的感到困惑。通过研究这些函数,我得到了逻辑坐标和设备坐标的概念

Windows API中的逻辑坐标和设备坐标混淆 我一直在研究VisualStudioC++应用程序项目,它使用了两个函数:代码> StWielOWEXT(…)>代码>和 StVIEW(…)>代码>。我对这两个功能的作用以及为什么它们是必要的感到困惑。通过研究这些函数,我得到了逻辑坐标和设备坐标的概念,c++,visual-c++,mfc,coordinates,gdi,C++,Visual C++,Mfc,Coordinates,Gdi,谁能解释一下这两个概念的重要性吗?设备坐标是最容易理解的。它们与您正在使用的设备直接相关,例如屏幕或打印机 例如,让我们看看屏幕上显示的窗口。设备坐标是相对于特定设备定义的,因此在窗口的情况下,所有内容都将在客户端坐标中。这意味着原点将位于窗口工作区的左上角,y轴将从上到下运行。所有单位均以像素为单位,因为这是屏幕上的元素 你一直在使用它们,所以你可能已经比你想象的更好地理解它们了。例如,每当处理鼠标事件或调整窗口大小时,都会获取并设置设备坐标 逻辑坐标将当前映射模式考虑在内。每个设备上下文(D

谁能解释一下这两个概念的重要性吗?

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

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

你一直在使用它们,所以你可能已经比你想象的更好地理解它们了。例如,每当处理鼠标事件或调整窗口大小时,都会获取并设置设备坐标

逻辑坐标将当前映射模式考虑在内。每个设备上下文(DC)都可以应用映射模式(
GetMapMode
SetMapMode
)。各种可用映射模式由
MM_Xxx
值定义。每种不同的贴图模式都会导致原点和y轴方向的解释不同。将确切地告诉你它们是如何工作的

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

在默认的
MM_TEXT
映射模式下,每个逻辑单元映射到一个设备单元(记住,对于窗口,这将是一个像素),因此不需要转换。在这种映射模式下,逻辑坐标系和设备坐标系的工作方式完全相同。因为这是默认的,而且可能是你大部分时间都在使用的,所以它可能是你困惑的根源

相关阅读:(MSDN)