1、使用MoveToEx绘图
HDC hdc;
//hdc = ::GetDC(NULL); //使用API 函数GetDC(NULL),取得屏幕的HDC.并进行画图。
hdc = ::GetDC(m_hWnd); //获取的是当前视类窗口的句柄
MoveToEx(hdc,m_ptOrign.x,m_ptOrign.y,NULL); //将原点点移动到指定点的位置m_ptOrign
LineTo(hdc,point.x,point.y); //画直线到点point
::ReleaseDC(m_hWnd,hdc); //画完之后一定要记得释放DC
2、CDC绘图
该类封装了跟绘图有关的类
CDC *pDC = GetDC(); //使用MFC CWnd类的 GetDC函数
pDC->MoveTo(m_ptOrign);
pDC->LineTo(point);
ReleaseDC(pDC);
3、使用CClientDC绘图
CClientDC是从CDC中派生出来的,但是可以自动调用GetDc()和ReleaseDC()
//CClientDC dc(GetParent()); //获取的是视类的父类cMainFrame的窗口
CClientDC dc(this); //this是获得当前窗口的指针
dc.MoveTo(m_ptOrign);
dc.LineTo(point);
4、CWindowDC
CWindowDC也是从CDC中派生的,但是他的绘图区域是整个窗口区域(包括客户区和非客户区域)
//CWindowDC dc(this); //获取的是视类窗口
//CWindowDC dc(GetParent()); //GetParent()是获取了视类的父窗口CMainFrame的指针
CWindowDC dc(GetDesktopWindow()); //获取的是整个桌面的窗口
dc.MoveTo(m_ptOrign);
dc.LineTo(point);
创建画笔、画刷
1、创建一个画笔
CPen pen(PS_SOLID,1,RGB(255,0,0)); //创建一支实线宽度为1的红色画笔
CClientDC dc(this);
CPen *pOldPen = dc.SelectObject(&pen); //将新笔添加到设备描述表中,将原来的笔存在*pOldpen中
dc.MoveTo(m_ptOrign);
dc.LineTo(point);
dc.SelectObject(pOldPen); //将原来的画笔选回到设备描述表中
2,、创建一个红色画刷
CBrush brush(RGB(255,0,0)); //创建一个红色的画刷
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrign,point),&brush); //用指定的画刷填充一个矩形区域crect
3、创建一个位图画刷
先要添加位图资源
CBitmap bitmap; //定义一个CBitmap的对象bitmap
bitmap.LoadBitmap(IDB_BITMAP1); //加载位图,ID为IDB_BITMAP1
CBrush brush(&bitmap); //创建一个bitmap的画刷
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrign,point),&brush);
4、创建一个透明画刷
CBrush *pbrush = CBrush ::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //GetStockObject获取一个透明画刷,返回句柄,
//FromHandle将返回的句柄转化为一个指向CBrush对象的指针
CClientDC dc(this);
CBrush *pOldBrush = dc.SelectObject(pbrush);
dc.Rectangle(CRect(m_ptOrign,point));
dc.SelectObject(pOldBrush);