SDK编程讲座 之 第四讲: Windows基础结构(2)(转载)

本文介绍了Windows系统中如何通过调整坐标系统进行绘图,包括使用SetMapMode函数设置映射模式,SetViewPortOrg函数调整原点位置,以及通过各种绘图函数如LineTo、Rectangle等实现不同图形的绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(三)坐标系统

为了准备显示缓冲区,Windows调整设备的原点,使它位于用户区而不是显示器的左上角,并且还设置了一个剪辑区,使显示缓冲区的输出被”剪辑”到用户区。也就是说,用户区范围之外的输出并不送到显示器上。

显示缓冲区默认的坐标系统很简单,用户区的左上角是原点,即点(0,0)。向右的每个像素表示X轴方向的一个单位,向下的每个像素表示Y轴方向的一个单位。

通过修改映射模式和显示原点,可以改变坐标系统。映射模式定义坐标系统单位。Windows应用程序可通过调用SetMapMode函数来设定映射模式,其中参数定义了所采取的坐标系统单位,即将一个逻辑单位映射为设备单位的比例。设备单位可为任意个像素,英寸或毫米,还定义了设备的X轴和Y轴方向。默认的映射模式为MM_TEXT,即默认的坐标系统。当前设备描述表的映射方式可通过调用GetMapMode函数得到。通过调用SetViewPortOrg函数,可以把坐标系统原点移到任何位置。

1.     SetMapMode函数

语法: int SetMapMode(HDC hdc,int nMapMode);

说明:  参数hDC是设备描述表,参数nMapMode是映射模式。映射共有8种映射模式,取值及含义如下:

                                       

含义

MM_ANISOTROPIC

逻辑单位被映射成任意的物理单位,X轴和Y轴成任意比例

MM_HIENGLISH

一个逻辑单位被映射成0.001英寸,正X向右,正Y向上

MM_HIMETRIC

一个逻辑单位被映射成0.01英寸,正X向上,正Y向上

MM_ISOTROPIC

逻辑单位被映射成任意的物理单位,X轴和Y轴的变换变换比例相同

MM_LOENGLISH

一个逻辑单位被映射成0.01英寸,正X向右,正Y向上

MM_LOMETRIC

一个逻辑单位被映射成0.1毫米,正X向右,正Y向上

MM_TEXT

一个逻辑单位被映射成一个设备像素,正X向右,正Y向下

MM_TWIPS

一个逻辑单位被映射成打印机点的二十分之一,正X向右,正Y向上

  本例用MM_ANISOTROPIC模式。这种模式把逻辑单位映射成任意的物理单位,X轴和Y轴成任意比例。

  

2.     GetMapMode函数

语法: DWORD SetViewPortOrg(HDC hDC)

说明: 该函数取得当前设备描述表的映射模式。

3.     SetViewPortOrg函数

语法: DWORD SetViewPortOrg(HDC hDC,int x,int y)

说明: 该函数为hDC设置视口原点。返回低字节是原点X坐标,高字节为原点Y坐标。

、画图函数

  GDI提供各种各样的输出操作,从画线到写字应有尽有。为了画线、钜形、圆、扇形和写字,可相应地调用一些函数。这些函数使用已选择的笔和刷画边框,并填写图形内部区,以及使用已选择的字体写字。

1.     画点函数SetPixel

画点函数SetPixel的原型为:

COLORREF SetPixel(HDC hDC,int x,int y,COLORREF cclrref);

该函数把X和Y指定的点置为clrref指定的颜色。

2.     画线函数LineTo与移动函数MoveTo

LineTo函数用来画线,并且通常与MoveTo函数配合使用,如画一条从点(10,70)到点(250,100)的线:

   MoveTo(hDC,10,70);

   LineTo(hDC,250,100);

3.     画钜形函数Rectangle

Rectangle函数用来画钜形。它使用已选择的笔画边框,使用已选择的刷子填满钜形内部。下面的例子画一个左上角位于点(10,20),右下角位于点(40,100)的钜形:

   Rectangle(hDC,10,20,40,100);

4.     画圆或椭圆函数Ellipse

Ellipse函数用来画圆或椭圆。它使用已选择的笔画框,使用已选择的刷填满圆或椭圆的内部。下面的例子画一个用点(10,20)和点(40,100)构成钜形框中的椭圆:

   Ellipse(hDC,10,20,40,100);

5.     画圆弧函数Arc

Arc函数用来画一段弧,这段弧由包围它的钜形和弧的开始点和结束点共同定义。下面的例子在点(10,90)和点(360,120)所指定的钜形中画一段弧,它的起点和终点分别是点(15,90)和点(360,90):

  Arc(hDC,10,90,360,120,15,90,360,110);

弧的起点坐标和终点坐标精确地位于弧上。

6.     画扇形函数Pie

Pie函数用来画扇形。扇形由一段弧和两条从弧焦点到弧端点的半径组成。Pie函数使用已选择的笔画框,使已选择的刷填满扇形内部。下面的例子画一个用点(310,30)和点(360,80)构成的钜形围成的扇形。其起点和终点分别为点(360,30)和点(360,80):

   Pie(hDC,310,30,360,80,310,30,360,80);

弧的起点和终点不必精确地位于弧线上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值