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

 

来自孙鑫《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);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值