备描述表总结
感觉学习VC++一路走的太快了,还是停下来先复习复习以前学过的,这样以后学习才会更加深入.
今天总结一下设备描述表.
1.设备描述表
设备描述表是一个包含设备信息的结构体,(物理设备如显示器,打印机),MFC中关于图形操作都需要DC来完成.
2获取DC 有两种方式:
(1)在WM_PAINT消息时,使用BeginPaint EndPaint;
eg: HDC hdc;
PAINTSTRUCT ps;(用来接收绘制的信息)
hdc=BeginPaint(hwnd,&ps);
TextOut(hdc,0,0,"hello",strlen("hello"));
EndPaint(hwnd,&ps);
2.HDChdc;
hdc=GetDc(hwnd);
TextOut(hdc,0,0,"hello",strlen("hello"));
ReleaseDC(hwnd,hdc);
在其他的场合,都是使用第二种方法来调用DC.
具有特殊类型的DC
CPaintDC 用于在窗口客户区绘图(仅限于OnPaint处理程序)
CClientDC 用于在窗口客户区绘图(除OnPaint外的任何处理程序)
CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd);
CWindowDC 用于在整个窗口.下面是以桌面为例,应该明确桌面也是一个窗
口.
CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd);
CMetaFileDC 用于向GDI元文件绘图
CMetaFileDCdc(this);
dc.TextOut("hello");
这个就保存在元文件中,等待事件然后播放元文件.(如窗口重绘)
3设备描述表相关的工具有:bitmap,font,brush,palette,pen
使用原则:首先创建一个特定的对象,然后将其选入设备描述表中,接下来就一一介绍如何使用.
CClientDCdc(this);
CPen pen(类型,线宽,颜色);(定义一个画笔)
CBrush brush(颜色);(定义一个画刷,主要是填充作用)
CBitmap bitmap;(定义一个位图)
bitmap.LoadBitmap(IDB_BITMAP1);
CFont font;(定义一种字体)
font.CreatePointFont(大小,字体名称,NULL);(NULL 表示使用屏幕设备描述表来完成这中转换) 将他们都选入设备描述表中,并且保存以前的.运用SelectObject()函数,可以将其选入设备描述表,并且返回先前被选对象的指针.
CPen *poldpen=dc.SelectObject(&pen);
使用过程
dc.SelectObject(poldpen);(使用结束后,将其恢复到原来的状态)
CBrush *poldbursh=dc.SelectObject(&bursh);
dc.FillRect(CRect(100,100,200,200),&brush);
dc.SelectObject(poldbrush);。