研究好久才弄好,注释的比较详细,不明白的函数可以参考MSDN

bool TransparentDIB(CBitmap * dib, /*要绘制的位图*/ CDC * pDC, /*目标DC*/ CRect * rct, /*目标矩形*/ COLORREF transColor, /*透明色*/ bool bStretch /*是否拉伸位图以适应目标矩形*/) { //验证参数 if(dib == NULL || pDC == NULL || rct == NULL) return false; int nWidth; int nHeight; //位图信息对象 BITMAP w_bitmap_info; //获取位图信息 dib->GetBitmap(&w_bitmap_info); //新建设备上下文 CDC w_memoryDC; //创建兼容内存DC w_memoryDC.CreateCompatibleDC(pDC); //根据拉伸状态获得图像实际绘制尺寸 if(bStretch) { nWidth = rct->Width(); nHeight = rct->Height(); } else { nWidth = w_bitmap_info.bmWidth; nHeight = w_bitmap_info.bmHeight; } w_memoryDC.SelectObject(dib);//选入位图对象 w_memoryDC.SetBkColor(transColor);//设置透明色 CDC w_maskDC;//创建兼容内存DC作为掩码DC w_maskDC.CreateCompatibleDC(pDC);//创建兼容内存DC作为掩码DC CBitmap w_maskBitmap;//创建新位图作为掩码位图 w_maskBitmap.CreateBitmap(w_bitmap_info.bmWidth,w_bitmap_info.bmHeight,1,1,NULL); //创建新位图作为掩码位图 w_maskDC.SelectObject(&w_maskBitmap);//选入掩码位图 w_maskDC.BitBlt(0,0,w_bitmap_info.bmWidth,w_bitmap_info.bmHeight,&w_memoryDC,0,0,SRCCOPY); //SRCCOPY方式将源位图以原始大小绘制到掩码DC pDC->StretchBlt(0,0,nWidth,nHeight,&w_memoryDC,0,0,w_bitmap_info.bmWidth,w_bitmap_info.bmHeight,SRCINVERT); //SRCINVERT方式将源位图拉伸绘制到窗口DC pDC->StretchBlt(0,0,nWidth,nHeight,&w_maskDC,0,0,w_bitmap_info.bmWidth,w_bitmap_info.bmHeight,SRCAND); //SRCAND方式将掩码位图拉伸绘制到窗口DC pDC->StretchBlt(0,0,nWidth,nHeight,&w_memoryDC,0,0,w_bitmap_info.bmWidth,w_bitmap_info.bmHeight,SRCINVERT); //SRCINVERT方式将源位图拉伸绘制到窗口DC //完成绘制 w_memoryDC.DeleteDC();//删除内存DC w_maskDC.DeleteDC();//删除掩码DC return true; }

MFC透明位图显示函数相关推荐

  1. 如何画透明位图(转)

    画透明位图通常的方法是使用遮罩.所谓遮罩就是一张黑白双色的位图,他和要透明的位图是对应的,遮罩描述了位图中需要透明的部分,透明的部分是黑色的,而不透明的是白色的,白色的部分就是透明的部分. 假设图A是 ...

  2. vc实现透明位图,透明背景

    vc实现透明位图,透明背景 我们在进行程序的界面设计时,常常希望将位图的关键部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本文介绍了透明位图的制作知识,并 ...

  3. MFC基于对话框如何添加位图并使位图背景透明(TransparentBlt函数)

    MFC中比较重要的一部分学习内容即是绘图,而绘图时我们会发现如果想插入一张图片而又不想要图片的背景,或者已经把图片的背景用Ps去掉了,但是在MFC窗口中显示图片的时候又有了白色的背景,这个时候就可以使 ...

  4. 透明位图的显示(TransparentBlt函数)

    包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码 ...

  5. C语言TransparentBlt函数,技术分享 - 使用TransparentBlt函数实现绘制透明位图

    背景 在自己本科的时候,喜欢用 VC6.0 写一些小游戏来锻炼自己的编程水平.那些小游戏的游戏画面绘制都是使用Windows提供的GDI(图形设备接口)函数实现的,并没有调用现成的游戏引擎.所以,使得 ...

  6. TransparentBlt 透明位图的显示

    from :  http://www.cnblogs.com/syxchina/archive/2010/06/01/2197688.html 包含透明色的位图的绘制方法有多种,最简单的方法是调用现成 ...

  7. 使用StretchBlt函数实现绘制透明位图

    背景 在自己本科的时候,喜欢用 VC6.0 写一些小游戏来锻炼自己的编程水平.那些小游戏的游戏画面绘制都是使用Windows提供的GDI(图形设备接口)函数实现的,并没有调用现成的游戏引擎.所以,使得 ...

  8. 使用TransparentBlt函数实现绘制透明位图

    背景 在自己本科的时候,喜欢用 VC6.0 写一些小游戏来锻炼自己的编程水平.那些小游戏的游戏画面绘制都是使用Windows提供的GDI(图形设备接口)函数实现的,并没有调用现成的游戏引擎.所以,使得 ...

  9. [源码和文档分享]使用TransparentBlt函数实现绘制透明位图

    背景 在自己本科的时候,喜欢用 VC6.0 写一些小游戏来锻炼自己的编程水平.那些小游戏的游戏画面绘制都是使用Windows提供的GDI(图形设备接口)函数实现的,并没有调用现成的游戏引擎.所以,使得 ...

最新文章

  1. java正则表达式 1,Java正则表达式学习(1)
  2. ai钢笔工具怎么描线_AI钢笔工具技巧,怎么画出完美的贝塞尔曲线
  3. Golang的基本类型、引用类型、复合类型
  4. 无法加载主类的10中方法
  5. jcmd 命令_jcmd:一个可以全部统治的JDK命令行工具
  6. 小哥哥你有98K吗?利用Python制作一款多功能变声器!
  7. k8s mysql pv_k8s+mysql+pv+pvc+NFS实现mysql容器编排
  8. Python面向对象的三大特征(封装、继承、多态)
  9. 用计算机算非,在线计算器上的与、或、非、异或等逻辑运算键如何使用?
  10. Docker Desktop 安装使用教程
  11. 限流算法:滑动时间窗口算法。
  12. 百度、谷歌、亚马逊、微软神同步:被盯上的智能语音排位赛
  13. 云班课使用浏览器倍速播放插件
  14. 数据库中的E—R图画法
  15. 词根词缀spers/spher/spir/spond等词根衍生的单词
  16. Excel为图表指定横向坐标数据
  17. mac居家办公怎么连接公司内网,用tunnelblick
  18. ArcGIS基础:面数据空洞填充的方法
  19. word 编号圆圈里面带个数字的输入
  20. 程序员外包到底怎么了?

热门文章

  1. 做shopify收款方式有哪些
  2. 【DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 (2023-07-01).的解决方案】
  3. IDM下载器使用方法详解:百度网盘下载,视频会员一网打尽!
  4. 数学符号:等号上面加一个点≐
  5. python字符串修改
  6. Go语言学习 二十三 错误处理和运行时恐慌(Panic)
  7. php图片点击查看大图,jQuery点击小图看大图,大图查看内容详情所有图片
  8. 面包板入门电子制作 学习笔记6
  9. VB问题——ByRef参数类型不符
  10. statis关键字的使用