Windiows程序设计中绘制直线的重要函数:
MoveTo()函数:线段的起点位置
绘制直线方法如下:

具体使用案例:画正方形
PolyLine函数:
使用案例 画一个正方形:

原理:设置位于三角函数上的N对坐标,然后利用Polyline函数把坐标连起来
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函数把坐标连起来