划线的几种方法

void CdrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    //MessageBox("点击一下");
    m_point=point;// 全局变量
    CView::OnLButtonDown(nFlags, point);
}

void CdrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
   //windows api 方法 方法一
    //HDC hdc;
    //hdc=::GetDC(m_hWnd);
    //MoveToEx(hdc,m_point.x,m_point.y,NULL);//MoveToEx是用来移动当前画笔的位置
    //LineTo(hdc,point.x,point.y);//Line To 画直线的函数
    //::ReleaseDC(m_hWnd,hdc);//释放DC
    //方法二
    //CDC *pdc;
    //pdc=GetDC();
    //pdc->MoveTo(m_point.x,m_point.y);
    //pdc->LineTo(point.x,point.y);
    //ReleaseDC(pdc);
    //方法三
    //CWindowDC wdc(this);    
    //wdc.MoveTo(m_point.x,m_point.y);
    //wdc.LineTo(point.x,point.y);    
    //ReleaseDC(&wdc);
    //.............................//

    //CWindowDC dc2(GetDesktopWindow());  //GetDesktopWindow() 获取桌面窗口句柄

    //dc2.MoveTo(m_point.x,m_point.y);
    //dc2.LineTo(point.x,point.y);
    //dc2.MoveTo(m_point);
    //dc2.LineTo(point);
    //方法四
    // //CCliectDC在构造和析构函数中进行了GetDC和ReleaseDC,不必再手动申请和释放
 /*   CClientDC dc(this);//CClientDC dc(GetParent());
    dc.MoveTo(m_point);
    dc.LineTo(point);*/
    //方法五
    /*CPaintDC cpdc(this);
    cpdc.MoveTo(m_point);
    cpdc.LineTo(point);*/
    /*CClientDC和CWindowDC 与 CPaintDC 的区别大点
在DC的获取方面 CClientDC和CWindowDC 使用的是并只能是 GetDC 和 ReleaseDC
CPaintDC 使用的是并只能是 BeginPaint 和 EndPaint
CPaintDC 只能用在响应 WM_PAINT 事件
CClientDC,CWindowDC 只能用在响应 非WM_PAINT 事件 */
    //不需要销毁
    //画笔
    //CPen pen(PS_DASHDOT,0.8,RGB(255,255,10));
    //CClientDC dc(this);
    //CPen *pn=dc.SelectObject(&pen);
    //dc.MoveTo(m_point);
    //dc.LineTo(point);
    //画刷
    //CBrush brush(RGB(255,0,255));
    //CClientDC dc(this);    
    矩形填充画刷
    //dc.FillRect(CRect(m_point,point),&brush);
    //位图画刷
    /*CBitmap pBitmap;
    pBitmap.LoadBitmap(IDB_BITMAP1);
    CBrush brush(&pBitmap);
    CClientDC dc(this);        
    dc.FillRect(CRect(m_point,point),&brush);*/
    //分割线
    //CClientDC dc(this);
    //CBrush brush;
    //dc.Rectangle(CRect(m_point,point));    
    /*相对比较来说,Rectangle有边框,可以创建透明画刷,而FillRect没有边框,只能创建有色画刷或位图画刷,白色的画刷对于白色背景没有意义。Rectangle要添加到设备描述表中,用法和CPen的一样,而FillRect不用添加,创建后直接使用。*/
    //创建一个空画刷 没有背景

    //GetStockObject该函数检索预定义的备用笔、刷子、字体或者调色板的句柄。
    CClientDC dc(this);
    CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
    CBrush *oBrush=dc.SelectObject(pBrush);//SelectObject把一个对象(位图、画笔、画刷等)选入指定的设备描述表。新的对象代替同一类型的老对象。
    dc.Rectangle(CRect(m_point,point));
    dc.SelectObject(oBrush);
}

你可能感兴趣的:(c++)