GetDC()和BeginPaint()之间的区别

Ume*_* MS 9 windows winapi mfc

我正在使用Win32 UI.我想知道GetDC和BeginPaint之间的区别.何时使用哪个API以及何时不使用哪个API.

Mat*_*att 15

GetDC只返回设备上下文的句柄,可以随时随地使用它来进行自己的绘图.另一方面,BeginPaint准备绘画窗口,并提供应该绘制的内容的信息(例如背景是否需要重新绘制以及需要绘制的矩形).

何时使用每个?BeginPaint最常见于WM_PAINT处理程序中(MSDN:应用程序不应该调用BeginPaint,除非响应WM_PAINT消息.每次调用BeginPaint都必须对EndPaint函数进行相应的调用.).GetDC可以在任何地方使用,所以如果你想在外部窗口上绘图.基本上任何时候都不在WM_PAINT处理程序中.BeginPaint和EndPaint也对插入符号有一些影响.阅读msdn了解更多详情.


Han*_*ant 10

的GetDC()是不能用于开始+调用EndPaint的替代品().如果你尝试,你会发现你的UI线程开始烧掉100%的cpu核心,你的WM_PAINT处理程序一遍又一遍地被调用.

最重要的是BeginPaint(),它清除窗口的更新区域.PAINTSTRUCT.rcPaint的值.只要窗口有一个脏矩形,就会生成WM_PAINT,由窗口管理器或程序显式调用它的InvalidateRect()调用创建.BeginPaint()清除它.


Xio*_*ion 8

BeginPaint仅在响应WM_PAINT消息时调用.由它获得的设备上下文指向窗口的无效(待重绘)区域.然后应该使用它发布EndPaint.

GetDC可随时调用.由它获得的设备上下文指向窗口的整个客户区域.要释放它,你应该打电话ReleaseDC.