中年人学C语言Windows程序设计,10 窗口绘画:折线
Polyline
函数功能:
Polyline 函数将指定数组的连接点绘制成一系列线段(折线)。
API 函数原型:
注释:In 说明该参数是输入的。
BOOL Polyline(
_In_ HDC hdc,
_In_ const POINT *lppt,
_In_ int cPoints
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
lppt | 一个指向 POINT 结构的数组的指针(折线的顶点) |
cPoints | 1. lppt 参数指向的数组中顶点(POINT 结构)的个数 |
cPoints | 2. 该值必须大于或等于 2 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
该折线是使用当前画笔,通过将指定数组中的顶点依次连接绘制出来的。
-
不像 LineTo 或 PolylineTo 函数,Polyline 函数既不会用到当前位置,也不会去修改它。
PolylineTo
函数功能:
PolylineTo 函数将指定数组的连接点绘制成一系列线段(折线)。
API 函数原型:
注释:In 说明该参数是输入的。
BOOL PolylineTo(
_In_ HDC hdc,
_In_ const POINT *lppt,
_In_ DWORD cCount
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
lppt | 一个指向 POINT 结构的数组的指针(折线的顶点) |
cCount | 1. lppt 参数指向的数组中顶点(POINT 结构)的个数 |
cCount | 2. 该值必须大于或等于 2 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
不像 Polyline 函数,PolylineTo 函数会使用并修改当前位置。
-
绘画时,会使用使用当前画笔,先从当前位置画一条线连接到 lppt 指定的第一个顶点的位置,然后画到下一个顶点,以此类推。
-
绘画完成之后,会将当前位置移动到最后一个顶点的位置。
-
如果该函数绘制了一个封闭的图形,那么该图形不会被填充。
PolyPolyline
函数功能:
PolyPolyline 函数用于同时绘制多条折线。
API 函数原型:
注释:In 说明该参数是输入的。
BOOL PolyPolyline(
_In_ HDC hdc,
_In_ const POINT *lppt,
_In_ const DWORD *lpdwPolyPoints,
_In_ DWORD cCount
);
参数解析:
参数 含义
hdc 指定设备环境句柄
lppt 一个指向 POINT 结构的数组的指针(一系列折线上的顶点)
lpdwPolyPoints 一个指向数组的指针,数组中每个元素用于指定 lppt 参数中相应折线的顶点的数量
cCount lpdwPolyPoints 参数指向的数组的元素数量(折线的数量)
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
该函数绘制的一系类折线都是使用当前画笔完成。
-
该函数绘制的图形并没有填充。
-
该函数既不会用到当前位置,也不会去修改它。
代码实例1,画个多点的折线图
输入6个点的坐标,然后画出折线图
case WM_PAINT://窗口绘画:点
{
POINT apt[] = { 10,10,20,30,50,60,100,90,200,100,50,230 };//输入6个点的坐标
//int x, xLast;
HDC hdc = BeginPaint(hWnd, &ps);//函数为指定窗口进行绘画作准备,并用将和绘画有关的信息填充到一个 PAINTSTRUCT 结构中。
Polyline(hdc, apt, 6);
EndPaint(hWnd, &ps);
return 0;
}
代码实例2,正弦和余弦曲线图
这个x轴分100段,然后分别赋值,画出曲线
分的段数越多越平滑,但是数组量会增加
case WM_PAINT://窗口绘画
{
POINT apt[NUM];//坐标数组
hdc = BeginPaint(hWnd, &ps);//函数为指定窗口进行绘画作准备,并用将和绘画有关的信息填充到一个 PAINTSTRUCT 结构中。
GetClientRect(hWnd, &rect);
//画x轴
MoveToEx(hdc, 0, rect.bottom / 2, NULL);
LineTo(hdc, rect.right, rect.bottom / 2);
//画正弦曲线
int i;
for (i = 0; i < NUM; i++)//整个画面分100个点,对100个点进行赋值
{
apt[i].x = i * rect.right / NUM;//x坐标
apt[i].y = (int)((1-sin(TWOPI / NUM * i))* (rect.bottom / 2));//y坐标
}
Polyline(hdc, apt, NUM);
//画余弦曲线
for (i = 0; i < NUM; i++)//整个画面分100个点,对100个点进行赋值
{
apt[i].x = i * rect.right / NUM;//x坐标
apt[i].y = (int)((1 - cos(TWOPI / NUM * i)) * (rect.bottom / 2));//y坐标
}
Polyline(hdc, apt, NUM);
EndPaint(hWnd, &ps);
return 0;
}