理解 视口 概念 视 看得见的设备窗口

在 Windows的作图函数中,涉及逻辑坐标到设备坐标的转换。这里提到的窗口(window)、视口(viewport)是对应的概念。视口是与设备相关的一个矩形区域,坐标单位是与设备相关的。窗口的坐标是逻辑坐标,与设备无关。窗口坐标的原点与视口坐标的原点始终对应于同一点。对于同一个图形,用窗口坐标系统表达的该区域的长和宽与视口的坐标系统表达的长和宽是不同的。二者就定义了这两个坐标系统的比例关系。程序作图时,使用的坐标总是是窗口坐标。而实际的显示或输出设备却各有自己的坐标。

目录


1概述


2代码


3代码解释


4问题


5问题解释

1概述编辑

绘图操作只能在客户区中进行。除客户区以外的部分都叫非客户区

例如,有的打印机设备水平和垂直分辨率不同,其象素实际上是长方形。程序编写画一个圆,若不经任何坐标转换,在打印机上输出的就是个椭圆。下面程序示范了如何将窗口逻辑坐标的x,y向象素宽度均映射为输出设备中的 1/64 英寸。

2代码编辑

[code]

SetMapMode(hDC, MM_ISOTROPIC);

SetWindowExt(hDC, 64, 64, NULL);

SetViewportExt(hDC, GetDeviceCaps(hDC, LOGPIXELSX),

GetDeviceCaps(hDC, LOGPIXELSY), NULL);

[/code]

3代码解释编辑

调用SetWindowExt()函数后,紧接着应调用SetViewportExt()函数,它的任务是规定水平及垂直坐标轴的单位。可以这样认为,SetWindowExt()函数对应着“窗口”,SetViewportExt()函数对应着“视口”。几点:

1.窗口是基于逻辑坐标的.

2.视口是基于设备坐标.

3.设备坐标是以像素为单位的,逻辑坐标是以.cm,m,mm,.....

4.系统最后一定要把逻辑坐标变为设备坐标.

5.设备坐标有3种:

a.GetDC() 客户区坐标.

b.GetWindowDC().窗口坐标.

c.GetDC(NULL),or CreateDC() .屏幕坐标.

4问题编辑

问题如下:

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()/2);

(5):pDC->DPtoLP(cRect);

(6):pDC->SetWindowOrg(-(cRect.Width()/2),-(cRect.Height()/2));

(7):pDC->TextOut(-850,1400,"abc");

...

}

我想问一下:上面每一步执行完后,窗口和视口的原点、范围分别是多少?屏幕分辨率是(800,600)。谢谢!

---------------------------------------------------------------

5问题解释编辑

第一句:定义逻辑单位和具体的设备单位的映射模式

第二句:设置与设备上下文关联的窗口的X和Y坐标的范围。其中4000和3000是逻辑坐标。此时窗口大小为(4000,3000),视口大小未知。

第三句:得到客户区尺寸。此尺寸就是当前视口尺寸。如果(800,600),在最大化时此尺寸为(800,600).

第四句:设置视口的范围,第二个参数为负数,表示视口坐标往下移了cRect高度的一半。

第五句:将设备坐标转换成逻辑坐标。因为GetClientRect得到的设备坐标

第六句:设置设备上下文窗口的起始坐标。

最后一句:在第六句的基础上,在逻辑坐标位置输出文本abc. 记住两个原则:

1.总是由窗口原点映射为视口原点。即无论你窗口的原点和视口的原点怎么变,窗口的原点总是映射到视口的原点。(记住:映射方向是窗口到视口,而不是视口向窗口映射)

2.不管利用函数(如:SetViewportOrgExt和SetWindowOrgEx)对窗口和视口的原点做怎么改变,设备点(0,0)始终是客户区的左上角。

时间: 2025-01-03 22:46:34

理解 视口 概念 视 看得见的设备窗口的相关文章

(转)巴斯夏:看得见的与看不见的

醍醐灌顶,豁然开朗. (转自http://www.douban.com/note/241141939/) 巴斯夏:看得见的与看不见的 一个好经济学家与一个坏经济学家之间的区别就只有一点:坏经济学家仅仅局限于看到可以看得见的后果,而好经济学家却能同时考虑可以看得见的后果和那些只能推测到的后果. 看得见的与看不见的 巴斯夏(Claude Frédéric Bastiat) 在经济领域,一个行动.一种习惯.一项制度或一部法律,可能会产生不止一种效果,而是会带来系列后果.在这些后果中,有些是当时就能看到

看的见的算法 7个经典应用诠释算法精髓

第1章 欢迎来到看得见的算法欢迎来到看得见的算法.这个课程将以独一无二的方式,向你展示算法究竟有什么用,在实际项目中能做什么,并向你一一展示通过学习这个课程,你将能够制作出多么酷炫的程序:)1-1 欢迎来到看得见的算法1-2 学习这个课程将完成什么项目?1-3 关于本课程的编程环境1-4 更多学习本课程的注意事项 第2章 要想看得见,先要搞定GUI编程在这一章,你将从0开始接触Java Swing编程,进入GUI的编程世界.通过这一章的学习,你将了解Java Swing最基本的用法.在这一章的最

