利用SDK、CDC类、CClientDC类、CWindowDC类实现画线功能及在圆桌面窗口中画线

利用SDK、CDC类、CClientDC类、CWindowDC类实现画线功能及在桌面窗口中画线

利用SDK、CDC类、CClientDC类、CWindowDC类实现划线功能 - 逆天笨笨蛋 - 资料

  因为视类窗口覆盖在框架窗口之上,因此对窗口客户区的鼠标和键盘操作实际上都是在视类窗口上进行的(除去工具栏和快捷键操作)..?
?-------------------------------------------------------------------------------------------------------------------
  在WM_LBUTTONDOWN消息中记录画线的起始点m_BeginPoint,在WM_LBUTTONUP消息中实现画线操作。
一、利用SDK全局函数
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    
    HDC hdc;
    //取得窗口的设备描述表
    //CWnd类有一个m_hWnd成员变量用于保存窗口句柄,
    //派生于CWnd类的所有类都有这样一个成员变量
    hdc=::GetDC(m_hWnd);
    
    MoveToEx(hdc,m_BeginPaint.x,m_BeginPaint.y,NULL);
    LineTo(hdc,point.x,point.y);
    //释放设备描述表
    ::ReleaseDC(m_hWnd,hdc);

    CView::OnLButtonUp(nFlags, point);
}
二、利用CDC类
  该类封装了所有与绘图相关的操作。该类提供一个数据成员m_hDC,用来保存于CDC类相关的DC句柄。
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    
    //使用CWnd类的成员函数GetDC和ReleaseDC 获取和释放当前窗口的设备描述表对象的指针。
    CDC *pDC=GetDC();
    pDC->MoveTo(m_BeginPaint);
    pDC->LineTo(point);
    ReleaseDC(pDC);

    CView::OnLButtonUp(nFlags, point);
}
三、利用CClientDC类
  该类派生于CDC类,并在构造时调用GetDC,析构时调用ReleaseDC函数。构造CClientDC对象时,需要一个CWnd类型的指针作为参数,以构造一个与指定窗口相关的CClientDC对象。
  例如:CClientDC dc(this);//创建一个与当前窗口相关的CClientDC对象
    CClientDC dc(GetParent());//创建一个与当前窗口的父窗口相关的CClientDC对象。
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    CClientDC dc(this);
    dc.MoveTo(m_BeginPaint);
    dc.LineTo(point);

    CView::OnLButtonUp(nFlags, point);
}
四、利用CWindowDC类
  该类也派生于CDC类,并在构造是调用GetWindowDC函数,析构时调用ReleaseDC函数。
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    CWindowDC dc(this);
    dc.MoveTo(m_BeginPaint);
    dc.LineTo(point);

    CView::OnLButtonUp(nFlags, point);
}
五、在桌面窗口中画线
  CWnd类的成员函数GetDesktopWindow可以取得windows桌面窗口的句柄
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    CWindowDC dc(GetDesktopWindow());
    dc.MoveTo(m_BeginPaint);
    dc.LineTo(point);

    CView::OnLButtonUp(nFlags, point);
}

?

?

?

?
?
?
?
?
?

相关内容推荐