1 以下代码我是在View类中实现的:
 2 /** 利用平台SDK实现画线功能
 3     // 首先获得窗口的设备描述表
 4     HDC hdc;
 5     hdc = ::GetDC( m_hWnd );  //调用的是平台SDK的成员函数
 6     // 移动到线条的起点
 7     MoveToEx( hdc, m_ptOrigin.x, m_ptOrigin.y, NULL ); // 第四个参数是一个指向Point结构体的指针,用于保存移动前鼠标的位置坐标,这里不需要这个坐标,所以设置为NULL
 8     LineTo( hdc, point.x, point.y );
 9     ::ReleaseDC( m_hWnd, hdc );
10     CView::OnLButtonUp(nFlags, point);
11     */
12 
13     /** CDC 类,利用MFC封装类实现画线功能
14     CDC* pDC = GetDC();        // 调用的是CWnd类的成员函数,View类也是从CWnd类继承的
15     pDC->MoveTo( m_ptOrigin );
16     pDC->LineTo( point );
17     ReleaseDC( pDC );
18     */
19 
20     /** 利用CDC 类的派生类 CClientDC 实现画线功能, 他在构造函数中调用GetDC,在析构时调用ReleaseDC,因此不需要显示调用
21     //CClientDC dc( this );
22     CClientDC dc( GetParent() );
23     dc.MoveTo( m_ptOrigin );
24     dc.LineTo( point );
25     */
26 
27     /**CWindowDC 也派生于CDC类
28     //CWindowDC dc( this );                 // 在客户区绘图
29     //CWindowDC dc( GetParent() );         // 可以在菜单栏和工具栏上绘图
30     CWindowDC dc( GetDesktopWindow());
31     dc.MoveTo( m_ptOrigin );
32     dc.LineTo( point );
33     */
34 
35     /** 画笔的使用
36     //CPen pen( PS_SOLID, 2, RGB(255, 0, 0) );
37     //CPen pen( PS_DASH, 1, RGB(255, 0, 0) );  //线宽必须<=1才生效
38     CPen pen( PS_DOT, 1, RGB(255, 0, 0) );
39     CClientDC dc( this );
40     CPen* pOldPen = dc.SelectObject( &pen );
41     dc.MoveTo( m_ptOrigin );
42     dc.LineTo( point );
43     dc.SelectObject( pOldPen );
44     */
45 
46     /** 颜色画刷的使用
47     CBrush brush( RGB(255, 0, 0) );
48     CClientDC dc( this );
49     dc.FillRect( CRect( m_ptOrigin, point), &brush );
50     */
51 
52     /** 位图画刷的使用
53     CBitmap bitmap;
54     bitmap.LoadBitmapW( IDB_BITMAP1 );
55     CBrush brush( &bitmap );
56     CClientDC dc( this );
57     dc.FillRect( CRect( m_ptOrigin, point ), &brush );
58     */
59 
60     /** 默认是白色画刷,会覆盖掉先前区域内图行
61     CClientDC dc( this );
62     dc.Rectangle( CRect( m_ptOrigin, point ) );  // DC 默认是白色画刷,前边画的图像会把后边的覆盖掉,所以要想办法用透明画刷
63     */
64     
65     /** 使用透明画刷
66     CClientDC dc( this );
67     // 创建一个空画刷,FromHandle方法可以将画刷句柄转换成画刷对象
68     // GetStockObject方法返回的是一个HGDIOBJECT句柄,所以要将其强制类型转化成HBRUSH类型
69     CBrush* pBrush = CBrush::FromHandle( (HBRUSH)GetStockObject( NULL_BRUSH));
70     CBrush* pOldBrush = dc.SelectObject( pBrush );
71     dc.Rectangle( CRect( m_ptOrigin, point ) );
72     dc.SelectObject( pOldBrush );
73     */

 

posted on 2014-03-11 15:55  可笑痴狂  阅读(2288)  评论(0编辑  收藏  举报