Windows程序设计--画点和线
来源:互联网 发布:七日杀不让刷js 编辑:程序博客网 时间:2024/06/04 23:26
点和线是属于绘图的一种,所以它们的函数属于GDI函数,那么就先需要了解一下GDI函数。
GDI函数的主要分类:
1.取得或释放设备内容的函数 比如: BeginPaint和EndPaint函数 GetDC和RealseDC函数等等 2.取得有关设备内容信息的函数 比如: GetTextMetrics获取字体的信息 3.绘图函数 比如: LineTo 画直线 Polyline和PolylineTo 画一系列相连的直线 PolyPolyline 画多组相连的线。 Arc 画椭圆线。 PolyBezier和PolyBezierTo 画贝塞尔曲线 4.设定和取得设备内容参数的函数 比如: 设置背景模式SetBkMode 设置绘图模式SetROP2 设置映射模式SetMapMode 设置字体颜色SetTextColor 对应的也有获取…… 5.使用GDI对象的函数 比如: 画刷对象HBRUSH hBrush; 画笔对象HPEN hPen;等等GDI函数几乎都要使用到HDC hDc;设备环境句柄。
现在画点,我们需要以下几个函数:
//该函数将指定坐标处的像素设为指定的颜色。
//成功返回那个逻辑点的RGB颜色,如果画的点在剪裁区域外则函数执行失败返回-1COLORREF SetPixel( HDC hdc, // 设备环境句柄 int X, // 逻辑点x int Y, // 逻辑点y COLORREF crColor // 设置该点的颜色);
//画一个点//通常很难看出来
SetPixel(hdc, 100, 100, RGB(0, 255, 0));
//用点画线//在WM_PAINT消息中画,如果你在WM_CREATE消息中画,那么将会不停的弹出失败。//因为WM_CREATE消息中只是初始化窗口,此时窗口还没有被WM_PAINT所以函数会执行失败 for (int i = 100;i < 500;i++) { if (-1 == SetPixel(hdc, i, i, RGB(0, 255, 0))) { MessageBox(nullptr, L"函数执行失败", L"", MB_OK); } }
//GetPixel函数传回指定坐标处的图素颜色//如果xy坐标不在剪裁区域内则函数执行失败返回CLR_INVALID ,成功返回RGB颜色COLORREF GetPixel( HDC hdc, // 设备环境句柄 int nXPos, // 逻辑点x int nYPos // 逻辑点y);
比如:
if (CLR_INVALID == GetPixel(hdc,-1,-1)){ MessageBox(nullptr, L"函数执行失败", L"", MB_OK);}
//获取当前位置的函数BOOL GetCurrentPositionEx( HDC hdc, // 设备环境句柄 LPPOINT lpPoint // 获取当前位置并存入POINT结构);
画点就是那么简单。接下来画线,我们需要一下几个函数。
//画直线
//成功返回非零,失败返回0BOOL LineTo( HDC hdc, // 设备环境句柄 int nXEnd, // 结束点x int nYEnd // 结束点y);
//这个函数是有终点坐标,所以理所当然的要给它个起点坐标
//把绘图位置移动到某个点
BOOL MoveToEx( HDC hdc, // 设备环境句柄 int X, // 起点x int Y, // 起点y LPPOINT lpPoint // 旧的位置(可以获取));
//起点为(0,0),终点为(100,100)的直线MoveToEx(hdc, 0, 0, nullptr);LineTo(hdc, 100, 100);
//画折线
//成功返回非零,失败返回0BOOL Polyline( HDC hdc, // 设备环境句柄 CONST POINT *lppt, // 存放点的数组 int cPoints // 有多少个点);
//一般要定义一个点的数组 POINT pt[3]={0}; [其它代码] //然后设置每个点的值 pt[0].x = 10; pt[0].y = 10; pt[1].x = 200; pt[1].x = 100; pt[2].x = 300; pt[2].y = 150; //把每个点连接起来 Polyline(hdc, pt, 3);
//和PolyLine不同,PolyLineTo使用目前位置作为开始点,并将目前位置设定为最后
//一根线的终点,根据apt的点依次画直线。设置目前位置可调用
MoveToEx函数.BOOL PolylineTo( HDC hdc, // 设备环境句柄 CONST POINT *lppt, // 存放点的数组 DWORD cCount // 有多少个点);
如果不调用MoveToEx函数设置当前位置,则默认从(0,0)点开始画
//如果要连接起点则一共有4组坐标,如果不连就三组
MoveToEx(hdc, 200, 0, nullptr);PolylineTo(hdc, pt, 4);//PolylineTo(hdc, pt, 3);
//用当前选定画笔描绘两个或多个多边形
BOOL PolyPolyline( HDC hdc, // 设备环境句柄 CONST POINT *lppt, // 存放坐标的数组 CONST DWORD *lpdwPolyPoints, // 每一组折线有多少个坐标 DWORD cCount // 有多少组折线);
比如:
POINT pt[6]={0};DWORD lpdwPolyPoints[2]={0}; //第一组坐标组成一条折线 pt[0].x = 100; pt[0].y = 50; pt[1].x = 200; pt[1].y= 100; //第二组坐标组成一条折线 pt[2].x = 300; pt[2].y = 50; pt[3].x = 200; pt[3].y = 80; pt[4].x = 400; pt[4].y = 100; pt[5].x = 300; pt[5].y = 150; //第一组坐标有2个坐标点 lpdwPolyPoints[0] = 2; //第二组坐标有4个坐标点 lpdwPolyPoints[1] = 4; PolyPolyline(hdc, pt, lpdwPolyPoints,2);
//画椭圆弧线
BOOL Arc(
HDC hdc, // 设备环境句柄
int nLeftRect, // 矩形的左上角坐标x
int nTopRect, // 矩形的左上角坐标y
int nRightRect, // 矩形的右下角坐标x
int nBottomRect, // 矩形的右下角坐标y
int nXStartArc, // 弧的起点x
int nYStartArc, // 弧的起点y
int nXEndArc, // 弧的终点x
int nYEndArc // 弧的终点y
);
很简单的一个函数,按着填就行了。
//画贝赛尔样条曲线
BOOL PolyBezier( HDC hdc, // 设备环境句柄 CONST POINT* lppt, // 包括了样条端点和控制点的坐标 DWORD cPoints // 数组中的点的个数);
CONST POINT* lppt:其顺序是起点的坐标、起点的控制点的坐标、终点的控制点的坐标和终点的坐标
pt[0].x = 100; pt[0].y = 100;//起点坐标 pt[1].x = 200; pt[1].y = 100;//起点的控制点的坐标 pt[2].x = 300; pt[2].y = 300;//终点的控制点的坐标 pt[3].x = 200; pt[3].y = 400;//终点的坐标 PolyBezier(hdc, pt, 4);
基本的画线函数就这些了。会用就行不用深究了。
- Windows程序设计--画点和线
- windows程序设计之绘图基础之点和线的绘制
- Windows程序设计--画笔和画刷
- windows程序设计 文字和字体
- windows程序设计:键盘和鼠标
- windows程序设计:键盘和鼠标
- windows程序设计:位图和bitblt
- windows程序设计:文本和字体
- Windows程序设计 窗口和消息
- Windows程序设计-窗口和消息
- Windows程序设计--画几何图形
- 程序设计和调试中的几点总结
- 画点和线
- iOS和windows异同点
- 第26周-window程序设计(基础篇)-第5章(图形基础)-点和线
- 三、Windows图像处理—画点和线(贝塞尔曲线)
- 《Windows程序设计》读书笔记------------->>矩形、区域和剪裁<<
- 《Windows程序设计》读书笔记------------->>字符集和字体<<
- 微信开发之难点解析
- SSH整合,Query.list()方法卡死!
- htc文件
- Android四大组件之ContentProvider
- 代码优化---复用标题栏 、像素数
- Windows程序设计--画点和线
- Maven中的DependencyManagement和Dependencies
- java实现树
- Mesh Editing with Poisson-Based Gradient Field Manipulation
- android Viewpager取消预加载
- Android四大组件之Service
- Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成
- UI01-UIView(示例代码)
- C++ 策略模式