MFC消息映射机制的剖析,讲述如何运用ClassWizard,,理解发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的 函数进行响应的。掌握设备描述表及其封装类CDC的使用,CDC是如何与具体的设备发生关联的,融合具体的画图程序进行分析。如何设置封闭图形的填充刷子 (位图画刷与透明画刷的使用)。

 

void CMy1View::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    m_bDraw=FALSE;

/*    HDC hdc;

    hdc=::GetDC(m_hWnd);
    MoveToEx(hdc,m_ptOrg.x,m_ptOrg.y,NULL);            //移动到点
    LineTo(hdc,point.x,point.y);                    //画线到点
    ::ReleaseDC(m_hWnd,hdc);                        //记得释放dc
*/

/*    CDC *pDC=GetDC();            //CWnd::GetDC()

    pDC->MoveTo(m_ptOrg);
    pDC->LineTo(point);
    ReleaseDC(pDC);                //释放CDC资源

*/

//    CClientDC dc(this);                    //CClientDC客户区dc,自动调用getdc 和releasedc

/*    CClientDC dc(GetParent());            //CWnd* GetParent() 得到父窗口窗口指针
   
    dc.MoveTo(m_ptOrg);
    dc.LineTo(point);                    //不需要调用releasedc
*/   
//    CWindowDC dc(this);
//    CWindowDC dc(GetParent());            //得到了整个窗口
/*    CWindowDC dc(GetDesktopWindow());    //得到了整个桌面屏幕
    dc.MoveTo(m_ptOrg);
    dc.LineTo(point);                   
*/

/*    CPen pen(PS_SOLID,10,RGB(0,0,255));            //创建画笔

    CClientDC dc(this);
    CPen *pOldPen=dc.SelectObject(&pen);        //保持旧的的画笔
    dc.MoveTo(m_ptOrg);
    dc.LineTo(point);
    dc.SelectObject(pOldPen);                    //恢复画笔
*/

//    CBrush brush(RGB(255,0,0));                    //创建颜色画刷
    CClientDC dc(this);
    CBitmap bitmap;                                //加载位图
    bitmap.LoadBitmap(IDB_BITMAP1);
//    CBrush brush(&bitmap);                        //位图画刷

    CBrush* pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//创建透明画刷
    CBrush* pOldBrush=dc.SelectObject(pBrush);

    dc.Rectangle(CRect(m_ptOrg,point));    //画刷填充矩形   
    dc.SelectObject(pOldBrush);
       
    CView::OnLButtonUp(nFlags, point);
}

 

 

void CMy1View::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default

    CClientDC dc(this);
    CPen pen(PS_SOLID,10,RGB(152,25,98));    //创建画笔
    CPen *pOldPen=dc.SelectObject(&pen);

    if (m_bDraw == TRUE)
    {
        dc.SetROP2(R2_BLACK);    //设置绘图模式
        dc.MoveTo(m_ptOrg);
        dc.LineTo(point);
        m_ptOrg=point;

    }

   
    CView::OnMouseMove(nFlags, point);
}