zapline 发表于 2009-2-10 19:47

win程序设计笔记6

继续画图
矩形:
Rectangle (hdc, 1, 1, 5, 4) ;
椭圆:
Ellipse (hdc, xLeft, yTop, xRight, yBottom) ;
圆角矩形:
RoundRect (        hdc, xLeft, yTop, xRight, yBottom,
                    xCornerEllipse, yCornerEllipse) ;
其它:
Arc        (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd) ;
Chord        (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd) ;
Pie        (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd) ;
画曲线:
PolyBezier (hdc, apt, iCount) ;

PolyBezierTo (hdc, apt, iCount) ;

一些关于画笔的内容:
Windows程式以代号来使用画笔。 Windows表头档案WINDEF.H中包含一个叫做HPEN的型态定义,即画笔的代号,可以定义这个型态的变数(例如hPen):

HPEN hPen ;
呼叫GetStockObject,可以获得现有画笔的代号。例如,假设您想使用名为WHITE_PEN的现有画笔,可以如下取得画笔的代号:

hPen = GetStockObject (WHITE_PEN) ;
现在必须将画笔选进装置内容:

SelectObject (hdc, hPen) ;
目前的画笔是白色。在这个呼叫後,您画的线将使用WHITE_PEN,直到您将另外一个画笔选进装置内容或者释放装置内容代号为止。

您也可以不定义hPen变数,而将GetStockObject和SelectObject呼叫合并成一个叙述:

SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
如果想恢复到使用BLACK_PEN的状态,可以用一个叙述取得这种画笔的代号,并将其选进装置内容:

SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
SelectObject的传回值是此呼叫前装置内容中的画笔代号。如果启动一个新的装置内容并呼叫

hPen = SelectObject (hdc, GetStockobject (WHITE_PEN)) ;
则装置内容中的目前画笔将为WHITE_PEN,变数hPen将会是BLACK_PEN的代号。以後通过呼叫

SelectObject (hdc, hPen) ;
就能够将BLACK_PEN选进装置内容。

画笔的建立、选择和删除
hPen = CreatePen (iPenStyle, iWidth, crColor) ;

改变Windows用来填入空隙的背景色:
SetBkColor (hdc, crColor) ;
将背景模式转换为TRANSPARENT,可以阻止Windows填入空隙:
SetBkMode (hdc, TRANSPARENT) ;

设定新的绘图模式:
SetROP2 (hdc, iDrawMode) ;
iDrawMode = GetROP2 (hdc) ;

绘制填入区域相关
Windbws将HBRUSH定义为画刷的代号,所以可以先定义一个画刷代号变数:

HBRUSH hBrush ;
您可以通过呼叫GetStockObject来取得GRAY_BRUSH的代号:

hBrush = GetStockObject (GRAY_BRUSH) ;
您可以呼叫SelectObject将它选进装置内容:

SelectObject (hdc, hBrush) ;
现在,如果您要画上表中的任一个图形,则其内部将为灰色。

如果您想画一个没有边界框的图形,可以将NULL_PEN选进装置内容:

SelectObject (hdc, GetStockObject (NULL_PEN)) ;
如果您想画出图形的边界框,但不填入内部,则将NULL_BRUSH选进装置内容:

SelectObject (hdc, GetStockobject (NULL_BRUSH) ;

Polygon函数和多边形填入方式
Polygon (hdc, apt, iCount) ;
PolyPolygon (hdc, apt, aiCounts, iPolyCount) ;
SetPolyFillMode (hdc, iMode) ;

用画刷填入内部
建立逻辑画刷:
hBrush = CreateSolidBrush (crColor) ;
建立影线画刷的函式为:
hBrush = CreateHatchBrush (iHatchStyle, crColor) ;
hBrush = CreateBrushIndirect (&logbrush) ;
使用SelectObject将该画刷选进装置内容:
SelectObject (hdc, hBrush) ;
然後,您可以使用DeleteObject函式删除所建立的画刷:
DeleteObject (hBrush) ;
取得画刷的信息,可以呼叫GetObject:
GetObject (hBrush, sizeof (LOGBRUSH), (LPVOID) &logbrush) ;

:Q 很晕啊...慢慢来
页: [1]
查看完整版本: win程序设计笔记6