Windows图形编程中的坐标系与GDI映射方式

基础上,文章详述了怎样建立不同原点、单位和正方向的逻辑坐标系,对坐标系的构建原理进行了深入剖析。关键词:GDI映射方式;视口;窗口;逻辑坐标系中图分类号:TP311文献标识码:A文章编号:1009-3044(2006)05-0168-02CoordinatesinWindowsGraphicsProgrammingandtheGDIMappingModeJIANGChun-yong(ComputingCenterofthePartyUniversityofHuaihuaCityCommitteeofCCP,Huaihua418008,China)Abstract:BeginningontheGDImappingmode,thepaperdiscussestheconcepts,meaningandrelationofviewportbasedonlogiccoordi-natesandwindowbasedondevicecoordinates.Basedonthis,thepaperexpandshowtosetallkindsoflogiccoordinateswithdifferentorigin,unitandorientation,thenanatomizestheprinciplesofthesecoordinates.0引言图形设备接口GDI是Windows的子系统,它负责在视频显示器和打印机上显示图形。从程序员的观点来看,GDI由几百个函数调用和一些相关的数据类型、宏和结构组成。大多数GDI绘图函数需要坐标值或大小。例如:TextOut(hdc,x,y,psText,iLength);参数x和y分别表示文字的开始位置。参数x是在水平轴上的位置,参数y是在垂直轴上的位置,通常用(x,y)来表示这个点。在TextOut中,以及在几乎所有GDI函数中,这些坐标值使用的都是一种“逻辑坐标”。Windows必须将逻辑坐标转换为“设备坐标”。逻辑坐标,晦涩的定义是内存中虚拟的坐标,我们可以理解为图形编程中使用的坐标值,如TextOut函数中的参数x和y,逻辑坐标系的原点、正方向和单位由程序员选定后,它们的含义确定。设备坐标,直接作用于具体的设备,如:显示器和打印机等,设备坐标系始终以像素为单位,水平轴上的值从左到右递增,垂直轴上的值从上到下递增,对于最常用的“客户区坐标系”,原点(0,0)是客户区的左上角。逻辑坐标,必须由windows转化为设备坐标后,才能为具体的设备显示所使用。这种转换由映射方式、窗口和视口的原点以及窗口和视口的范围所控制。1GDI映射方式GDI映射方式定义了Windows如何将GDI函数中指定的逻辑坐标映射为设备坐标,也即定义设定什么样的逻辑坐标系。2视口和窗口映射方式指定了逻辑坐标系的逻辑单位和坐标轴正方向,坐标原点没有涉及。而且,在“自作主张的”两种映射方式下,逻辑单位、坐标轴正方向和坐标原点都有待确定。“视口”是基于设备坐标的,通常,视口与客户区相同。点(0,0)是客户区域的左上角。x的值向右增加,y的值向下增加。“窗口”是基于逻辑坐标的,逻辑坐标可以是像素、毫米、英寸等,我们在GDI绘图函数中指定逻辑窗口坐标。映射方式实际上是用于定义从“窗口”(逻辑坐标)到“视口”(xWindow,yWindow)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备坐标。视口原点(xViewOrg,yViewOrg)和窗口原点(xWinOrg,yWinOrg)默认情况下均为(0,0),可以改变;(xWinExt,yWinExt)是逻辑坐标的窗口范围;(xViewExt,yViewExt)是设备坐标的视口范围,只有在MM_ISOTROPIC和MM_ANISOTROPIC映射方式下范围可以改变。3深入坐标系与GDI映射方式3.1窗口原点和视口原点Windows提供了函数SetViewportOrgEx和SetWindowOrgEx,用来改变视口和窗口的原点,这些函数都具有改变轴的效果,使(0,0)不再是左上角。如果将视口原点改变为(xViewOrg,yViewOrg),则逻辑点(0.0)就会映射为设备点(xViewOrg-xWinOrg,yViewOrg-yWinOrg)。如果将窗口原点改变为(xWinOrg,yWinOrg),则逻辑点(xWinOrg-xViewOrg,yWinOrg-yViewOrg)将会映射为设备点(0,0)。例如,假设客户区为cxClient个像素宽和cyClient个像素高。在MM_TEXT映射方式下,客户区的逻辑坐标系如图1(1),如果想将逻辑点(0,0)定义为客户区中心,代码如下:收稿日期:2005-12-16作者简介:蒋春勇(1972-168电脑知识与技术),男,湖南省怀化人,计算机科学专业,研究方向:计算机网络与多媒体。点(xWinOrg,yWinOrg)为(0,0),逻辑点(0,0)将映射为设备点(cx-Client/2,cyClient/2),客户区的逻辑坐标系如图1(2)。窗口范围和视口范围的比例允许任意改变,如(2,2)/(1,-1),并将逻辑点(0,0)映射到客户区中心,如图3(2)所示。也可以选择(2*cxClient,cyClient)/(cxClient,-cyClient),使xWinExt/xViewExt和yWinExt/yViewExt的绝对值不...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?