一. 获取gdi对象
1.SDK接口都是全局函数,所有加::
HDC hdc=::GetDC(m_hwnd);
::ReleaseDC();
2.MFC接口,GetDC是CWnd类的成员函数,m_hwnd是CWnd类的成员变量
CDC* pdc=GetDC();
ReleaseDC(pdc);
3.CClientDC是CDC类的派生类,GetDC和ReleaseDC分别在构造和析构中完成
CClientDC dc(this);
CClientDC dc(GetParent());//获取当前窗口的父窗口 的gdi句柄
4.CWindowDC是CDC类的派生类,在构造和析构中调用GetWindowDC和ReleaseDC
CWindowDC dc(this); 可以访问整个窗口区,包括客户区和非客户区
CWindowDC dc(GetParent());
CWindowDC dc(GetDesktopWindow());//该dc可用于桌名画图
二.创建画笔和画刷
1.画笔
CPen pen(…);
CClientDC dc(this);
CPen oldPen =dc.SelectObject(&pen);
dc.MoveTo();
dc.LineTo();
dc.SelectObject(&oldPen);
2.画刷
CBrush brush(RGB(255,0,0));
CClientDC dc(this);
dc.FillRect(CRECT(…),&brush);// FillRect画矩形,参数& brush,在矩形内填充画刷
3. 位图画刷
CBitmap bitmap;
bitmap.LoadBitmap();
CBrush brush(&bitmap);
…
4.透明画刷
CBrush* pbrush =CBrush::FromHandle((CHBRUSH)GetSTOCKObject(NULL_BRUSH));//透明画刷
CClientDC dc(this);
CBrush *pold =dc.SelectObject(pbrush);
dc.Rectangle(CRECT(…));//Rectangle绘制一个矩形
dc.SelectObject(pold);
注释:FromHandle:画刷句柄转换为画刷对象,CBrush类的静态成员函数,所以用::。