• MFC函数之BitBlt


    MFC函数之BitBlt

    // Cgame123View 绘制
    
    void Cgame123View::OnDraw(CDC* pDC)
    {
        Cgame123Doc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        if (!pDoc)
            return;
    
        // TODO:  在此处为本机数据添加绘制代码
        CRect Rect;
         GetClientRect(&Rect);
        //屏幕宽度
        width = Rect.right - Rect.left;
        //屏幕高度
        height = Rect.bottom - Rect.top;
    
        CDC Dc;
        if (Dc.CreateCompatibleDC(pDC) == FALSE)
            MessageBox(_T("Can't create DC"));
        //在不同位置显示位图
        Dc.SelectObject(backmap);
        //显示两张位图使它们连接
        pDC->BitBlt((width - 800) / 2, 0, 800, height, &Dc, 0, goup - 2000, SRCCOPY);
        pDC->BitBlt((width - 800) / 2, 0, 800, height, &Dc, 0, goup, SRCCOPY);
    
    
        //显示位图
        CDC dccompatible;
        if (dccompatible.CreateCompatibleDC(pDC) == FALSE)
            MessageBox(_T("Can't create DC"));
        dccompatible.SelectObject(plane);
    
        //第一二个参数为位置开始出(左上角),第三四个参数为设备的高宽,第六七个参数为切
        pDC->BitBlt(10, -45, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 0, 0, SRCCOPY);
        pDC->BitBlt(10, height-20, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 0, 0, SRCCOPY);
        pDC->BitBlt(10, 200, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, -10, 0, SRCCOPY);
        pDC->BitBlt(10, 250, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 10, 0, SRCCOPY);
        pDC->BitBlt(10, 300, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 0, 0, SRCCOPY);
    
        pDC->BitBlt(10, 350, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 0, -10, SRCCOPY);
        pDC->BitBlt(10, 400, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 0, 10, SRCCOPY);
        pDC->BitBlt(10, 450, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 0, 0, SRCCOPY);
    
    
        //正切上,负切下,下上高度为height
        pDC->BitBlt(80, 0, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 0, 20, SRCCOPY);
        pDC->BitBlt(140, 0, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 0, -20, SRCCOPY);
    
    
        //正切上,负切下,下上高度为height,又一架完整的飞机
        pDC->BitBlt(200, 50, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 0, 20, SRCCOPY);
        pDC->BitBlt(200, 0, m_bm.bmWidth, m_bm.bmHeight, &dccompatible, 0, -30, SRCCOPY);
    
    
        CClientDC dc(this);
    }
    
    
    
    
    BitBlt
    
    设备上下文绘图有很多种方法。例如通过创建位图画刷,利用其填充一个区域来实现图像的绘制。此外,还可以使用CDC类的位图函数来输出位图到设备上下文中。
    
    BitBlt 用于从原设备中复制位图到目标设备,语法格式如下:
    
    BOOLBitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORDdwRop);
    
    x:目标矩形区域的左上角x轴坐标点。
    
    y:目标矩形区域的左上角y轴坐标点。
    
    nWidth:在目标设备中绘制位图的宽度。
    
    nHight:在目标设备中绘制位图的高度。
    
    pSrcDC:源设备上下文对象指针。
    
    xSrc:源设备上下文的起点x轴坐标,函数从该起点复制位图到目标设备。
    
    ySrc:源设备上下文的起点y轴坐标,函数从该起点复制位图到目标设备。
    
    dwRop:光栅操作代码
    dwRop有如下选择:
    
    BLACKNESS           使用黑色填充目标区域
    
    DSTINVERT              目标矩阵区域颜色取反
    
    MERGECOPY            使用与运算组合原设备矩形区域的颜色和目标设备的画刷
    
    MERGEPAINT           使用或运算将反向的源矩形区域的颜色和目标矩形区域的颜色合并
    
    NOTSRCCOPY          复制源设备区域的反色到目标设备中
    
    NOTSRCERASE        使用或运算组合源设备区域与目标设备区域的颜色,然后对结果颜色取反
    
    PATCOPY                  复制源设备当前选中的画刷到目标设备
    
    PATINVERT               使用异或运算组合目标设备选中的画刷和目标设备区域的颜色
    
    PATPAINT                 通过或运算组合目标区域当前选中的画刷和源设备区域反转的颜色
    
    SRCAND                   使用与运算组合源设备和目标设备区域的颜色
    
    SRCCOPY                 直接复制源设备区域到目标设备中
    
    SRCERASE               使用与运算组合目标设备区域的反色与源设备区域的颜色
    
    SRCINVERT              使用异或运算组合源设备区域颜色和目标设备区域颜色
    
    SRCPAINT                 使用或运算组合源设备区域颜色和目标设备区域颜色
    
    WHITENESS             使用白色填充目标区域

    http://blog.csdn.net/h1023417614/article/details/43086533

  • 相关阅读:
    c博客作业05--指针
    C博客作业04--数组
    C博客作业03--函数
    C博客作业02--循环结构
    C博客作业01--分支、顺序结构
    我的第一篇博客
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
  • 原文地址:https://www.cnblogs.com/okgogo2000/p/4788186.html
Copyright © 2020-2023  润新知