分享
 
 
 

视口

王朝百科·作者佚名  2010-04-02
窄屏简体版  字體: |||超大  

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

在 Windows的作图函数中,涉及逻辑坐标到设备坐标的转换。这里提到的窗口(window)、视口(viewport)是对应的概念。视口是与设备相关的一个矩形区域,坐标单位是与设备相关的。窗口的坐标是逻辑坐标,与设备无关。窗口坐标的原点与视口坐标的原点始终对应于同一点。对于同一个图形,用窗口坐标系统表达的该区域的长和宽与视口的坐标系统表达的长和宽是不同的。二者就定义了这两个坐标系统的比例关系。程序作图时,使用的坐标总是是窗口坐标。而实际的显示或输出设备却各有自己的坐标。例如,有的打印机设备水平和垂直分辨率不同,其象素实际上是长方形。程序编写画一个圆,若不经任何坐标转换,在打印机上输出的就是个椭圆。下面程序示范了如何将窗口逻辑坐标的x,y向象素宽度均映射为输出设备中的 1/64 英寸。

[code]

SetMapMode(hDC, MM_ISOTROPIC);

SetWindowExt(hDC, 64, 64, NULL);

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

(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)始终是客户区的左上角。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有