详解MFC画笔的使用

了解画笔的使用之前我们先要掌握如何使用MFC画一条线,了解MFC画线之前我们还要知道Win32 API如何画线,了解Win32 API画线之前我们先要知道DC

DC,设备描述表,我们在不同的系统绘图就要和不同的设备驱动程序打交道,那将是相当的困难和繁琐,DC就代替程序员完成了这个工作。

想要在窗口上绘图或显示文字就要使用DC,大体步骤如下:

(1)声明DC句柄:HDC hdc;

(2)获取窗口句柄:hdc=GetDC(hwnd);

(3)画图、写文字等;

(4)释放句柄:ReleaseDC(hwnd,hDC);

那么,如果想要画一条,则:

HDC hdc;
hdc = ::GetDC(m_hWnd);
MoveToEx(hdc, m_ptOrigin.x, m_ptOrigin.y, NULL);
LineTo(hdc, point.x, point.y);
::ReleaseDC(m_hWnd, hdc);*/

其中,m_hwnd是窗口句柄,m_ptOrigin是起点坐标,point是终点坐标

注意,如果在某个类中使用这段代码,GetDC和ReleaseDC前面要有冒号,表示是Win32平台的函数。

而MFC中提供了CDC类用于绘图,它有很多派生类,如CClientDC(客户区域绘图)、CWindowDC(客户区域和非客户区域绘图),

用CClientDC完成画线操作的代码如下:

CClientDC dc(this);
CClientDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);

用上述代码你会发现画出来的是很细的一条黑线,那么如何更改它的样式呢,下面终于轮到我们的画笔出场了。

编辑画笔就可以改变画线的样式,MFC的CPen类。

我们先要创建一个画笔:CPen pen();构造函数cpen()是重载函数,其中一个有三个参数:画笔样式、宽度、颜色,其中颜色是由一个宏RGB决定,EGB有三个参数,即红绿蓝,每个参数值可设为0-255,全0即黑色,全255即白色,具体可以查看MSDN文档。

我们就创建一个红色的粗画笔:

CPen pen(PS_SOLID, 10, RGB(0, 0, 255));

现在创建的画笔不会生效,需要将画笔应用到DC中,MFC提供SelectObject函数完成此功能,要注意的是,SelectObject函数的参数是画笔对象指针,返回值是被替换的画笔指针,我们需要创建一个CPen对象保存这个旧的指针,保证用完这个画笔后,画笔的样式恢复到初值,代码:

CClient dc(this);
CPen *oldPen=dc.SelectObject(&pen);

然后画线:

dc.MoveTo(m_ptOrigin);
dc.LineTo(point);

最后要恢复画笔初始样式:

dc.SelectObject(&pOldPen);

这样,我们可以看到画出的是一条红色的粗线。

时间: 2024-08-28 12:02:04

详解MFC画笔的使用的相关文章

图文详解MFC程序设置菜单快捷键

原来觉得添加个快捷键就只要几分钟,上网搜索文章都写得很模糊, 只有这边文章不错. http://www.cplusplus.me/1263.html http://blog.sina.com.cn/s/blog_4a632b4d0101m9li.html MFC菜单添加快捷键 对于我这种编程大菜来讲,不写得极度明白加上图解的话,始终是难以理解并且会马上就忘的 . 文章来源:百度空间.伊瑞玛的缺陷 ①.资源视图点右键->添加资源->Accelerator MFC菜单添加快捷键1 ②.Accele

【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形旋转.图像反转倒置镜像和图像缩放的知识.同时文章比较详细基础,没有采用GDI+获取矩阵,而是通过读取BMP图片信息头和矩阵像素实现变换,希望该篇文章对你有所帮助,尤其是初学者和学习图像处理的学生. [数字图像处理]一.MFC详解显示BMP格式图片 [数字图像处理]二.MFC单文档分割窗口显示图片 [数字图像处

【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图像增强处理,包括图像普通平滑.高斯平滑.不同算子的图像锐化知识.希望该篇文章对你有所帮助,尤其是初学者和学习图像处理的学生. [数字图像处理]一.MFC详解显示BMP格式图片 [数字图像处理]二.MFC单文档分割窗口显示图片 [数字图像处理]三.MFC实现图像灰度.采样和量化功能详解 [数字图像处理]四.MFC对话框绘制灰度直方图 [数字图像

MFC下CSocket编程详解

MFC下CSocket编程详解 分类: C/C++2008-03-13 09:01 34465人阅读 评论(34) 收藏 举报 mfc编程socket服务器socketsstream MFC下CSocket编程详解: 1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN): CSocket::Create 初始化(一般写服务器程序都不要用为好,用下面的 CSocket::Socket 初始化) CSocket::Socket初始化 CSocket::SetSockOpt 设置socket

【数字图像处理】三.MFC实现图像灰度、采样和量化功能详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP格式图片,并通过Bitmap进行灰度处理.图片采样和量化功能. 个人认为对初学者VC++6.0可能还是很值得学习的工具,所以采用它来讲解,而不是VS或C#.同时文章比较详细基础,希望该篇文章对你有所帮助~ [数字图像处理]一.MFC详解显示BMP格式图片 [数字图像处理]二.MFC单文档分割窗口显示图片 免费资源下载地址: http://dow

MFC中文件对话框类CFileDialog详解及文件过滤器说明

当前位置?:?首页???文章分类?:? 开发 ??? MFC中文件对话框类CFileDialog详解及文件过滤器说明 上一篇 利用OpenCV从摄像头获得图像的坐标原点是在左下角 下一篇 Word中为图表生成目录 域名迁移公告 2017年12月20日起,本博客迁移到新域名madaimeng.com,旧域名masikkk.com不再更新内容,但将永久保持可访问! 阅读 大专栏  MFC中文件对话框类CFileDialog详解及文件过滤器说明busuanzi_value_page_pv"> 评

VC/MFC中的CComboBox控件使用详解

CComboBox控件详解 CComboBox控件又称作组合框控件,其有三种形态可供选择,1.简单组合框(Simple)2.下拉组合框(Drop-down)3.下拉列表式组合框(Drop-down list). CComboBox控件的常用设置属性说明: type属性:里面一共有三个选项.就是其三种形式, 我们常用的是后两种形态,其区别就是Dropdown的编辑区为可编辑控件,而droplist为静态控件. Data属性:当程序初始化的时候,下拉列表将显示其属性里面的内容,内容用分号分隔.其属性

孙鑫视频VC++深入详解学习笔记

Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesson5: 文本编程 Lesson6: 菜单编程 Lesson7: 对话框编程 Lesson9: 定制应用程序的外观 Lesson10: 绘图控制 Lesson11 图形的保存和重绘 Lesson12 文件操作 Lesson 13: 文档串行化 Lesson14 网络编程 Lesson 15 多线程 Lesson 16 线程同步

MoveWindow();函数使用详解

摘自:http://blog.csdn.net/yjkwf/article/details/5281207 CWnd::MoveWindow 详解 2010-02-02 16:08 3432人阅读 评论(0) 收藏 举报 mfc CWnd::MoveWindow void MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE ); void MoveWindow( LPCRECT lpRect, BOOL