您的位置:首页 > 其它

MFC学习笔记.day02续-CDC类,绘图区域,CPen画笔,画刷 CBrush,DC设备描述表

2015-07-23 11:26 483 查看
CDC类概述链接

一般我们在使用完CDC对象后要记得删除它,否则会有内存泄露。很多情况下我们可以调用CWnd::GetDC()函数来获取设备上下文指针,即CDC指针,这个时候记得用完后调用CWnd::ReleaseDC()函数释放设备上下文。

在MFC中所有跟作图相关的函数我们都封装到一个类了就是CDC类。

我们利用这种方法来进行划线:

CDC *pDC=GetDC();//这里我们用CWND的成员函数getdc
pDC->MoveTo(m_ptorigin);
pDC->LineTo(point);
RealeaseDC(pDC);//这里我么也是使用cwd的成员函数


CClientDC是从CDC中派生出来的,它在构造的时候它会调用getdc,来获取一个dc的句柄,它在析构的时候会调用realeasedc,来释放dc,所以说我们在使用的时候不要显示的调用它们了。

我们利用这个函数来划线:

绘图区域

//只在客户区域栏划线
CClientDC dc(this);
dc.MoveTo(m_ptorigin);
dc.LineTo(point);


//在客户区域和工具栏上划线
CClientDC dc(GetParent());
dc.MoveTo(m_ptorigin);
dc.LineTo(point);


//在整个屏幕上划线
CWindowDC dc(GetDeskTopWindow());
dc.MoveTo(m_ptorigin);
dc.LineTo(point);


CPen

CPen( );
CPen(
int nPenStyle,//Specifies the pen style.
int nWidth,//Specifies the width of the pen.
COLORREF crColor //Contains an RGB color for the pen.
);
CPen(
int nPenStyle,
int nWidth,
const LOGBRUSH* pLogBrush,//Points to a LOGBRUSH structure.
int nStyleCount = 0,
const DWORD* lpStyle = NULL
);


第一步:创建画笔

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


第二步:创建DC

CClientDC dc(this);


第三步:将笔选到设备描述表当中

CPen *pOldPen=dc.SelectObject(&pen);
//会返回一个旧的画笔,保存起来


第四步:进行绘图、划线

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


第五步:将先前的画笔选回到设备描述表表

dc.SelectObject(pOldPen);


【注意】但我们想要创建阴影线时,必须注意将线宽设置为小于1;

画刷 CBrush

用画刷填充矩形区域:

第一步:画刷的创建 CBrush brush(RGB(255,0,0));

第二步:dc的创建 CClientDC dc(this);

第三步:矩形区域的填充 dc.FillRect(CRect(m_ptorigin,point),&brush);

用位图画刷填充矩形区域:

第一步:创建一幅位图 在resource中可以选着新建或是导入

第二步:定义一幅位图的对象 CBitmap bitmap;

第三步:加载一幅位图 LiadBitmap(位图的ID号);

第四步:dc的创建 CClientDC dc(this);

第五步:矩形区域的填充 dc.FillRect(CRect(m_ptorigin,point),&brush);

DC(Device context)

在GDI中,DC(Device context)是一个非常重要的概念。

有的书中,将DC翻译为设备描述表(《Windows 程序设计第五版》作者Charles Petzold),也有的书将DC翻译为设备上下文

我们可以这么来理解MFC中画图的概念,要画图我们必须要有画图的环境,比如要画布、画笔、画刷……

我们把这个画图的环境功称为DC。

在画图的环境下,一切都是画出来的,所以你在画图之前必须把DC准备好,当然写字也是这样子的。

我们在画画的环境中会用到哪些东西————这些东西我们称为GDI对象

~画布,画笔,调色板,字体,画刷,位图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: