1. 程式人生 > >鼠標繪制簡單圖形

鼠標繪制簡單圖形

http flags 實現 point wm_paint code class 文檔類型 背景

功能:

1、繪制的圖形包括直線、橢圓和矩形,通過菜單對繪制的圖形切換

2、在視圖中使用鼠標動態的繪制圖形

分析:

當窗口尺寸發生變化時,引起窗口重繪,會發送WM_PAINT消息,這時首先會擦除窗口的背景,然後再進行重繪操作,這樣就把窗口中先前繪制的圖形擦除掉了;可以將繪制圖形的三要素(起點、終點、繪制類型)保存下來,在窗口重繪調用程序視圖類窗口的OnDraw函數中再將圖形根據保存的三要素重新輸出;

  1、數據

    在視圖中添加兩個點坐標

    CPoint m_ptOrigin; //起點坐標

    CPoint m_ptEnd; //終點坐標

    UINT m_nDrawType; //圖形的類型,0:不繪制;1:直線;2:橢圓;3:矩形;

    BOOL m_bFlag; //是否繪制圖形

  2、繪制過程

    2.1--LBUTTONDOWN

      1)保存圖形的起點

      2)m_bFlag=TRUE; //開始繪制

    2.2--MOUSEMOVE

      if(m_bFlag){

        //擦除舊線

        //畫新線

      }

    2.3--LBUTTONUP

      m_bFlag=FALSE; //繪制結束

實現:

創建單文檔類型的MFC工程:Graphic,在資源窗口中的菜單欄中添加頂層菜單項“繪圖”,並添加下拉菜單項:IDM_DOT(點)、IDM_LINE(直線)、IDM_RECTANGLE(矩形)、IDM_ELLIPSE(橢圓);在工程的視圖類CGraphicView類中添加私有成員變量:UINT m_nDrawType,並在視圖類的構造函數中將其初始化為0,在不同的菜單項的消息響應函數中將m_nDrawType設為不同的值以標識不同的繪制圖形:點--1、直線--2、矩形--3、橢圓--4;

在視圖類CGraphicView類中添加私有成員變量:CPoint m_ptOrigin,並在視圖類的構造函數中將該變量初始化為0,在鼠標左鍵按下的消息響應函數中用以保存左鍵按下時的坐標;

  技術分享

  技術分享

void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    m_ptOrigin=point;
    
    CView::OnLButtonDown(nFlags, point);
}

鼠標繪制簡單圖形