MFC简单绘图(二)
2010-05-15 12:54
239 查看
在上篇中我们实现了画直线的功能,现在我们来实现画彩色线条和使用绘图画刷和透明画刷。
在上次建的工程中继续修改。
一、首先实现绘制彩色线条。
首先需要创建一个特定的颜色的画笔,然后将此画笔选入设备描述表中, 可以利用MFC提供的类CPen来创建画笔对象,其的一个构造函数
CPen(int nPenStyle,int nWidth,COLORREF crColor);
其中nPenStyle 指定比的线型(实现、点线、虚线等),nWidth 指定比的宽度,crColor指定比的颜色,利用RGB这个宏可以构建这种类型的值。
另外,构造一个GDI对象后,该对象并不会立即生效,必须选入设备描述表,它才会在以后的绘制操作中生效。利用SelectObject 函数可以实现吧GDI对象选入设备描述表中,并且该函数会返回指定先前被选对象的指针。着主要是为了再完成当前绘制操作后,还原设备描述表用的。
在void CDraw1View::OnLButtonUp(UINT nFlags, CPoint point) 的消息处理函数中修改代码:
值得注意的是:当画笔的宽度要小于等于1是,虚线线型才有效。
二、使用画刷绘图
1、简单画刷
void FillRect(LPCRECT lpRect,CBrush* pBrush);
参数说明:lpRect指向一个RECT结构体或CRect对象指针
pBrush指向用于填充矩形的画刷对象的指针。
2、位图画刷
首先要给程序增加一个位图资源。
就创建了一个默认名称为IDB_BITMAP1的位图资源,并编辑此位图。创建了位图资源后,就可以利用代码来创建位图画刷了。
在void CDraw1View::OnLButtonUp(UINT nFlags, CPoint point) 消息处理函数中修改代码:
三、透明画刷
我们首先来看看利用DCD的Rectangle 函数绘制一个矩形,代码如下:
运行结果如下,我们可以很明显的看到先前画的矩形会被后来画饿矩形所覆盖掉,那么我们要怎么来实现透明呢。
因为设备描述表中有一个默认的白色画刷,在绘图时,它会利用这个画刷来填充矩形的内部,就导致了上面我们看到的结果。
我们可以利用GetStockObject 这个函数来实现。但是利用GetStockObject 函数获取的是一个画刷句柄,而我们在进行绘制操作时需要的是一个画刷对象,这是我们可以利用CBrush 类提供的一个FromHandle 函数来实现从画刷句柄转化为画刷对象这个功能。
static DCD* PASCAL FromHandle(HDC hDC);
实现代码如下:
运行结果:
在上次建的工程中继续修改。
一、首先实现绘制彩色线条。
首先需要创建一个特定的颜色的画笔,然后将此画笔选入设备描述表中, 可以利用MFC提供的类CPen来创建画笔对象,其的一个构造函数
CPen(int nPenStyle,int nWidth,COLORREF crColor);
其中nPenStyle 指定比的线型(实现、点线、虚线等),nWidth 指定比的宽度,crColor指定比的颜色,利用RGB这个宏可以构建这种类型的值。
另外,构造一个GDI对象后,该对象并不会立即生效,必须选入设备描述表,它才会在以后的绘制操作中生效。利用SelectObject 函数可以实现吧GDI对象选入设备描述表中,并且该函数会返回指定先前被选对象的指针。着主要是为了再完成当前绘制操作后,还原设备描述表用的。
在void CDraw1View::OnLButtonUp(UINT nFlags, CPoint point) 的消息处理函数中修改代码:
CPen pen(PS_SOLID,1,RGB(255,0,0)); CClientDC dc(this); CPen *pOldPen = dc.SelectObject(&pen); dc.MoveTo(m_ptOrigin); dc.LineTo(point); dc.SelectObject(pOldPen);
值得注意的是:当画笔的宽度要小于等于1是,虚线线型才有效。
二、使用画刷绘图
1、简单画刷
//创建一个红色画刷 CBrush brush(RGB(255,0,0)); //创建并获得设备描述表 CClientDC dc(this); //利用红色画刷填充鼠标拖曳过程中形成的矩形区域 dc.FillRect(CRect(m_ptOrigin,point),&brush);
void FillRect(LPCRECT lpRect,CBrush* pBrush);
参数说明:lpRect指向一个RECT结构体或CRect对象指针
pBrush指向用于填充矩形的画刷对象的指针。
2、位图画刷
首先要给程序增加一个位图资源。
就创建了一个默认名称为IDB_BITMAP1的位图资源,并编辑此位图。创建了位图资源后,就可以利用代码来创建位图画刷了。
在void CDraw1View::OnLButtonUp(UINT nFlags, CPoint point) 消息处理函数中修改代码:
//创建位图对象 CBitmap bitmap; //加载位图资源 bitmap.LoadBitmap(IDB_BITMAP1); //创建位图画刷 CBrush brush(&bitmap); //创建并获得设备描述表 CClientDC dc(this); //利用位图画刷填充鼠标拖曳过程中形成的矩形区域 dc.FillRect(CRect(m_ptOrigin,point),&brush);
三、透明画刷
我们首先来看看利用DCD的Rectangle 函数绘制一个矩形,代码如下:
CClientDC dc(this); dc.Rectangle(CRect(m_ptOrigin,point));
运行结果如下,我们可以很明显的看到先前画的矩形会被后来画饿矩形所覆盖掉,那么我们要怎么来实现透明呢。
因为设备描述表中有一个默认的白色画刷,在绘图时,它会利用这个画刷来填充矩形的内部,就导致了上面我们看到的结果。
我们可以利用GetStockObject 这个函数来实现。但是利用GetStockObject 函数获取的是一个画刷句柄,而我们在进行绘制操作时需要的是一个画刷对象,这是我们可以利用CBrush 类提供的一个FromHandle 函数来实现从画刷句柄转化为画刷对象这个功能。
static DCD* PASCAL FromHandle(HDC hDC);
实现代码如下:
CClientDC dc(this); //创建一个空画刷 CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //将空画刷选入设备描述表 CBrush *pOldBrush = dc.SelectObject(pBrush); //绘制一个矩形 dc.Rectangle(CRect(m_ptOrigin,point)); //恢复先前的画刷 dc.SelectObject(pOldBrush);
运行结果:
相关文章推荐
- 利用Microsoft VC++6.0 的MFC 的绘图工具实现简单图形的绘制
- VC----MFC-简单绘图
- 基于VS2008MFCTeeChart绘图软件加入控件、类以及简单程序
- MFC简单绘图(三)
- MFC之简单绘图
- MFC 一个简单的绘图程序
- 第四章,简单绘图之MFC中消息分类
- MFC学习笔记 简单绘图及相关函数
- MFC简单绘图
- MFC简单的绘图(一)
- 孙鑫mfc 4.简单绘图
- mfc-简单绘图
- MFC 简单绘图
- MFC中简单绘图几种方式
- MFC线程(一):简单介绍
- 以WPF绘图简单的圆形
- MFC中Listbox控件的简单使用
- mfc编程之发送wm_paint消息时绘图界面只出现一瞬间
- C#动态数据绘图graphic代码简单示例
- DrawTool (一个简单的绘图工具)