吸血鬼骑士空之枢书包:SDK编程讲座 之 第四讲: Windows基础结构(2)(转载)

来源:百度文库 编辑:中财网 时间:2024/04/30 00:43:45
(三)坐标系统
为了准备显示缓冲区,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);
弧的起点和终点不必精确地位于弧线上。