MFC绘图

新建项目:Draw

在CDrawView中添加变量:

private:
CPoint m_ptOrigin;
CPoint M_ptOld;
BOOL m_bDraw;

 

代码:

// CDrawView 构造/析构

CDrawView::CDrawView()
    : m_ptOrigin(0)
    , m_bDraw(false)
    , m_ptOld(0)
{
    // TODO: 在此处添加构造代码

}

// CDrawView 消息处理程序


void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{    
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    m_ptOrigin = m_ptOld = point;
    m_bDraw = TRUE;

    CView::OnLButtonDown(nFlags, point);
}


void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    //1.使用HDC绘图
    /*HDC hdc;
    hdc = ::GetDC(m_hWnd);
    MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
    LineTo(hdc,point.x,point.y);
    ::ReleaseDC(m_hWnd,hdc);*/

    //2.使用CDC绘图
    /*CDC *cdc = GetDC();
    cdc->MoveTo(m_ptOrigin);
    cdc->LineTo(point);
    ReleaseDC(cdc);*/

    //3.使用CClientDC绘图
    //CClientDC dc(this);
    ////获取父窗口区
    ////CClientDC dc(GetParent());
    //dc.MoveTo(m_ptOrigin);
    //dc.LineTo(point);

    //4.使用CWindowDC绘图
    //CWindowDC dc(this);
    ////获取父窗口区
    ////CWindowDC dc(GetParent());
    ////获取整个屏幕区
    ////CWindowDC dc(GetDesktopWindow());
    //dc.MoveTo(m_ptOrigin);
    //dc.LineTo(point);

    //5.选择线型
    /*CPen cpen(PS_SOLID,1,RGB(0,255,0));
    CClientDC dc(this);
    CPen *pOldPen = dc.SelectObject(&cpen);
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    dc.SelectObject(pOldPen);*/

    //6.使用画刷
    //6.1
    //CBrush brush(RGB(0,255,0));

    //6.2 
    /*CBitmap bitmap;
    bitmap.LoadBitmapW(IDB_BITMAP1);
    CBrush brush(&bitmap);
    CClientDC dc(this);
    CBrush *pOldBrush = dc.SelectObject(&brush);
    dc.Rectangle(CRect(m_ptOrigin,point));
    dc.SelectObject(pOldBrush);*/

    //6.3创建透明画刷
    /*CBrush *pbrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
    CClientDC dc(this);
    CBrush *pOldBrush = dc.SelectObject(pbrush);
    dc.Rectangle(CRect(m_ptOrigin,point));
    dc.SelectObject(pOldBrush);*/

    m_bDraw = FALSE;

    CView::OnLButtonUp(nFlags, point);
}


void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CPen pen(PS_SOLID, 1, RGB(0,255,0));
    CClientDC dc(this);
    CPen *pOldPen = dc.SelectObject(&pen);
    if(m_bDraw)
    {
        //画连续的线
        /*dc.MoveTo(m_ptOrigin);
        dc.LineTo(point);
        m_ptOrigin = point;*/

        //画扇形
        /*dc.MoveTo(m_ptOrigin);
        dc.LineTo(m_ptOld);
        dc.MoveTo(m_ptOrigin);
        dc.LineTo(point);
        m_ptOld = point;*/

        //画带边线的扇形
        dc.MoveTo(m_ptOrigin);
        dc.LineTo(m_ptOld);
        dc.MoveTo(m_ptOld);
        dc.LineTo(point);
        m_ptOld = point;

    }
    dc.SelectObject(pOldPen);

    CView::OnMouseMove(nFlags, point);
}

注:

笔记

posted @ 2012-06-08 18:18  lmy4710  阅读(156)  评论(0)    收藏  举报