当窗口的某个区域需要重绘时激发窗口重绘消息WM_PAINT,相应消息处理函数CWnd::OnPaint将被调用。
CPaintDC一般只用于OnPaint函数中,在处理完窗口重绘后, CPaintDC对象的析构函数把WM_PAINT消息从消息队列中清除,避免不断地重绘操作。坐标原点(0,0)是客户区的左上角。
CClientDC用于特定窗口客户区(窗口中除边框、标题栏、菜单栏、状态栏外的中间部分)的输出,其构造函数中包含了GetDC,析构函数中包含了ReleaseDC,不需要显式释放DC资源。一般用于响应非重绘消息(如键盘和鼠标消息)的绘图操作。坐标原点(0,0)是客户区的左上角。
CWindowDC在整个应用程序窗口上画图,而CClientDC和CPaintDC只能在客户区绘制图形;除非要自己绘制窗口边框和按钮,否则一般不用它。坐标原点(0,0)是屏幕的左上角。