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

时间: 2024-10-04 12:52:28

MFC函数之BitBlt的相关文章

破解 Rith's CrackMe #1(对比IDA查看动态分析中的MFC函数名)

系统 : Windows xp 程序 : Rith's CrackMe #1 程序下载地址 :http://pan.baidu.com/s/1gecW9Qr 要求 : 注册机编写 使用工具 : IDA Pro & OD 可在“PEDIY CrackMe 2007”中查找关于此程序的破文,标题为“WAKU的第二个破文----Rith's CrackMe #1(非常简单)”. 使用IDA载入程序,在字串表中找出正确注册的提示“Well done cracker!”,并双击交叉参考来到关键代码处: 0

【转】StretchBlt函数和BitBlt函数的用法

原帖地址:StretchBlt函数和BitBlt函数的用法 StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩.也即是将内存中的位图拷贝到屏幕上,并且可以根据屏幕画图区的大小来进行伸缩,适应响应的屏幕(或图像控件) BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSr

StretchBlt函数和BitBlt函数的用法

StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩.也即是将内存中的位图拷贝到屏幕上,并且可以根据屏幕画图区的大小来进行伸缩,适应响应的屏幕(或图像控件) BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, in

MFC函数—— CWnd::PreCreateWindow

 CWnd::PreCreateWindow virtual BOOL PreCreateWindow( CREATESTRUCT& cs ); 返回值: 如果要继续窗口的创建过程,则返回非零值:返回0则表明创建过程失败. 参数: cs一个CREATESTRUCT结构 说明: 框架在与CWnd对象相连接的Windows窗口被创建之前调用这个成员函数.永远不要直接调用这个函数. 这个函数的缺省实现检验窗口类名是否为NULL,如是,则用适当的缺省值来代替.重载这个函数以在窗口被创建之前修改CREAT

【MFC】CDC::BitBlt介绍

CDC::BitBlt介绍 2011-11-04 08:25 19576人阅读 评论(6) 收藏 举报 摘自: http://blog.csdn.net/bberdong/article/details/6934270 设备上下文绘图有很多种方法.例如通过创建位图画刷,利用其填充一个区域来实现图像的绘制.此外,还可以使用CDC类的位图函数来输出位图到设备上下文中. BitBlt 用于从原设备中复制位图到目标设备,语法格式如下: BOOLBitBlt(int x,int y,int nWidth,

MFC函数—— CFrameWnd::OnCreateClient

CFrameWnd::OnCreateClient virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext*pContext); 返回值:如果成功,则返回非零值,否则为0. 参数: lpcs             指向Windows CREATESTRUCT结构对象的指针. pContext     指向CCreateContext结构的指针. 说明: 执行OnCreate时由框架调用.不用调用此成员函数. 缺省实现是从pC

MFC函数——CWnd::OnCreate

CWnd::OnCreate afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct ); 返回值: OnCreate必须返回0以继续CWnd对象的创建过程.如果应用程序返回-1,窗口将被销毁. 参数: lpCreateStruct指向一个CREATESTRUCT结构,其中包含了与要创建的CWnd对象有关的信息. 说明: 当应用程序通过调用成员函数Create或CreateEx请求创建Windows的窗口时,框架调用这个成员函数.CWnd对象在窗口

MFC函数——CWnd::OnEraseBkgnd

CWnd::OnEraseBkgnd afx_msg BOOL OnEraseBkgnd( CDC* pDC ); 返回值: 如果它擦除了背景,则返回非零值:否则返回0. 参数: pDC 指定了设备环境对象. 说明: 当CWnd对象的背景需要被擦除时(例如,当窗口大小被改变时),框架就调用这个函数.它被调用以便为绘图准备无效区域. 缺省的实现使用窗口类结构中hbrBackground成员指定的窗口类背景刷子擦除窗口背景. 如果hbrBackground成员为NULL,你重载的OnEraseBkg

MFC中显示 .bmp格式的位图

最近在看VisualC++ 图像处理的书籍,表示一直在从基础做起,今天就记录一个简单功能的实现,显示.bmp格式的位图. 首先需要理解的是窗口创建的过程包括两个步骤:首先擦除窗口的背景,然后在对窗口进行重新绘制. 一般而言,对于单文档或多文档的MFC程序,显示图像的代码要放在OnDraw函数之中.刚刚说过,窗口重绘时,要先将窗口的背景擦除,也就是发送WM_ERASEBKGND消息,然后用OnEraseBkgnd()函数处理这个消息,所以我们的显示图像的代码也可以放在这个函数之中.当然,这里只是为