1.1绘图设备类
CDC类 -- 绘图设备类,父类是CObject类。表示一般的绘图设备,如:打印机、显示器等
CWindowDC类 -- 窗口类,父类是CDC类。表示的是窗口区域,包括客户区和非客户区。一般界面的美化会使用该类。
CClientDC类 -- 父类是CDC类。仅表示的是窗口区域的客户区
CPaintDC类 -- 父类是CDC类。仅表示的是窗口区域的客户区,只能在WM_PAINT的消息处理函数中使用
CMetaFileDC类 -- 父类是CDC类。与其它DC类区别最大,用来保存一些绘制命令,以便以后调用
例:Draw
在CDrawView类中添加成员变量:CPoint m_ptOrigin
在CDrawView的构造函数中初始化m_ptOrigin
CDrawView::CDrawView() { CPoint m_ptOrigin=0; }
在MFC类向导中为CDrawView添加消息:WM_LBUTTONDOWN消息,双击自动生成消息响应函数OnLButtonDown
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) { m_ptOrigin=point; CView::OnLButtonDown(nFlags, point); }
在MFC类向导中为CDrawView添加消息:WM_LBUTTONUP消息,双击自动生成消息响应函数OnLButtonUp
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) { /*1、利用SDK全局函数实现画线功能 HDC hdc; hdc=::GetDC(m_hWnd); MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL); LineTo(hdc,point.x,point.y); ::ReleaseDC(m_hWnd,hdc); */ /*2、利用MFC的CDC类实现画线功能 CDC* pDC=GetDC(); pDC->MoveTo(m_ptOrigin); pDC->LineTo(point); ReleaseDC(pDC); */ /*3、利用MFC的CClientDC类实现画线功能 CClientDC dc(this); //CClientDC dc(GetParent());//可在框架窗口的客户区画线 dc.MoveTo(m_ptOrigin); dc.LineTo(point); */ /*4、利用MFC的CWindowDC类实现画线功能 CWindowDC dc(this); //CWindowDC dc(GetParent());//可在整个框架窗口内画线 //CWindowDC dc(GetDesktopWindow());//可在整个屏幕窗口上画线 dc.MoveTo(m_ptOrigin); dc.LineTo(point); */ CView::OnLButtonUp(nFlags, point); }
1.2类的使用
1--CDC类的使用
1)创建
CDC::CreateDC
virtual BOOL CreateDC(
LPCTSTR lpszDriverName, //设备的驱动名称
LPCTSTR lpszDeviceName, //设备名称
LPCTSTR lpszOutput, //设备接口
const void* lpInitData //设备的初始化参数
);
显示器设备:
CreateDC("DISPLAY",NULL,NULL,NULL);
2)在设备上绘图
3)销毁
CDC::DeleteDC
2--CMetaFileDC类的使用
1)创建
CMetaFileDC::Create
2)绘图命令
3)关闭,并返回MetaFileDC的句柄
CMetaFileDC::Close
4)使用(可以多次使用)
CDC::PlayMetaFile
5)删除
DeleteMetaFile
1.3绘图对象类
1--CPen-画笔类
CPen( int nPenStyle, int nWidth, COLORREF crColor );
例:
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen* pOldPen=dc.SelectObject(&pen);
......
dc.SelectObject(pOldPen);
2--CBrush-画刷类
CBrush( COLORREF crColor );
CBrush( int nIndex, COLORREF crColor );
CBrush( CBitmap* pBitmap );
注意:若不自定义画刷则使用默认的填充为白色的颜色画刷
例:
CClientDC dc(this);
CBrush brush(RGB(255,0,0));
CBrush* pOldBrush=dc.SelectObject(&pBrush);
......
dc.SelectObject(pOldBrush);
3--CFont-字体类
4--CBitmap-位图类
例:创建位图画刷
CClientDC dc(this);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitmap);
CBrush* pOldBrush=dc.SelectObject(&pBrush);
......
dc.SelectObject(pOldBrush);
5--CPalette-调色板类
6--CRgn-区域类
系统引入调色板的目的:减少位图占用空间的大小
1.4绘图对象的使用
1--画笔、画刷、字体的使用步骤
1)构造(创建)绘图对象
2)将绘图对象选入到当前绘图设备
3)使用
4)将绘图对象从当前设备中选出
5)删除绘图对象
2--位图的使用步骤
将位图类的加载放入视图类的OnPaint函数中即可设置其随视图窗口大小的变化而重画
1)使用位图对象加载位图资源
2)创建与当前DC兼容的DC
3)将位图选入到兼容DC
4)将位图从兼容DC拷贝到当前DC
5)将位图从兼容DC中选出
6)删除兼容DC
7)删除位图对象
3--区域的使用步骤
1)创建
CRgn::CreateXXX
2)几何运算(可以多次运算)
CRgn::CombineRgn()
3)填充区域
CDC::FillRgn
矩形填充区域:CDC::FillRect,在参数中直接提供绘制使用的画刷,不需要将画刷选入设备描述表中;
例:
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
4)填充区域的边框
CDC::FrameRgn