Windows的GDI映射格局,逻辑坐标,设备坐标的知道

近年来在学Win32的编制程序,看的是《Windows程序设计第5版》风姿浪漫书,那本书是甘肃人翻译的,某些译法和陆上不均等,书中还应该有部分错误的地点,相当多时候供给中国和俄罗丝文对照阅读,下载请点击

TextOut(hdc,100,100,TEXT(“Love China”),10)

那句GDI函数的法力是在坐标点(100,100卡塔 尔(阿拉伯语:قطر‎的职分输出贰个“乐福China”字符串:

manbetx手机网页版 1

GDI函数作为硬件器材(显示屏,打字与印刷机卡塔 尔(英语:State of Qatar)的接口封装中间层,其扩散的参数坐标值(100,100卡塔 尔(英语:State of Qatar)要在设备上哪个地点显示,是因而GDI映射形式定义的!也便是说:

(100,100卡塔 尔(英语:State of Qatar)—————-通过艺术A映射之后,能够改为—————-》(1,1卡塔 尔(阿拉伯语:قطر‎

(100,100卡塔尔国—————-通过艺术B映射之后,可以成为—————-》(10,1卡塔尔

(100,100卡塔 尔(英语:State of Qatar)—————-通过艺术C映射之后,能够成为—————-》(1,3卡塔 尔(阿拉伯语:قطر‎

(100,100卡塔尔—————-通过艺术C映射之后,能够形成—————-》(5,1卡塔 尔(阿拉伯语:قطر‎

侧面这一列的坐标(100,100卡塔 尔(阿拉伯语:قطر‎就是贰个 style=”color: #9b00d3; font-size: large;”>逻辑坐标(全数GDI函数都以卡塔 尔(英语:State of Qatar)

左手这一列的坐标(1,1卡塔 尔(英语:State of Qatar)正是一个 style=”color: #9b00d3; font-size: large;”>设备坐标

manbetx手机网页版, style=”color: #ff0000;”>所谓映射,就是将八个值通过一个数学公式产生其余二个值

https://download.csdn.net/download/u013238941/10611720

以下是WINDOWS定义的种种映射情势

好了,下边初始正文:

style=”color: #666666;”>“在暗中同意情状下,WINDOWS的坐标原点在(0,0卡塔 尔(英语:State of Qatar)点,可是能够通过调用SetWindowOrgEx来改动逻辑坐标点的原点,通过SetViewportOrgEx来改进设备坐标的原点;借使传入的参数有负号,还是可以转移对应轴的正方向;X轴的正方向指向显示屏的右侧,不相同的照耀方式Y轴正方向不相近”

MM_TEXT                      一个逻辑单位映射成叁个像素     
Y:指向显示器下侧

MM_LOMETWranglerIC            
叁个逻辑单位映射成0.1mm        Y:(以下都针对上侧卡塔 尔(阿拉伯语:قطر‎

MM_HIMETLANDIC             
一个逻辑单位映射成0.01mm              

MM_LOENGHLISH        
一个逻辑单位映射成0.01英寸

MM_HIENGLISH           
一个逻辑单位映射成0.001英寸

MM_TWIPS                  
叁个逻辑单位映射成1/1440英寸

style=”background-color: #000000; color: #ffffff;”>MM_ISOTROPIC            
八个逻辑单位映射成自定义的道具单位

style=”background-color: #000000; color: #ffffff;”>MM_ANISOTROPIC       
两个逻辑单位映射成自定义的装置单位

style=”background-color: #ffffff; color: #000000;”>“铁青背景的照耀情势能改换逻辑坐标(也叫窗口卡塔 尔(阿拉伯语:قطر‎或然道具坐标(也叫视口卡塔 尔(阿拉伯语:قطر‎的范围

 
差别之处:

style=”background-color: #000000; color: #ffffff;”> style=”background-color: #ffffff; color: #000000;”>MM_ISOTROPIC在设置节制时WINDOWS将活动调治使得, style=”color: #ff0000;”>逻辑坐标的X与装备坐标的X之比=逻辑坐标的Y与设施坐标的Y之比

style=”background-color: #000000; color: #ffffff;”> style=”background-color: #ffffff; color: #000000;”>MM_ANISOTROPIC
不会调解 style=”background-color: #ffffff; color: #000000;”>”

在看到GDI(GDI Graphic Device
Interface图形设备接口)
璀璨格局那后生可畏节的时候,书中又是逻辑坐标,又是设备坐标,又是视口,窗口,又是视埠什么的,搞得人头都大了。即便本身现在还并未有完全读懂,可是笔者备感自身早就掀起了精通这一个事物的主线,下边包车型客车东西就视作本身的笔记吧:

manbetx手机网页版 2

1.逻辑坐标和器具坐标

要在相距窗口左侧距100像素,上面距100像素的职位写出三个I love you,
China可以应用如下提供的种种

Setmapmode(dc,MM_TEXT);
SetViewportorgEx(dc,100,100,nil);
逻辑坐标(0,0卡塔尔国对应装备坐标(100,100卡塔尔

textout(dc,0,0,’I love you, China’,17);

manbetx手机网页版 3

 

Setmapmode(dc,MM_TEXT);
SetWindowOrgEx(dc,100,100,nil);

逻辑坐标(100,100卡塔尔国对应器械坐标(0,0卡塔尔
textout(dc,200,200,’I love you, China’,17);

 

Setmapmode(dc,MM_LOMETRIC);
textout(dc,356,-356,’I love you, China’,17);

 

Setmapmode(dc,MM_HIMETRIC);
textout(dc,3560,-3560,’I love you, China’,17);

Setmapmode(dc,MM_LOENGLISH);
textout(dc,140,-140,’I love you, China’,17);

Setmapmode(dc,MM_ISOTROPIC);
SetwindowExtEx(dc,getclientRect.Right,getclientrect.Bottom,nil);
SetViewportExtEx(dc,getclientRect.Right,-getclientrect.Bottom,nil);
textout(dc,100,100,’I love you, China’,17);

 

Setmapmode(dc,MM_ANISOTROPIC);
SetwindowExtEx(dc,getclientRect.Right,getclientrect.Bottom,nil);
SetViewportExtEx(dc,getclientRect.Right,getclientrect.Bottom,nil);
textout(dc,100,100,’I love you, China’,17);

 
 首先,逻辑坐标这几个名词就让非常多个人翼翼小心,确实,不可能“以偏概全”地知道的翻译就不是好翻译 
 ——周豫山。哈哈,开个噱头,大家要明了那七个东西,首先要想到固然您要用Win32要绘制贰个事物,该怎么办吗?比如绘制叁个矩形,借使大家调用的是Rectangle(hdc,30,20,50,80),(这么些函数的用法是Rectangle(hdc,left,top,right,bottom),作者叫雷锋(Lei Feng卡塔 尔(英语:State of Qatar),不用谢我)。可以看来,跟超多GDI函数雷同,那一个函数里面使用了广大数字,坐标。让我们回顾一下小学园文化,绘制七个东西,不止应该搞掌握她的长度,还应当搞精晓他的单位,那么这里的30,20,50,80的单位是什么样吧?很四人会说,是像素!这些答案是对的,不过又不全对。事实上,Windows暗许的璀璨格局(Mapping
Mode,简单的称呼便是MM)是MM_TEXT,在MM_TEXT映射方式(TEXT实际上跟文字未有多大关系,是这种映射格局下的坐标方向,从左到右,从上到下,跟文字阅读情势同样)下,这些单位实在是像素。实际上,逻辑坐标和器械坐标的界别就在于他们的单位不等同!

上面大家拿出多个公式

         
 manbetx手机网页版 4

要讲上边的公式,就要先说一下视口(Viewport 新疆译作视埠)和窗口(Window
福建译作视窗)

第后生可畏,不要被这四个名字吸引了,那七个坐标是跟映射有关的,跟荧屏坐标系,窗口坐标系,客户端坐标系是相对独立的多少个文化。

实际公式拿出去,学数学的同伴是还是不是就懂了差不离了,这一个公式特别首要,精晓了这几个公式,前面的累累事物就能够驾驭,首先,公式中的Window,WinOrg,WinExt,正是带了Win的东西,正是选择的逻辑坐标的值,就跟GDI函数中的相通,逻辑坐标的单位可能是像素(MM_TEXT映射)、毫米(单位是0.1mm,在MM_LOMET翼虎IC映射下)等等等等(看下图).

manbetx手机网页版 5

正是说大家在调用Win32函数绘图的时候,要知道本中国人民银行使的单位(依据映射格局规定的)。因为绘图函数里的数值,使用的正是这一个单位,即使暗许的MM_TEXT映射格局接纳的单位正是像素,可是不菲时候任何单位也很有用,例如你要做多少个显示屏尺子的时候,你要用尺子量一下实体有几分米。尺子上的刻度就能够用任何的映照情势来画。不过荧屏在呈现的时候却无法只领悟逻辑坐标几分米啊,显示屏得驾驭具体的像素地点才行啊!那那个时候,就必要使用上边的公式转换了。讲到这里,公式里的ViewExt/WinExt是什么意思就很醒目了。那就是在方今逻辑坐标系下(例如几分米,打譬喻哈),实际上是下边映射方式表格里的单位)对应的配备坐标应该是不怎么个像素!那样转变之后,拿到实在的Viewport,正是该逻辑点在荧屏上的地方。

之所以说视口和窗口实际上是代表的相近块区域,只可是是因为单位和原点的例外,须要开展览放映射,逻辑单位正是窗口,正是Window,就是像素,厘米,英寸,正是给人用的单位,就是器材非亲非故的单位,设备单位就是视口,正是Viewport,就不能不是像素,正是给设备用的单位,分明的黄金时代分米,在分裂的设备上的像素数恐怕会有分别,所以是器械相关的单位。

 

要小心的是在上述的5映射格局下,ViewExt/WinExt的比重都是已经规定了,不能改革的,如若要转移五个值,只好在MM_ISOTROPIC和MM_ANISOTROPIC映射格局下使用SetViewportExtEx()和SetWindowExtEx()改过。何况那五个函数在上头5种炫丽格局下无效。

末尾,这一个映射方式,视口原点(ViewOrg),窗口原点(WinOrg)等,都以设备内容(DC
Device
Context,又译作装置内容、设备上下文等)的属性,设备内容其实正是你绘制的区域。有二种BeginPaint(在WM_PAINT时绘制无效区域),GetDC是客商端区域(在改进时绘制整个客商区域),GetWindowsDC是漫天窗口区域(能够绘制满含窗口标题栏,菜单栏区域)。那个文化细讲的话又是另后生可畏篇博客了

 

 

为此假如记住起始的公式,获得准确的相应的参数,就足以画出要求的图样。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图