失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MFC画图(画线 画矩形 画刷画笔的使用)

MFC画图(画线 画矩形 画刷画笔的使用)

时间:2023-11-17 13:54:33

相关推荐

MFC画图(画线 画矩形 画刷画笔的使用)

绘制任意线条:

1、创建基于单文档工程:Draw

CDrawView类中添加成员变量:

CPoint m_ptOrigin;

BOOL m_bDraw;

2、CDrawView()中初始化:

m_ptOrigin = point;

m_bDraw = false;

3、添加消息响应函数:

WM_LBUTTONDOWN WM_LBUTTONUP WM_MOUSEMOVE

4、左键按下时:

m_ptOrigin = point;

m_bDraw = true;

5、左键抬起:

m_bDraw = false;

6、鼠标移动时:

//画连续线条

CClientDC dc(this);

if(m_bDraw)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

m_ptOrigin = point;

}

//画扇形线条

CClientDC dc(this);

if(m_bDraw)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

}

//画带外包线的扇形线条

析:画带外包线的扇形线条,不光记录初始位置,还要记录鼠标移动上一位置。

添加成员变量:

CPoint m_ptOld;

在鼠标左键按下时初始化:

m_ptOld = point;

在鼠标移动时进行改变:

CClientDC dc(this);

if(m_bDraw)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(m_ptOld);

dc.MoveTo(m_ptOld);

dc.LineTo(point);

m_ptOld = point;

}

画矩形:

画无边框的矩形

方法说明:利用FillRect函数填充矩形。填充内容为画刷的内容,即画刷对象的指针。

CBrush brush(RGB(5,255,255));

CClientDC dc(this);

dc.FillRect(CRect(m_ptOrigin,point),&brush);

以位图作为画刷的资源

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

CBrush brush(&bitmap);

CClientDC dc(this);

dc.FillRect(CRect(m_ptOrigin,point),&brush);

画有边框的矩形

方法说明:利用Rectangle方法来画矩形。其中CBrush与CPen类分别负责矩形内部和矩形边框的属性

//画中心为白色的矩形

CClientDC dc(this);

dc.Rectangle(CRect(m_ptOrigin,point));

//画中心为透明的矩形

CClientDC dc(this);

CBrush *pBrush=CBrush::FromHandle((HBRUSH)

GetStockObject(NULL_BRUSH));

CBrush *pOldBrush=dc.SelectObject(pBrush);

dc.Rectangle(CRect(m_ptOrigin,point));

pOldBrush=pBrush;

//画中心为透明边为任意颜色的矩形

CClientDC dc(this);

CPen pen(PS_SOLID,1,RGB(234,23,53));

CPen *pOldPen=dc.SelectObject(&pen);

CBrush *pBrush=CBrush::FromHandle((HBRUSH)

GetStockObject(NULL_BRUSH))

CBrush *pOldBrush=dc.SelectObject(pBrush);

dc.Rectangle(CRect(m_ptOrigin,point));

dc.SelectObject(pOldPen);

dc.SelectObject(pOldBrush);

使用画笔、画刷

在OnLButtonUp函数中:

/

CPen pen(PS_SOLID,1,RGB(234,23,53));

//定义一个CPen类对象,并利用RGB宏改变其颜色

CClientDC dc(this);

CPen *pOldPen=dc.SelectObject(&pen); //将其选入设备表

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

dc.SelectObject(pOldPen);

/

CBrush brush(RGB(0,255,0));

CClientDC dc(this);

CRect rect(m_ptOrigin,point);

dc.FillRect(&rect,&brush);

/

使用位图创建画刷:

插入->资源->位图->引入,可以引入位图,初始一般命名为:IDB_BITMAP1

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

CBrush brush(&bitmap);

CClientDC dc(this);

CRect rect(m_ptOrigin,point);

dc.FillRect(&rect,&brush);

/

CBrush *brush;

brush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

CClientDC dc(this);

CBrush *pOldBrush =dc.SelectObject(brush) ;

dc.Rectangle(CRect(m_ptOrigin,point));

dc.SelectObject(pOldBrush) ;

注:

常用的绘图设备类对象的创建和将其引入到设备环境中的方法

在选择绘图设备类对象(GDI对象)进行绘图时,一般可按下列步骤进行:

(1)定义一个GDI对象,然后调用相应的函数(如CreatePen、CreateSolidBrush等)创建此GDI对象。

(2)将已构造出的GDI对象利用设备环境类对象的成员函数SelectObject选入到当前环境中,并同时将原来的GDI对象保存起

来。

(3)绘图结束后,恢复当前设备环境中原来的GDI对象。

注意:在Windows系统中包含了一些库存的GDI对象,在第(3)步中可直接利用设备环境类(CDC)的成员函数

SelectStockObject将一个Windows库存的GDI对象选入,系统可自动将原来选入的GDI对象从设备环境中分离出来。

如果觉得《MFC画图(画线 画矩形 画刷画笔的使用)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。