|
TOP
|
|
图形基础(二十五)
和y栏位指出了先前的目前位置。如果您不需要这种资讯(通常如此),可以简单地如上面的例子所示的那样将最後一个参数设定为NULL。
警告:
尽管Windows
98中的座标值看起来是32位元的,实际上却只用到了低16位元,座标值实际上被限制在-32,768到32,767之间。在Windows
NT中,使用完整的32位元值。
如果您需要目前位置,就可以通过以下呼叫获得:
其中,pt是POINT结构的。
下面的程式码从视窗的左上角开始,在显示区域中画一个网格,线与线之间相隔100个图素,其中hwnd是视窗代号,hdc是装置内容代号,而x和y是整数:
GetClientRect (hwnd, &rect) ; for ( x = 0 ; x < rect.right ; x+= 100) { MoveToEx (hdc, x, 0, NULL) ; LineTo (hdc, x, rect.bottom) ; } for (y = 0 ; y < rect.bottom ; y += 100) { MoveToEx (hdc, 0, y, NULL) ; LineTo (hdc, rect.right, y) ; }
虽然用两个函式来画一条直线显得有些麻烦,但是在希望画一组相连的直线时,目前画笔位置属性又会变得很有用。例如,您可能想定义一个包含5个点(10个值)的阵列,来画一个矩形的边界框:
注意,最後一个点与第一个点相同。现在,只需要使用MoveToEx移到第一个点,并对後面的点使用LineTo:
由於LineTo从目前位置画到(但不包括)LineTo函式中给出的点,所以这段程式码没有在任何座标处画两次。虽然在显示器上多输出几次不存在问题,但是在绘图机上或者在其他绘图方式(下面马上会讲到)下,视觉效果就不太好了。
当您要将阵列中的点连接成线时,使用Polyline函式要简单得多。下面这条叙述画出与上面一段程式码相同的矩形:
|
|