AINT: hdc = BeginPaint (hwnd, &ps) ; MoveToEx (hdc, 0, cyClient / 2, NULL) ; LineTo (hdc, cxClient, cyClient / 2) ; for (i = 0 ; i < NUM ; i++) { apt[i].x = i * cxClient / NUM ; apt[i].y = (int) (cyClient / 2 * (1 - sin (TWOPI * i / NUM))) ; } Polyline (hdc, apt, NUM) ; return 0 ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
这个程式有一个含有1000个POINT结构的阵列。随著for回圈从0增加到999,结构的x成员设定为从0递增到数值cxClient。结构的y成员设定为一个周期的正弦曲线值,并被放大以填满显示区域。整个曲线的绘制仅仅使用了一个Polyline呼叫。因为Polyline函式是在装置驱动程式层次上实作的,因此它要比呼叫1000次LineTo快得多,结果如图5-5所示。

边界框函式
下面我想讨论的是Arc函式,它绘制椭圆曲线。然而,如果不先讨论一下Ellipse函式,那么Arc函式将难以理解;而如果不先讨论Rectangle函式,那么Ellipse函式又将难以理解;而如果讨论Ellipse和Rectangle函式,那么我又会讨论RoundRect、Chord和Pie函式。
问题在於,Rectangle、Ellipse、RoundRect、Chord和Pie函式严格来说不是画线函式。没错,这些函式是在画线,但它们同时又填入画刷填入一个封闭区域。这个画刷内定为白色,因此当您第一次使用这些函式时,您可能不会注意到它们不只是画线。严格地说,这些函式属於後面「填入区域」的小节,不过,我还是在这里讨论它们。
上面提到的函式有一个共同特性,即它们都是依据一个矩形边界框来绘图 |