绘图的几种方式

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);

你可能感兴趣的:(api,null,mfc)