在客户区、非客户区和桌面画线

来源:互联网 发布:less.min.js 无法加载 编辑:程序博客网 时间:2024/04/29 16:07

 

来自孙鑫《VC++深入详解》 
 
客户区:即视类窗口
非客户区:包括标题栏、菜单栏、工具栏和状态栏。
在画图之前,需要获取线图的起始点与终点。即鼠标左键按下是起始点,左键弹起是终点。
以下代码中的m_ptOrigin均记录在OnLButtonDown函数中,m_ptOrigin = point ;
 
一:利用Platform SDK函数实现客户区画线功能
void CTView::OnLButtonUp(UINT nFlags, CPoint point)
{
       //首先获得窗口的设备描述表
       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 );
      
       CView::OnLButtonUp(nFlags, point);
}
 
二:利用MFC的CDC类在客户区实现画线功能
void CTView::OnLButtonUp(UINT nFlags, CPoint point)
{
       CDC *pDC = GetDC();
       pDC->MoveTo( m_ptOrigin );
       pDC->LineTo( point );
       ReleaseDC( pDC );
 
       CView::OnLButtonUp(nFlags, point);
}
 
三:利用MFC的CClientDC类在客户区实现画线功能
void CTView::OnLButtonUp(UINT nFlags, CPoint point)
{
       CClientDC dc(this);
       dc.MoveTo(m_ptOrigin);
       dc.LineTo(point);
       CView::OnLButtonUp(nFlags, point);
}
 
四:利用MFC的CWindowDC类在客户区实现画线功能
void CTView::OnLButtonUp(UINT nFlags, CPoint point)
{
       CWindowDC dc(this);
       dc.MoveTo(m_ptOrigin);
       dc.LineTo(point);
CView::OnLButtonUp(nFlags, point);
}
 
五:利用MFC的CClientDC类在非客户区实现画线功能
void CTView::OnLButtonUp(UINT nFlags, CPoint point)
{
       CClientDC dc(GetParent());
       dc.MoveTo(m_ptOrigin);
       dc.LineTo(point);
       CView::OnLButtonUp(nFlags, point);
}
注:视类窗口只有客户区(即视类窗口本身),而框架窗口既有客户区(即菜单栏以下部分),还有非客户区(标题栏、菜单栏、工具栏和状态栏)。视窗口的父窗口就是框架窗口即与CMainFrame类相关联的窗口
 
六:利用MFC的CWindowDC类在非客户区实现画线功能
void CTView::OnLButtonUp(UINT nFlags, CPoint point)
{
       CWindowDC dc( GetParent() );
       dc.MoveTo(m_ptOrigin);
       dc.LineTo(point);
    CView::OnLButtonUp(nFlags, point);
}
 
七:利用MFC的CWindowDC类在桌面区实现画线功能
void CTView::OnLButtonUp(UINT nFlags, CPoint point)
{
       CWindowDC dc(GetDesktopWindow());
       dc.MoveTo(m_ptOrigin);
       dc.LineTo(point);
    CView::OnLButtonUp(nFlags, point);
}
原创粉丝点击