绘图操作只能在客户区中进行。除客户区以外的部分都叫非客户区
在 Windows的作图函数中,涉及逻辑坐标到设备坐标的转换。这里提到的窗口(window)、视口(viewport)是对应的概念。视口是与设备相关的一个矩形区域,坐标单位是与设备相关的。窗口的坐标是逻辑坐标,与设备无关。窗口坐标的原点与视口坐标的原点始终对应于同一点。对于同一个图形,用窗口坐标系统表达的该区域的长和宽与视口的坐标系统表达的长和宽是不同的。二者就定义了这两个坐标系统的比例关系。程序作图时,使用的坐标总是是窗口坐标。而实际的显示或输出设备却各有自己的坐标。例如,有的打印机设备水平和垂直分辨率不同,其象素实际上是长方形。程序编写画一个圆,若不经任何坐标转换,在打印机上输出的就是个椭圆。下面程序示范了如何将窗口逻辑坐标的x,y向象素宽度均映射为输出设备中的 1/64 英寸。
[code]
SetMapMode(hDC, MM_ISOTROPIC);
SetWindowExtEx(hDC, 64, 64, NULL);
SetViewportExtEx(hDC, GetDeviceCaps(hDC, LOGPIXELSX),
GetDeviceCaps(hDC, LOGPIXELSY), NULL);
[/code]
调用SetWindowExt()函数后,紧接着应调用SetViewportExt()函数,它的任务是规定水平及垂直坐标轴的单位。可以这样认为,SetWindowExt()函数对应着“窗口”,SetViewportExt()函数对应着“视口”。几点:
1.窗口是基于逻辑坐标的.
2.视口是基于设备坐标.
3.设备坐标是以像素为单位的,逻辑坐标是以.cm,m,mm,.....
4.系统最后一定要把逻辑坐标变为设备坐标.
5.设备坐标有3种:
a.GetDC() 客户区坐标.
b.GetWindowDC().窗口坐标.
c.GetDC(NULL),or CreateDC() .屏幕坐标.
问题如下:
void CMyView::OnDraw(CDC *pDC)
{
...
(1):pDC->SetMapMode(MM_ISOTROPIC);
(2):pDC->SetWindowExt(4000,3000);
(3):AfxGetMainWnd()->GetClientRect(cRect);
(4):pDC->SetViewportExt(cRect.Width(),-cRect.Height());
(5):pDC->DPtoLP(cRect);
(6):pDC->SetWindowOrg(-(cRect.Width()/2),-(cRect.Height()/2));
(7):pDC->TextOut(-850,1400,"abc");
...
}
我想问一下:上面每一步执行完后,窗口和视口的原点、范围分别是多少?屏幕分辨率是(800,600)。谢谢!
---------------------------------------------------------------
第一句:定义逻辑单位和具体的设备单位的映射模式
第二句:设置与设备上下文关联的窗口的X和Y坐标的范围。其中4000和3000是逻辑坐标。此时窗口大小为(4000,3000),视口大小未知。
第三句:得到客户区尺寸。此尺寸就是当前视口尺寸。如果(800,600),在最大化时此尺寸为(800,5XX).
第四句:设置视口的范围,第二个参数为负数,表示视口坐标往下移了cRect高度的一半。
第五句:将设备坐标转换成逻辑坐标。因为GetClientRect得到的设备坐标
第六句:设置设备上下文窗口的起始坐标。
最后一句:在第六句的基础上,在逻辑坐标位置输出文本abc. 记住两个原则:
1.总是由窗口原点映射为视口原点。即无论你窗口的原点和视口的原点怎么变,窗口的原点总是映射到视口的原点。(记住:映射方向是窗口到视口,而不是视口向窗口映射)
2.不管利用函数(如:SetViewportOrgExt和SetWindowOrgEx)对窗口和视口的原点做怎么改变,设备点(0,0)始终是客户区的左上角。
|
相关推荐
设备坐标(DP)是 Windows 将 GDI 函数中指定的逻辑坐标映射为设备坐标。在所有的设备坐标系统中,单位以像素点为准,水平值从左到右增大,垂直值从上到下增大。Windows 中包括以下三种设备坐标,以满足各种不同需要...
设备坐标直接关联到特定设备的物理像素,而逻辑坐标是一种与设备无关的坐标系统,通常用于在不同分辨率的设备之间保持图形比例的一致性。GDI提供映射模式(如MM_TEXT)来转换逻辑坐标到设备坐标,确保图形在不同设备...
WINDOWS逻辑设备、屏幕、客户区、坐标系之间的关系 WINDOWS操作系统中,存在多种坐标系,包括逻辑坐标系、设备坐标系、屏幕坐标系、窗口坐标系和客户区坐标系。这五种坐标系之间存在着紧密的关系,了解它们之间的...
在Windows编程中,尤其是在使用Microsoft Visual C++(VC)进行开发时,理解设备坐标和逻辑坐标对于创建自定义的用户界面至关重要。本篇文章将深入探讨“状态条中显示鼠标的设备坐标与逻辑坐标”的概念及其在VC矢量...
世界坐标系原点在视图左上角,本例子通过世界坐标转换,将坐标原点定位在视图中央,Y轴向上,X轴向右,并绘制坐标轴,基于逻辑坐标系下的绘图,可将转换关系函数取消生效,对比世界坐标系下的绘图。 重写...
在计算机图形学中,屏幕坐标和客户区坐标是两个重要的概念,它们在Windows应用程序开发,尤其是使用VC++或MFC框架时,起着至关重要的作用。这篇文章将详细讲解这两个坐标系统的概念、转换方法以及如何在VC++环境中...
### VC中坐标系的建立——逻辑坐标、物理坐标、设备坐标 #### 一、设备坐标与逻辑坐标 在计算机图形学中,坐标系的选择对于绘制图形至关重要。在Visual C++ (VC) 开发环境中,主要涉及到三种类型的坐标系:设备...
这个方法接受一个`CoordinateSpace`枚举,用于指定输入坐标的空间类型(逻辑或设备),以及另一个`CoordinateSpace`枚举,用于指定输出坐标的空间类型。例如,我们可以创建一个`Point`或`PointF`数组,包含逻辑坐标...
在Windows图形设备接口(GDI)中,逻辑坐标和设备坐标是两个重要的概念。逻辑坐标是程序员在编写代码时使用的坐标系统,而设备坐标则是实际显示在屏幕上的坐标系统。理解这两者的区别和相互作用是进行图形绘制的关键...
在这种情况下,可能需要结合使用`GetWindowRect()`和`GetClientRect()`函数获取窗口的屏幕边界和客户区域边界,然后再进行坐标转换。 为了更好地理解这些概念,下面是一段示例代码,展示了如何在VC++中进行屏幕坐标...
逻辑坐标与设备坐标 viewport 视口 窗口 GDI 坐标 映射方式定义了Windows如何将GDI函数中指定的逻辑坐标映射为设备坐标。 Windows有关映射模式的一些术语:逻辑坐标所在的坐标系称为"窗口",将设备坐标所在的坐标...
客户区像素到逻辑坐标`函数可以将用户区的像素坐标转换为逻辑坐标,而`窗口.逻辑坐标到屏幕像素`函数则能将逻辑坐标转换为屏幕像素坐标。 下面是一段示例源码,用于演示如何获取鼠标在用户区和屏幕的坐标: ```...
本文将深入探讨TeeChart屏幕坐标到实际坐标的转换,这对于理解和操作TeeChart图形控件至关重要。 TeeChart是一个跨平台的图表组件,支持多种编程语言,如Delphi, C++, .NET等,其功能强大,可以创建出专业级别的...
在VC++环境中,我们经常需要处理逻辑坐标系(World Coordinate System)和设备坐标系(Device Coordinate System)之间的转换,以便正确地在屏幕上绘制图形。这篇教程将深入探讨如何在VC++中建立坐标系并实现这两种...
设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系, * 谷歌地图采用的是WGS84地理坐标系(中国范围除外); * GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS...
在3D图形编程中,Three.js是一个非常流行的JavaScript库,用于在Web浏览器中创建和展示三维模型和场景。...这通常通过Three.js库提供的函数和自定义的坐标转换逻辑来完成,确保3D场景与网页上的2D元素完美结合。
在`GpsUtils.java`文件中,这些方法的实现应该包括了必要的数学计算和坐标转换逻辑。使用时,只需传入相应的经纬度值,即可得到转换后的坐标。 在实际应用中,这些工具类对于处理跨平台的地图数据交换、地图标注...
### WGS84坐标系与任意坐标系坐标转换——理论与实践 #### 一、引言 随着全球定位系统(GPS)技术的迅速发展及其在地质矿产测量领域的广泛应用,坐标转换成为连接不同地理信息系统(GIS)的关键环节。WGS84坐标系...
描述中提到,“直角坐标系转换球坐标系”,这可能是一个误解,因为通常的坐标转换是从笛卡尔坐标到极坐标,而不是到球坐标。球坐标通常涉及到三维空间,包含径向距离(r)、纬度(θ)和经度(φ)。不过,这里提及...
CGCS2000、WGS84、百度高德等火星坐标、深圳独立坐标等常见坐标格式批量转换软件。 一、本软件为博主本人开发,所有坐标转换精度均经实测验证,可放心使用。 二、本软件支持常见坐标,如CGCS2000、百度坐标、高德...