zoukankan      html  css  js  c++  java
  • MFC中设备描述表dc的使用

     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     */
  • 相关阅读:
    模板
    待补 http://acm.hdu.edu.cn/showproblem.php?pid=6602
    待补 http://acm.hdu.edu.cn/showproblem.php?pid=6583
    2019 Multi-University Training Contest 1
    洛谷
    2019 Multi-University Training Contest 2
    模板
    2019牛客暑期多校训练营(第三场)
    2019牛客暑期多校训练营(第三场)
    模板
  • 原文地址:https://www.cnblogs.com/dongsheng/p/3594141.html
Copyright © 2011-2022 走看看