WM_PAINT消息测试
调试输出字符串
OutputDebugSting(_T(“WM_PAINT-OnPaint\n”));
1、WM_PAINT:功能和发生时间
2、BeginPaint和EndPaint必须成对使用。
a)BeginPaint
返回的DC句柄,是基于关联的窗口客户区坐标系绘图
b)MFC把这两个函数封装为一个类:CPaintDC
类,防止BeginPaint
和EndPaint
不成对使用。
3、CDC类和CDC派生类
CDC类核心句柄就是m_hDC
,他的绘图功能基本都是来自于m_hDC
句柄原有的功能。
a)CPaint类:客户区标准绘图类,专门提供给WM_PAINT消息使用。
b)CClientDC类:客户区临时绘图类,在任何其他消息都可以使用的。
void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{CClientDC dc(this);//封装了API:GetDC和ReleaseDCdc.Ellipse(CRect(point.x - 10, point.y - 5, point.x + 10, point.y + 5));CDialogEx::OnLButtonDown(nFlags, point);
}
c)CWindowDC
类:非客户区标准绘图类,专门在WM_NCPAINT中使用,不太常用。
void CTestDlg::OnNcPaint()
{//既不是屏幕坐标系,也不是客户区坐标系,这个是非客户区坐标系CRect rect;GetWindowRect(rect);rect.OffsetRect(-rect.left, -rect.top);CWindowDC dc(this);//封装API是:GetWindowDC,ReleaseDCdc.FillSolidRect(rect, RGB(200, 255, 255));
}
d)CMemoryDC
类:由吕老师封装,内存DC绘制,不区分消息随时使用。
另外还有一个坐标系是屏幕坐标系,屏幕左上角是坐标系的原点。