一,原理:
设备上下文是连接程序与设备(屏幕,打印机)的中介。其内部封装的函数可以使得绘图程序一次书写,在各种设备上都能显示。作用相当于多语言翻译家。
设备上下文内部封装了写文本,绘制椭圆,矩形,直线及绘图属性,方便图形绘制。
设备上下文都会关联一个绘制目标(窗口,图片),在该绘制目标上进行绘制
二,初始化
用绘制目标作为参数进行初始化。
CDC dc(this);
CPaintDC dc(this);//调用BeginPaint()进行初始化,调用EndPaint()进行析构
CWindowDC dc(this);//调用GetWindowDC()进行初始化,ReleaseDC()进行析构,用于在整个窗口上绘制;
CClientDC dc(this);///调用GetDC()进行初始化,ReleaseDC()进行析构,用于在客户区绘制;
pDC=GetDC()//返回客户区得DC,必须通过ReleaseDC()释放
pDC=BeginPaint()//必须以EndPaint()结尾。
三,绘制图形
1.OnPaint()
对于非Doucment/View结构,比如图片或窗口,对话框在该函数内进行重绘。
在该函数内重绘中,必须调用且仅只能调用BeginPaint()和EndPaint()函数一次,如果不调用就会不停得重绘,原因搞不清楚。
而比较戏剧性得是OnPaint()的基函数CWnd::OnPaint()内部会调用Begin和End这么一对函数。因此,要么删除该基函数,要么不要调用涉及到该一对函数的初始化方式。
具体参考:https://www.cnblogs.com/lidabo/archive/2012/07/04/2576174.html
2.CView::OnDraw(DC* pDC)
对于Doucment/View结构,在此函数内重绘。