绘制线条

绘制线条的时候需要两个点

在这里选取的两个点是,一个是鼠标按下(LBUTTONDOWN)和鼠标松开(LBUTTONUP)传递连个点的信息

第一种方法: 使用SDK全局函数

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
 
//首先获得窗口的设备描述表
HDC hdc;
hdc =::GetDC(m_hWnd);

//移动到线条的起点
MoveToEx(hdc, m_CPoint.x, m_CPoint.y, null);

//画线
LineTo(hdc, point.x, point.y);

//释放设备描述表
::ReleaseDC(m_hWnd, hdc);
因为CWnd类提供了成员函数GetDc和ReleaseDC,因此利用SDK函数实现画线功能时,这两个函数前面都要加上两个冒号,表明它们是全局SDK函数

第二种方法:利用MFC的CDC类实现画线功能

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
 
//定义一个指针类型的CDC,并获取对象的DC
CDC *pDC = GetDC();

//移动到起始位置
pDC->MoveTo(m_CPoint);

//画线
pDC->LineTo(point);

//释放DC
ReleaseDC(pDC);


(3)利用MFC提供的CClientDC类来实现

 C++ Code 
1
2
3
4
 

CClientDC dc( this);
dc.MoveTo(m_CPoint);
dc.LineTo(point);
     在构造CClientDC对象时,需要一个CWnd类型的指针作为参数,利用CClientDC类绘图时,会自动调用RelaseDc函数释放设备资源。
     
     当要在父类的窗口上
     CClientDC dc(GetParent());


(4)利用MFC的CWindowDC类实现画线功能
     此处略去

(5)在桌面窗口中画线
       C++ Code 
1
2
3
4
 
//用GetDesktopWindow成员函数获得Windows桌面窗口的句柄
CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_CPoint);
dc.LineTo(point);


(6)绘制彩色线条
     如果想要绘制其他颜色的线条,首先需要创建一个特定颜色的画笔,然后将此画笔选入设备描述表中,接下来绘制的线条的颜色就由这个新画笔的颜色决定了
      CPen( int  nPenStyle , int  nWidth , const LOGBRUSH*  pLogBrush , int  nStyleCount  = 0, const DWORD*  lpStyle  = NULL );
throw( CResourceException );

     MFC提供CPen来创建画笔对象,在程序中,当构造一个GDI对象后,该对象并不会立即生效,必须选入设备描述表,他才会在以后的绘制操作中生效,利用SelectObject函数可以实现把GDI对象选入设备描述表中,并且该函数会返回指向先前被选对象的指针。这主要是为了在完成当前绘制操作后,还原设备描述表用的

     首先创建一个实线画笔,其宽度为1,颜色为红色,接着利用SelectObject函数将新画笔对象选入设备描述表,再利用画线函数绘制线条,然后再次调用SelectObject函数恢复设备描述表中的画笔对象。
 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
//创建一个画笔
CPen m_Pen(PS_SOLID,  10, RGB( 25500));

//用SelectObject函数将新画笔对象选入设备描述表
CClientDC dc( this);
CPen *pOldPen = dc.SelectObject(&m_Pen);

//移动到起始位置
dc.MoveTo(m_CPoint);

//画线
dc.LineTo(point);

//恢复设备描述表中的画笔对象
dc.SelectObject(pOldPen);























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值