zoukankan      html  css  js  c++  java
  • 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();
    这是清理和回收内存的!

  • 相关阅读:
    程序员面试金典-整数对查找
    hihocoder-1552-缺失的拼图
    论文: YOLO9000-Better,Faster,Stronger
    hihocoder-1524-逆序对
    hihocoder-1546-集合计数
    hihocoder-1543-SCI表示法
    Oracle中的定时任务JOB
    JS中时间戳处理
    Boostrap小技巧
    Struts标签 logic:iterate简单使用
  • 原文地址:https://www.cnblogs.com/kanego/p/3584144.html
Copyright © 2011-2022 走看看