Windows程序设计:直线绘制

来源:互联网 发布:网络人身攻击怎么办 编辑:程序博客网 时间:2024/06/06 14:16
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函数把坐标连起来











原创粉丝点击