Windows程序设计:直线绘制

本文介绍Windows程序设计中绘制直线的方法,包括MoveToEx与LineTo函数的使用,并通过实例演示如何绘制正方形及三角函数图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windiows程序设计中绘制直线的重要函数:
MoveTo()函数:线段的起点位置
LineTo():线段的终点位置
参数如下:
BOOL MoveToEx(
  _In_  HDC     hdc,   //窗口句柄
  _In_  int     X,     //像素X坐标
  _In_  int     Y,     //像素Y坐标
  _Out_ LPPOINT lpPoint  //传入之前的坐标点
);

绘制直线方法如下:
MoveToEx(hdc, 100, 100, NULL);   //线段起始坐标
LineTo(hdc, 200, 100);   //线段终止坐标
之后函数会保留上一个LineTo的坐标点,以便下一次LineTo的使用

绘制一个正方形
	MoveToEx(hdc, 100, 100, NULL);   
	LineTo(hdc, 200, 100);
	LineTo(hdc, 200, 200);
	LineTo(hdc, 100, 200);
	LineTo(hdc, 100, 100);

表格的绘制:
GetClientRect(hWnd, &rect);

for (int i = 0; i <= rect.right; i += 100)
{
	MoveToEx(hdc, i, 0, NULL);
	LineTo(hdc, i, rect.bottom);
}

for (int j = 0; j <= rect.bottom; j += 100)
{
	MoveToEx(hdc, 0, j, NULL);
	LineTo(hdc, rect.right, j);
}
效果如下:



POINT结构体(用来标记窗体上的一个像素点):
typedef struct tagPOINT
{
    LONG  x;
    LONG  y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;

具体使用案例:画正方形
vPOINT apt[5] = {100,100,200,100,200,200,100,200,100,100};
MoveToEx(hdc, apt[0].x, apt[0].y, NULL);
for (int i = 1; i < 5; ++i)
     LineTo(hdc, apt[i].x, apt[i].y);

PolyLine函数:
根据所给的一些列坐标点画图
BOOL Polyline(
  _In_       HDC   hdc,
  _In_ const POINT *lppt,   //POINT结构数组
  _In_       int   cPoints  //像素点的个数
);

使用案例 画一个正方形:
POINT apt[5] = { 100,100,200,100,200,200,100,200,100,100 };
Polyline(hdc, apt, 5);


Polyline函数和PolyLineto函数的区别:
Polyline函数绘制图形后不会移动画笔位置
PolylineTo函数在绘制图形后会移动画笔位置

绘制三角函数:
首先设置窗体边框大小
static int cxClient;
static int cyClient;

	case WM_SIZE: {
		cxClient = LOWORD(lParam);
		cyClient = HIWORD(lParam);

	}break;


然后进行绘制
//画三角函数
		//绘制坐标轴
		MoveToEx(hdc, 0, cyClient/2, NULL);
		LineTo(hdc, cxClient, cyClient / 2);

		POINT apt2[pointNums];

		for (int i = 0; i < pointNums; ++i) {
			apt2[i].x = i * (cxClient / pointNums);
			apt2[i].y = (int)((cyClient/2) * (1 - sin(i * 2*(3.1415926)/pointNums)));
		}
	
		Polyline(hdc, apt2, pointNums);

原理:设置位于三角函数上的N对坐标,然后利用Polyline函数把坐标连起来











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值