使用GDI在windows下绘图(二)——GDI绘图方法

来源:互联网 发布:中铁一局集团网络学校 编辑:程序博客网 时间:2024/05/29 16:00

<img src="http://img.blog.csdn.net/20140710030546286?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvS3Vqb0p5b3Rhcm8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);" />

以上是画直线和曲线的一些简单方法,画直线只需要将当前位置设在线的一端(dc.Moveto(nx1, ny1)),然后调用LineTo给出另一点坐标即可,例如在OnPaint函数类画出(0,0)到(100,100)的直线段代码如下

CDC * pDC = GetDC();pDC->MoveTo(0, 0);pDC->LineTo(100, 100);ReleaseDC(pDC);

想接着前一条线再画一条线只需要再次调用LineTo,因为第一次调用LineTo时已设置在线的终点。

而运用Polyline或PolylineTo可以一次画多条线,区别在于PolylineTo使用设备描述表的当前位置,而Polyline不需要(即画完时当前位置不变)

POINT aPoint[5] = {10, 10, 10, 100, 100, 100, 100, 10, 10, 10};pDC->Polyline(aPoint, 5);
pDC->MoveTo(10, 10);POINT aPoint[4] = {10, 100, 100, 100, 100, 10, 10, 10};pDC->PolylineTo(aPoint, 4);

上述两段代码效果是等价的,结果如下


给出一个折线段的示例,实现的功能是用CDC::Polyline在窗口内画一条正弦曲线

新建MFC对话框程序中将确定按钮Caption改成画sin曲线然后添加鼠标点击事件

#include <cmath>#define PI 3.1415926#define SEGMENTS 500……void CMFCApplicationDlg::OnBnClickedOk(){CRect rc;GetClientRect(&rc);int nWidth = rc.Width();int nHeight = rc.Height();CDC * pDC = GetDC();CPoint aPoint[SEGMENTS];for (int i = 0; i < SEGMENTS; i++){aPoint[i].x = nWidth * i / SEGMENTS;aPoint[i].y = (int)( (nHeight / 2) *(1 - sin(2 * PI * i / SEGMENTS)) );}pDC->Polyline(aPoint, SEGMENTS);//CDialogEx::OnOK();}


0 0
原创粉丝点击