设备描述表(DeviceContext简称为DC),也称设备上下文或设备环境,其是一种包含各种绘图属性(如前面所说的字体、颜色)和方法(即各种绘图函数)的数据结构。在窗口中绘图之前必须首先获取窗口的设备描述表。没有设备描述表,任何绘图函数都无法工作。
有三种方法获取DC:1. GetDC() 2.BeginPain()函数 3.构造CDC对象
CGdiObject类便是所有图形设备接口对象的一个抽象的基类。然而,设计人员在做开发的过程中很少用到基类CGdiObject类,而是经常用到其派生类。通常一个Windows GDI对象都是由CGdiObject的派生类的C++对象所表示的,CGdiObject的派生类包括CBitmap、CBrush、CFont、CPen、CRgn、Cpalette
以下用CBrush为例:
CBrush() 有三种重载形式:
1). CBrush(COLORREF crColor)产生某种颜色的实心刷子
CBrush br( RGB( 255, 0 ,0 ));
dc.SelectObject( &br );
2)CBrush( int index,COLORREF crColor )产生某种剖面线的刷子
CBrushbr(HS_FDIAGONAL,RGB(255,0,0));
dc.SelectObject(&br);
3) CBrush( CBitmap* pBitmap )产生位图刷子
CBitmapbmp;
bmp.LoadBitmap(IDB_BITMAP1); //加载位图
CBrushbr(&bmp);
dc.SelectObject(&br);
代码:
新建一个单文本的MFC工程,使用手动添加代码的方式:
在View.h中定义一个CPoint类型的变量,用来存储画笔或者是画刷的初始位置,在View.cpp中加入函数或者在ClassWizard中加入windows消息处理函数,OnLButtonDown和OnLButtonUp,实现功能左键按下时代表初始位置,拖动释放时显示一个画刷结果。
void CCBrushView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_pOrign=point;
CView::OnLButtonDown(nFlags, point);
}
void CCBrushView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CBrush newbr( RGB(0, 255, 255 ));
CClientDC dc( this );
CBrush *pOldbr = dc.SelectObject( &newbr );
dc.Rectangle( CRect(m_pOrign,point) );
dc.SelectObject( pOldbr );
CView::OnLButtonUp(nFlags, point);
}
画笔的使用类似,步骤如下: