• CreateCompatibleDC与BitBlt 学习


    CreateCompatibleDC与BitBlt

    CreateCompatibleDC

    创建一个与指定设备一致的内存设备描述表。

    HDC CreateCompatibleDC(HDC hdc //设备描述表句柄);

    参数 hdc

    现有的设备描述表的一个句柄,如果这个句柄为NULL,则函数创建一个和应用程序当前屏幕一致的内存设备描述表。

    返回值 如果函数调用成功,则返回一个内存设备描述表句柄;否则返回NULL。

    说明
    创建一个与特定设备场景一致的内存设备场景
    返回值
    Long,新设备场景句柄,若出错则为零
    参数表
    参数 类型及说明
    hdc Long,设备场景句柄。新的设备场景将与它一致。也可能为0以创建一个与屏幕一致的设备场景
    注解

    在绘制之前,先要为该设备场景选定一个位图。不再需要时,该设备场景可用DeleteDC函数删除。删除前,其所有对象应回复初始状态

    BitBlt( //图形拷贝
      HMDC0, //目标设备场景
      x0,y0 //目标左上角坐标
      w,h //目标图形宽、高
      HMDC1, //源设备场景
      x1,y1 //源左上角坐标
      SRCCOPY //拷贝方式,这里是直接拷贝);

    使用方法:

    CreateCompatibleDC

    CDC MemDC;//首先定义一个显示设备对象
    CBitmap MemBitmap;//定义一个位图对象

    //随后建立与屏幕显示兼容的内存显示设备
    MemDC.CreateCompatibleDC(NULL);
    //这时还不能绘图,因为没有地方画^_^
    //下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
    CRect rc;
    GetClientRect(&rc);

    MemBitmap.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
    //将位图选入到内存显示设备中
    //只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
    CBitmap* pOldBit=MemDC.SelectObject(&MemBitmap);

    //先用背景色将位图清除干净,这里我用的是白色作为背景
    //你也可以用自己应该用的颜色
    MemDC.FillSolidRect(0,0,rc.Width(),rc.Height(),RGB(255,255,255));

    ......//一些绘制过程


    //将内存中的图拷贝到屏幕上进行显示
    pDC->BitBlt(0,0,rc.Width(),rc.Height(),&MemDC,0,0,SRCCOPY);

    //绘图完成后的清理
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();

    尤其是最后两部:
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();
    这是清理和回收内存的!

  • 相关阅读:
    高精度模板_C++
    NOIP总结
    HDU2063_过山车_C++
    手写堆_C++
    NOIP2013Day1解题报告
    [ CodeVS冲杯之路 ] P1368
    POJ1002_487-3279_C++
    [ CodeVS冲杯之路 ] P1092
    POJ2376_Cleaning Shifts_C++
    欧几里得距离_曼哈顿距离_切比雪夫距离
  • 原文地址:https://www.cnblogs.com/kanego/p/3584144.html
Copyright © 2020-2023  润新知