中年人学C语言Windows程序设计,10 窗口绘图:折线和正弦余弦曲线

中年人学C语言Windows程序设计,10 窗口绘画:折线

Polyline

函数功能

Polyline 函数将指定数组的连接点绘制成一系列线段(折线)。

API 函数原型:

注释:In 说明该参数是输入的。

BOOL Polyline(
  _In_  HDC hdc,
  _In_  const POINT *lppt,
  _In_  int cPoints
);

参数解析:

参数含义
hdc指定设备环境句柄
lppt一个指向 POINT 结构的数组的指针(折线的顶点)
cPoints1. lppt 参数指向的数组中顶点(POINT 结构)的个数
cPoints2. 该值必须大于或等于 2

返回值:

  1. 如果函数调用成功,返回值是非 0;

  2. 如果函数调用失败,返回值是 0。

备注:

  1. 该折线是使用当前画笔,通过将指定数组中的顶点依次连接绘制出来的。

  2. 不像 LineTo 或 PolylineTo 函数,Polyline 函数既不会用到当前位置,也不会去修改它。

PolylineTo

函数功能:

PolylineTo 函数将指定数组的连接点绘制成一系列线段(折线)。

API 函数原型:

注释:In 说明该参数是输入的。

BOOL PolylineTo(
  _In_  HDC hdc,
  _In_  const POINT *lppt,
  _In_  DWORD cCount
);

参数解析:

参数含义
hdc指定设备环境句柄
lppt一个指向 POINT 结构的数组的指针(折线的顶点)
cCount1. lppt 参数指向的数组中顶点(POINT 结构)的个数
cCount2. 该值必须大于或等于 2

返回值:

  1. 如果函数调用成功,返回值是非 0;

  2. 如果函数调用失败,返回值是 0。

备注:

  1. 不像 Polyline 函数,PolylineTo 函数会使用并修改当前位置。

  2. 绘画时,会使用使用当前画笔,先从当前位置画一条线连接到 lppt 指定的第一个顶点的位置,然后画到下一个顶点,以此类推。

  3. 绘画完成之后,会将当前位置移动到最后一个顶点的位置。

  4. 如果该函数绘制了一个封闭的图形,那么该图形不会被填充。

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 参数指向的数组的元素数量(折线的数量)

返回值:

  1. 如果函数调用成功,返回值是非 0;

  2. 如果函数调用失败,返回值是 0。

备注:

  1. 该函数绘制的一系类折线都是使用当前画笔完成。

  2. 该函数绘制的图形并没有填充。

  3. 该函数既不会用到当前位置,也不会去修改它。

代码实例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;
        }

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值