顷刻应用—给你看得见的安全感

作为小区的业主,我们都希望在一个安静.祥和.安全的小区里生活,其中安全又是我们最基本的要求.可是现状却总是让我们无法满意,当大家在一起闲聊时,似乎吐槽各自的小区的各种问题是一个永恒的话题.虽然小区中已经运用了多种高科技手段为业主看家护院,物业公司也不遗余力的宣传小区的高科技含量.智慧小区.平安小区各种概念层出不穷,但我们悬着的心却怎么也放不下来,心中无耐的我们,也就只能吐槽一下"我读书少,你别骗我". 为了提高小区的安全性,物业公司也在不断增加硬件投入,智能门禁.保安巡逻.随处可见的摄

[转载] - 所谓踏实,并不是踏踏实实追求你的目标,而是踏踏实实把你够得着看得见的就在身边的东西干好

每年一到要找工作的时候,我就能收到很多人给我发来的邮件,总是问我怎么选择他们的 offer,去腾讯还是去豆瓣,去外企还是去国内的企业,去创业还是去考研,来北京还是回老家,该不该去创新工场?该不该去 thoughtworks?……等等,等等.今年从 7 月份到现在,我收到并回复了 60 多封这样的邮件.我更多帮他们整理思路,帮他们明白自己最想要的是什么.(注:我以后不再回复类似的邮件了). 我深深地发现,对于我国这样从小被父母和老师安排各种事情长大的人,当有一天,父母和老师都跟不上的时候,我们几乎

5个能够改变一生的自学网站,每天半小时效果看的见!

很多朋友想利用闲暇时间学一点东西,但是想要自学,好的平台很重要,如果你苦于没有好平台,小编在这分享5个给大家,每天半小时,效果看得见哦. 今日主题:5个能够改变一生的自学网站,每天半小时效果看的见! 可汗学院 特点: 1.利用网络影片进行免费授课,课程内容丰富: 2.涵盖范围广,包括数学 .历史.物理.化学.天文等,教学影片也很多. MIT open courseware 特点: 1.内容丰富,包含了 2260 门MIT课程的资源: 2.包含的课程有:C++,Python,Matlab等,适用于

快速理解DevOps概念和意义-兼谈SRE

最近几年,由于负责的范围的变化.工作逐渐从某个IT领域或者部门,开始关注到整个IT体系的运转和管理.中间也遇到不少困难,同时也有机会去从更高的层面去学习和实践IT治理.文章主要是总结一下我对DevOps相关的理解和认识. 为什么会有DevOps,解决了什么问题: 现代企业其实都是通过IT系统进行管理和运营的,在变化迅速和竞争激烈的领域,IT系统的新需求数量越来越多,软件发布的频率越来越高,不少互联网公司24小时内会发布几十个到上百个release到生产环境.与此同时,业务对IT服务和系统的稳定性

PostgreSQL Replication之第一章 理解复制概念(2)

1.2不同类型的复制 现在,您已经完全地理解了物理和理论的局限性,可以开始学习不同类型的复制了. 1.2.1 同步和异步复制 我们可以做的第一个区分是同步复制和异步复制的区别. 这是什么意思呢?假设我们有两台服务器,希望从一台服务器(the master)复制数据到第二台服务器(the slave).下图说明了同步和异步复制的概念: 我们可以使用一个简单的事务如下所示: BEGIN: INSERT INTO foo VALUES ('bar'); COMMIT; 在异步复制的情况下,事务被提交到

PostgreSQL Replication之第一章 理解复制概念(1)

PostgreSQL Replication系列翻译自PostgreSQL Replication一书 在本章中,将会介绍不同的复制概念,您会了解哪些类型的复制对哪一种实用场景是最合适的. 在本章的最后,您将能够判断某个概念在各种情况下是否是可行的. 我们在本章将介绍以下主题: • CAP理论 •复制的物理限制 •为什么延迟有影响 •同步和异步复制 •拆分和复制 在我们使用PostgreSQL实际工作之前,我们将引导您完成一些非常基本的与复制相关想法和事实. 1.1 CAP理论和物理限制 您可能

svn老鸟转用git必须理解的概念

不都是SCM代码管理嘛,有很大区别么?很多svn老鸟都是抱着这样的心态去学习git,然后无一幸免地陷入“查阅过很多资料,依然掌握不好”的困境,至少我们团队是这样的. 网上的资料确实已经很多了,却没有把整个知识结构串起来.通读<git权威指南>是可行的,只是大家都急着用,没那耐性.我这里熬一碗鸡汤,整理供大家享用. 一.安装 服务器端不展开,因为主要面向搬砖的码农. 客户端可参见大神 廖雪峰 的Git教程-安装git 需要特别说明的是,在windows中,msysgit才是真正的git客户端,乌