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 */