MFC畫圖(畫線、畫矩形、畫刷畫筆的使用)


繪制任意線條:

1、創建基於單文檔工程:Draw

CDrawView類中添加成員變量:

CPoint m_ptOrigin;

BOOL m_bDraw;

2、CDrawView()中初始化:

m_ptOrigin = point;

m_bDraw = false;

3、添加消息響應函數:

WM_LBUTTONDOWN    WM_LBUTTONUP  WM_MOUSEMOVE

4、左鍵按下時:

m_ptOrigin = point;

m_bDraw = true;

5、左鍵抬起:

m_bDraw = false;

6、鼠標移動時:

    //畫連續線條

CClientDC dc(this);

if(m_bDraw)

    {

       dc.MoveTo(m_ptOrigin);

       dc.LineTo(point);

       m_ptOrigin = point;

    }

    //畫扇形線條

CClientDC dc(this);

    if(m_bDraw)

    {

       dc.MoveTo(m_ptOrigin);

       dc.LineTo(point);

    }

    //畫帶外包線的扇形線條

析:畫帶外包線的扇形線條,不光記錄初始位置,還要記錄鼠標移動上一位置。

添加成員變量:

CPoint m_ptOld;

在鼠標左鍵按下時初始化:

m_ptOld = point;

在鼠標移動時進行改變:

CClientDC dc(this);

    if(m_bDraw)

    {

       dc.MoveTo(m_ptOrigin);

       dc.LineTo(m_ptOld);

       dc.MoveTo(m_ptOld);

       dc.LineTo(point);

       m_ptOld = point;

    }

畫矩形:

畫無邊框的矩形

方法說明:利用FillRect函數填充矩形。填充內容為畫刷的內容,即畫刷對象的指針。

     CBrush brush(RGB(5,255,255));

     CClientDC dc(this);

     dc.FillRect(CRect(m_ptOrigin,point),&brush);

以位圖作為畫刷的資源

     CBitmap bitmap;

     bitmap.LoadBitmap(IDB_BITMAP1); 

     CBrush brush(&bitmap);

     CClientDC dc(this);

     dc.FillRect(CRect(m_ptOrigin,point),&brush);

畫有邊框的矩形

方法說明:利用Rectangle方法來畫矩形。其中CBrush與CPen類分別負責矩形內部和矩形邊框的屬性

     //畫中心為白色的矩形

     CClientDC dc(this);

     dc.Rectangle(CRect(m_ptOrigin,point));

 

     //畫中心為透明的矩形

     CClientDC dc(this);

CBrush *pBrush=CBrush::FromHandle((HBRUSH)

GetStockObject(NULL_BRUSH));

     CBrush *pOldBrush=dc.SelectObject(pBrush);

     dc.Rectangle(CRect(m_ptOrigin,point));

     pOldBrush=pBrush;

 

//畫中心為透明邊為任意顏色的矩形

     CClientDC dc(this);

     CPen pen(PS_SOLID,1,RGB(234,23,53));

     CPen *pOldPen=dc.SelectObject(&pen);

     CBrush *pBrush=CBrush::FromHandle((HBRUSH)

GetStockObject(NULL_BRUSH))

     CBrush *pOldBrush=dc.SelectObject(pBrush);

     dc.Rectangle(CRect(m_ptOrigin,point));

     dc.SelectObject(pOldPen);

     dc.SelectObject(pOldBrush);

 

使用畫筆、畫刷

在OnLButtonUp函數中:

/////////////////////////////////////////////////////////////////

CPen pen(PS_SOLID,1,RGB(234,23,53));

//定義一個CPen類對象,並利用RGB宏改變其顏色

CClientDC dc(this);

CPen *pOldPen=dc.SelectObject(&pen); //將其選入設備表

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

dc.SelectObject(pOldPen); 

/////////////////////////////////////////////////////////////////

CBrush brush(RGB(0,255,0)); 

CClientDC dc(this); 

CRect rect(m_ptOrigin,point); 

dc.FillRect(&rect,&brush); 

/////////////////////////////////////////////////////////////////

使用位圖創建畫刷:

插入->資源->位圖->引入,可以引入位圖,初始一般命名為:IDB_BITMAP1

CBitmap bitmap; 

bitmap.LoadBitmap(IDB_BITMAP1); 

CBrush brush(&bitmap); 

CClientDC dc(this); 

CRect rect(m_ptOrigin,point); 

dc.FillRect(&rect,&brush);

/////////////////////////////////////////////////////////////////

CBrush *brush; 

brush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

CClientDC dc(this); 

CBrush *pOldBrush =dc.SelectObject(brush) ;  

dc.Rectangle(CRect(m_ptOrigin,point)); 

dc.SelectObject(pOldBrush) ; 

注:

常用的繪圖設備類對象的創建和將其引入到設備環境中的方法

在選擇繪圖設備類對象(GDI對象)進行繪圖時,一般可按下列步驟進行:

(1)定義一個GDI對象,然后調用相應的函數(如CreatePen、CreateSolidBrush等)創建此GDI對象。

(2)將已構造出的GDI對象利用設備環境類對象的成員函數SelectObject選入到當前環境中,並同時將原來的GDI對象保存起

來。

(3)繪圖結束后,恢復當前設備環境中原來的GDI對象。

注意:在Windows系統中包含了一些庫存的GDI對象,在第(3)步中可直接利用設備環境類(CDC)的成員函數

SelectStockObject將一個Windows庫存的GDI對象選入,系統可自動將原來選入的GDI對象從設備環境中分離出來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM