一、DC
1.MFC的CDC类封装了设备描述表和获取设备描述表句柄的GDI函数;
2.获取设备描述表方法:
1>CWnd::GetDC
CWnd::ReleaseDC()
2.CWnd::BeginPaint() //在OnPaint消息处理程序中
CWnd::EndPaint()
3.CDC派生类
1>CPaintDC:窗口客户区画图(仅在OnPaint消息处理程序中使用)
2>CClientDC:窗口客户区画图(除Onpaint处的任何消息处理程序使用)
3>CWindowDC:窗口任意地方画图(客户区和非客户区)
4>CMetaFileDC:向GDI元文件画图
注:
(1)各个CDC派生类可直接实例化;
(2)在CDC派生类构造函数中,调用了::BeginPaint;在析构函数中,调用了::EndPaint
(3)生成CDC派生类对象
栈上:
如:CPaintDC dc(this);//
//opertions
dc生命周期结束后,将自动调用析构函数
堆上:
如:CPaintDC *pdc=new CPaintDC(this);
//opertions
delete pdc;//显式释放设备描述表
4.DC属性
1>文本颜色
获得当前DC中文本颜色:CDC::GetTextColor
设置当前DC中文本颜色:CDC::SetTextColor
2>背景颜色
获得当前DC中文本颜色:CDC::GetBkColor
设置当前DC中文本颜色:CDC::SetBkColor
3>背景模式(OPAQUE TRANSPARENT)
获得当前DC中背景模式:CDC::GetBkMode
获得当前DC中背景模式:CDC::SetBkMode
二、绘图
注:绘图的API函数已封装到了DC中,成为DC对象的成员函数
1.画直线
1>MoveTo(x,y):移动到指定位置(x,y),该位置成为当前位置
2>LineTo(x,y):从当前位置到指定(x,y)画一条直线
2.画封闭图形
1>Ellipse(
2>Rectangle(
3.GDI对象
3.1画笔
1.创建画笔(样式,宽度,颜色)
(1)CPen ( int nPenStyle, int nWidth, COLORREF crColor );
(2)BOOL CreatePen (int nPenStyle,int nWidth,COLORREF crColor);
(3)BOOL CreatePenIndirect( LPLOGPEN lpLogPen );
注:NULL笔可创建没人边框的封闭图形
2.删除画笔
CPen mypen(PS_SOLID,1,RGB(255,0,0));
CPen *poldpen=dc.SelectObject(&mypen);
//opertions
dc.SelectObject(poldpen);
3.2画刷
1.创建画刷
(1)单色画刷
CBrush( COLORREF crColor );
BOOL CreateSolidBrush( COLORREF crColor );
(2)阴影线画刷
BOOL CreateHatchBrush( int nIndex, COLORREF crColor );
2.删除画刷
CBrush mybrush(RGB(100,100,100));
CBrush *poldbrush=dc.SelectObject(&mybrush);
//opertions
dc.SelectObject(poldpen);
3.3字体
1.创建字体
BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename );
BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL );