【ca88手机版会员登录】GDI映射模式,笨嘴拙舌WINDOWS

近来在学Win32的编制程序,看的是《Windows程序设计第陆版》1书,那本书是江苏人翻译的,有个别译法和陆地不1样,书中还有1些不当的地点,很多时候供给中国和英国文对照阅读,下载请点击

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

这句GDI函数的效劳是在坐标点(100,十0)的位置输出两个“LoveChina”字符串:

ca88手机版会员登录 1

GDI函数作为硬件设备(显示器,打字与印刷机)的接口封装中间层,其扩散的参数坐标值(十0,100)要在配备上哪个地方显得,是经过GDI映射格局定义的!也正是说:

(100,十0)
—————-通过艺术A映射之后,能够改为—————-》(1,1)

(十0,拾0)
—————-通过艺术B映射之后,能够成为—————-》(十,1)

(100,拾0)
—————-通过艺术C映射之后,能够成为—————-》(1,三)

(拾0,十0)
—————-通过艺术C映射之后,能够变成—————-》(5,壹)

左边那1列的坐标(100,100)正是三个 style=”color: #玖b00d3; font-size: large;”>逻辑坐标(全体GDI函数都以)

入手那壹列的坐标(1,一)正是二个 style=”color: #玖b00d三; font-size: large;”>设备坐标

style=”color: #ff0000;”>所谓映射,正是将一个值通过1个数学公式变成别的三个值

ca88手机版会员登录 2

ca88手机版会员登录 3

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

GDI 映射情势

GDI 映射方式

好了,下边早先正文:

style=”color: #666666;”>“在暗中同意意况下,WINDOWS的坐标原点在(0,0)点,但是能够透过调用SetWindowOrgEx来改变逻辑坐标点的原点,通过SetViewportOrgEx来改变设备坐标的原点;假设传入的参数有负号,仍能够转移对应轴的正方向;X轴的4方向指向显示器的出手,差异的炫耀格局Y轴正方向区别”

MM_TEXT                      3个逻辑单位映射成三个像素     
Y:指向荧屏下侧

MM_【ca88手机版会员登录】GDI映射模式,笨嘴拙舌WINDOWS。LOMET宝马7系IC            
2个逻辑单位映射成0.一mm        Y:(以下都指向上侧)

MM_HIMET福睿斯IC             
3个逻辑单位映射成0.01mm              

MM_LOENGHLISH        
二个逻辑单位映射成0.0壹英寸

MM_HIENGLISH           
1个逻辑单位映射成0.00壹英寸

MM_TWIPS                  
3个逻辑单位映射成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;”>”

MM_TEXT  一逻辑单位 = 一像素

MM_TEXT  1逻辑单位 = 一像素

在看到GDI(GDI Graphic Device
Interface图形设备接口)
辉映方式那一节的时候,书中又是逻辑坐标,又是设备坐标,又是视口,窗口,又是视埠什么的,搞得人头都大了。即使小编以往还并没有完全读懂,不过自身觉得自我早已掀起了接头那一个事物的主线,下边包车型大巴东西就视作本身的笔记吧:

ca88手机版会员登录 4

MM_LOMETBMWX五IC  一逻辑单位 = 0.壹mm

MM_LOMETHighlanderIC  一逻辑单位 = 0.壹mm

壹.逻辑坐标和设备坐标

要在相距窗口左侧距100像素,下面距100像素的岗位写出3个I love you,
China能够选用如下提供的各类

Setmapmode(dc,MM_TEXT);
SetViewportorgEx(dc,100,100,nil);
逻辑坐标(0,0)对应装备坐标(拾0,100)

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

ca88手机版会员登录 5

 

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

逻辑坐标(十0,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);

MM_HIMETRAV4IC  壹逻辑单位 = 0.01mm

MM_HIMET大切诺基IC  1逻辑单位 = 0.0一mm

 
 首先,逻辑坐标这些名词就让很五人望而生畏,确实,不可能“一面之识”地领略的翻译就不是好翻译 
 ——周豫才。哈哈,开个噱头,大家要了解那三个东西,首先要想开假若您要用Win32要绘制叁个东西,该如何做吧?比如绘制一个矩形,倘若大家调用的是Rectangle(hdc,30,20,50,80),(那几个函数的用法是Rectangle(hdc,left,top,right,bottom),小编叫雷锋(Lei Feng),不用谢笔者)。能够看看,跟很多GDI函数一样,那些函数里面使用了重重数字,坐标。让我们回想一下小学校文化,绘制2个事物,不仅应当搞明白他的尺寸,还相应搞理解她的单位,那么那里的30,20,50,80的单位是怎么着吗?很多人会说,是像素!这一个答案是对的,可是又不全对。事实上,Windows暗中同意的映射格局(Mapping
Mode,简称正是MM)是MM_TEXT,在MM_TEXT映射格局(TEXT实际上跟文字未有多大关系,是那种映射格局下的坐标方向,从左到右,从上到下,跟文字阅读情势相同)下,那一个单位确实是像素。实际上,逻辑坐标和装置坐标的分别就在于他们的单位不均等!

MM_LOENGLISH  一逻辑单位 = 0.01 in =
0.25四mm

MM_LOENGLISH  1逻辑单位 = 0.01 in =
0.25四mm