hytlok 2015-07-23 02:57 采纳率: 50%
浏览 2152

CreateCompatibleDC,CreateCompatibleBitmap作用

mDC.CreateCompatibleDC(NULL)生成了一个与屏幕显示所兼容的DC,
mBitmap.CreateCompatibleBitmap(&mDC,width,height)生成了一个与mDC所兼容的位图句柄
再将mBitmap选入,mDC.SelectObject(&mBitmap)运行会出现错误。

CreateCompatibleDC,CreateCompatibleBitmap,SelectObject运行时起到什么作用,对CDC,CBitmap做了哪些设置,有懂的大神解释一下吗?

  • 写回答

1条回答 默认 最新

  • oyljerry 2015-07-23 03:41
    关注

    CDC MemDC; //首先定义一个显示设备对象
    CBitmap MemBitmap;//定义一个位图对象
    //随后建立与屏幕显示兼容的内存显示设备
    MemDC.CreateCompatibleDC(NULL);
    //这时还不能绘图,因为没有地方画 ^_^
    //下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上)
    MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);

    //将位图选入到内存显示设备中
    //只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
    CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
    //先用背景色将位图清除干净,这里我用的是白色作为背景
    //你也可以用自己应该用的颜色
    MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
    //绘图
    MemDC.MoveTo(……);
    MemDC.LineTo(……);

    //将内存中的图拷贝到屏幕上进行显示
    pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
    //绘图完成后的清理
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器