📄 base6.htm
字号:
int y;<br>
}POINT;<br>
Polyline用于绘制折线,例:<br>
Polyline(hdc,&pt,5)<br>
将数组pt中的5个点之间用线段相连。<br>
Arc用于画椭圆的周边:<br>
Arc (hdc,xLeft,yTop,xRight,yBottom,xStart,yStart,XEnd,yEnd
);<br>
画出的椭圆以左上角为(xLeft,yTop),右下角为(xRight,yBottom)的矩形为界,圆弧开始于椭圆和(xStart,yStart)与椭圆中心的连线的交点处,沿着椭圆周边的过时针方向绘制,并终止于椭圆和(xEnd,yEnd)与椭圆中小的连线的交点处。<br>
当调用LineTo、Polyline和Arc时,Windows使用当前在设备上下文中选择的笔来画线,笔决定了线的颜色、密度和型式,而线型可以是实线、点线或短划(虚)线,缺省设备上下文中的笔叫做BLACK_PEN,不管映射方式如何选支笔以一个象素的宽度画黑色的实线,
BLACK_PEN是Windows提供的三支“备用笔”之一,其他两支是WHITE_PEN和NULL_PEN,NULL_PEN是一支什么都不画的空笔,当然用户也可以自己建立定制的笔。<br>
可以通过一个句柄来引用所需的笔: <br>
HPEN hPen;<br>
hPen =GetStockObject(WHITE_PEN);<br>
SelectObjeCt (hdc ,hPen) ;<br>
调用GetStockObject获得一支备用笔(WHITE_PEN)的句柄,调用SelectObject使这支笔成为设备上下文中当前选择的用CreatePen或CreatePenIndirect函数建立一支“逻辑笔”,这逻辑笔只是一支笔的描述。<br>
hPen = CreatePen (nPenStyle ,nWidth ,rgbColor );<br>
其中nPenStyle参数确定笔是绘制实线还是由点或短划组成的线。该参数可取下列标识符之一:
PS_SOLID、PS_DASH、Ps_DOT、PS_DASHDOT、 PS_DASHDOT DOT。nWidth表示笔宽(采用逻辑单位),rgbColor表示笔的颜色,如果函数执行成功,则返回值标识一支逻辑笔,否则返回值为NULL。<br>
另外还有一种方法来建立逻辑笔:<br>
typedef struct tagLOGPEN { kk1}<br>
POINT lopnWidth; <br>
COLORREF lopnColor;<br>
}LOGPEN;<br>
以上是Windows. h中对LOGPEN结构的定义。lopnStyle规定笔的型式,lopnWidth规定笔的宽度,lopnColor规定笔的颜色。然后将logpen定义为LOGPEN类型:<br>
LOGPEN logpen;<br>
再使用<br>
hPen = CreatePenlndirect (&logpen);<br>
就可以建立自定义的笔了。<br>
因为用以上两种方式建立的笔不是设备上下文有关的,所以可以同时建立多支笔,并用多支笔画图。<br>
hpenl =CreatePen(PS_SOLID,1,0L); <br>
hpen2=CreatePen(PS_SOLID,3,RGB(255,0,255)),<br>
selectObject (hdc ,hpenl )<br>
//LineTo调用<br>
SelectObject (hdc , hpen2 )<br>
//Polyline调用<br>
DeleteObject(hpenl);<br>
DeleteObject(hpen2);<br>
在点线笔和短划笔的空隙间的着色取决于设备上下文中定义的背景方式和背景颜色这两种属性。缺省的背景方式是
OPAQUE
,即用背景颜色来填充空隙,缺省的背景颜色是白色。可用:<br>
SetBkColor (hdc,rgbColor );<br>
来改变填充空隙的背景颜色。可用:<br>
SetBkMode(hdc,mode);<br>
来改变背景方式,这里的mode可为OPAQUE或TRANSPARENT。<br>
在设备上下文中可设置口种新的绘制方式。nDrawMode参数定义绘制方式。可用下列函数获得当前绘制方式:<br>
nDrowMode = GetRop2 (hdc);<br>
使用这种绘制方式实际上是在笔的象素和目标显示表面的象素之间执行一种逐位布尔运算。<br>
<br>
下面列出了Windows的六个函数,用于绘制带有边框的填充区域:<br>
Rectangle, 带有方形角的矩形<br>
Ellipse, 椭圆<br>
RoundRect, 带有圆形角的矩形<br>
Chord, 在椭圆周边上的弧,其断 . 点用一条弦相连接<br>
Pie, 在椭圆周边上的饼形楔<br>
Polygon, 多边形<br>
PolyPolygon, 多个多边形<br>
图形要用设备上下文中选择的当前刷子进行填充, 例:<br>
HBRUSH hBrush;<br>
hBrush=GetStockObject(GRAY_BRUSH)<br>
SelectObject (hdc,hBrush)<br>
对于矩形填充对象,使用:<br>
Rectangle(hdc,xLeft,yTop,xRight,yBottom);<br>
点(xLeft,yTop)是矩形的左上角,而(xRight,yBottom)是右下角(这两点均以逻辑坐标给出)。同时还要考虑这两点坐标的合理性,例如,在MM_TEXT映射方式下,xRight必须大于xLeft,yBottom必须大于yTop。<br>
对于椭圆填充对象,使用:<br>
Ellipse(hdc,xLeft,yTop,xRight,yBottom);<br>
画圆角矩形的填充对象,使用:<br>
RoundRect (hdc,xLeft,yTop,xRight,yBottom,xCornerEllipse,yCornerEllipse);<br>
rgbColor为指定刷子的前景颜色,即阴影线的颜色。<br>
③第三种方法:<br>
hBrush = CreatePatternBrush ( hBitmap ) ;<br>
本函数建立一把具有由hBitmap参数指定图案的逻辑刷子,该刷子以后可被任何支持光栅操作的设备所选用。hBitmap标识位图,该位图可用函数CreateBitmap、CreateBitmapIndirect、LoadBitmap或CreateCompatibleBitmap创建。用于填充图案的位图的最小尺寸为8×8。<br>
④第四种方法:<br>
hBrush = CreateBrushIndirect ( &logbrush )<br>
变量logbrush为一个LOGBRUSH(“逻辑刷”)类型的结构。建立了逻辑刷子之后,可以使用:<br>
SelectObject (hdc , hBrush ) ;<br>
将逻辑刷送入设备上下文中。如果使用结束,可以用:<br>
DeletObject (hBrush ) ;<br>
删除一把已建立的刷子,如果在程序中需要获取有关于刷子的信息,则可以调用:<br>
GetObject (hBrush , sizeof (LOGBRUSH ) , (LPSTR ) & (logBrush ) ) ;<br>
其中logbrush为一个LOGBRUSH类型的结构。<br>
前面提到使用位图作为逻辑刷子的图案,这样就需要一个位图的句柄。位图必须至少是8象素高和8象素宽,如果位图太大,Windows就取位图的左上部分作为刷子。获取位图句柄也有四种方法。<br>
①获取位图句柄的第一种方法是:<br>
首先用Windows提供的SDKPAINT生成一个位图文件(扩展名为.BMP),并把文件名包括在资源文件(.rc文件)中的一个BITMAP语句中,如:<br>
lpszBitmap BITMAP " BitmOPName.Bmp"<br>
(假设SDKPAINT中产生的位图名为BitmapName.Bmp),然后将位图装入:<br>
hBitmap = LoadBitmap (hInstance , lpszBitmap ) ;<br>
这里hBitmap即为位图句柄。<br>
②第二种获取位图句柄的方法是:<br>
hBitmap= createBitmop(nWidth,nHeight ,nPlanes ,nBitsPixel,lpBits);<br>
本函数可生成一个具有指定的宽度、高度和位图案(bit pattern)并与设备有关的内存位图。其中的参数nWidth指定位图的宽度(以象素为单位),nHeight指定位图的高度(也以象素为单位),nPlanes指定位图中的彩色位平面的个数,每个彩色位平面有nWidthXnHeight
XnBitsPixel位。<br>
nBitsPixel指定每个显示象素的颜色位数。lpBits指向一个含有初始位图位值的短整型数组,它的值与BITMAP结构中的bmBits值相类似,有关BITMAP结构的内容已在前面<br>
的章节中提到。<br>
③第三种获取位图句柄的方法:<br>
hBitmap= CreateCompatibleBitmap (hdc,nWidth,nHeight);<br>
本函数生成一个与由hdc参数指定的设备相兼容的位图,此位图具有与其他设备相同数值的彩色位平面或相同的每象素位数的格式。它的彩色信息同样由hdc指定的设备所确定。hdc标识设备上下文,nWidth和nHeight分别指定位图的宽和高(以位数表示)。<br>
④第四种获取位图句柄的方法:<br>
hBitmop = CreateBitmapIndirect (&bitmap):<br>
本函数生成一个具有由lpBitmap参数所指定的数据结构给出的宽度、高度和位图图案的位图。这里的bitmap的结构为BITMAP类型。<br>
当拥有一个位图句柄之后,还可以调用:<br>
GetObject(hBitmap,sizeof(BITMAP),(LPSTR)&bitmap);<br>
来获得有关位图的信息,这里返回的bitmap为一个BITMAP类型的结构。<br>
还可以调用:<br>
GetBitmapBits (hBitmap,dwCount,lpBits);<br>
将位图hBitmap的dwCount个字节复制到地址为lpBits的数组中。同样还可以使用<br>
SetBitmopBits (hBitmap,dwCount,lpBits);<br>
将 lpBits 标识的彩色位值放置到 hBitmap 标识的位图中去。<br>
当Windows用刷子填充一个区域时,它在水平和垂直两个方向上重复地使用8×8位图,刷子的外观可能会有细微的变化,这取决于Windows如何将位图的左上角与显示表面对齐,设备上下文中将这种对齐的属性称为“刷子原点”。<br>
大多数情况下,绘图时不必如此精细地调整刷子原点;但在某种情况下,为了产生某种特定的视觉效果,需要这么做。可以通过下面步骤来达到这个效果:<br>
①对刷子调用UnrealizeObject(但不能对备用刷子调用UnrealizeObject);<br>
UnrealizeObject(hObject );<br>
此函数表示GDI在下次给定的刷子被选中时,使它的原点复位。<br>
②用SetBrushOrg设置刷子原点:<br>
BrushOrg=SetBrushOrg(hDc,x ,y);。<br>
此函数用于设置当前选人给定的设备上下文中的刷子的原点。其中,hDc标识设备上下文,x规定新原点的x
坐标(采用设备坐标),该值范围必须在0~7之间,y规定新原点的y坐标(采用设备坐标),该值范围必须在0~7之间,该函数返回一个双字,先前的x坐标放在低位字,先前的y坐标放在高位字。<br>
<br>
除了画点、画线、区域填充这些绘图函数之外,Windows还包括几个附加的绘图函数,用以处理RECT(矩形)结构和“区域”,区域是屏幕的一个由矩形、其他多边形和椭圆组合而成的部分。<br>
FillRect(hdc ,&rect,hBrush);<br>
此函数是用选定的刷子填充给定的矩形,FillRect函数填充整个矩形,还包括左边线和顶边线,但不包括右边线和底边线。hdc标识设备上下文,rect为RECT数据结构类型,此数据结构存放要填充的矩形的逻辑坐标。hBrush用来标识填充此矩形的刷子。<br>
FrameRect (hdc ,&rect);<br>
本函数在 lpRect 参数指定的矩形周围画出一个边框,FrameRect
函数采用给定的刷子绘制边框,边框的高和宽总是用逻辑单位表示。hdc标识窗口的设备上下文,
rect 标明左上角和右下角的逻辑坐标,hBrush标识画矩形边框用的刷子。<br>
InvertRect (hdc,&rect);<br>
该函数反视频显示给定矩形的内容。<br>
前面提到的rect可用以下语句取得:<br>
SetRect(&rect,xLeft,yTop,xRight,yBottom);<br>
区域用以描述显示器上的一个由矩形、其他多边形和椭圆组合而成的部分、可以用区域进行绘制或裁剪。<br>
可用:<br>
hRgn=CreateRgn(xLeft,yTop,xRight,yBottom);<br>
或<br>
hRgn = CreateRectRgnIndirect (&rect );<br>
来建立矩形区域,也可以用:<br>
hRgn= CreatEllipseRgn (xLeft,yTop,xRight,yBOttom);<br>
或:<br>
hRgn =CreateEllipseRgnIndirect (&rect);<br>
来建立椭圆形区域;还可以用:<br>
hRgn=CreatePolygonRgn (Upoint,nCount,nPolyFillMode);<br>
来建立多边形区域,用:<br>
hRgn=CreateRoundRectRgn(xl,yl,x2,y2,x3,y3);<br>
来建立一个带有圆角的矩形区域,(xl,y1)表示区域左上角,(x2,y2)表示区域右下角,x3和y3分别用于指定产生圆角的椭圆的宽度和高度。<br>
各个特定区域的句柄产生之后,<br>
还可以使用:<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -