void DrawTransparentBitmap(HDC  hdc,  HBITMAP  hBitmap,  short  xStart,  short  yStart,  COLORREF  cTransparentColor);

函数的实现:

void CLoginPanel::DrawTransparentBitmap(HDC  hdc,  HBITMAP  hBitmap,  short  xStart,  short  yStart,  COLORREF  cTransparentColor) 
     { 
     BITMAP          bm; 
     COLORREF      cColor; 
     HBITMAP        bmAndBack,  bmAndObject,  bmAndMem,  bmSave; 
     HBITMAP        bmBackOld,  bmObjectOld,  bmMemOld,  bmSaveOld; 
     HDC                hdcMem,  hdcBack,  hdcObject,  hdcTemp,  hdcSave; 
     POINT            ptSize; 
 
     hdcTemp  =  CreateCompatibleDC(hdc); 
     SelectObject(hdcTemp,  hBitmap);      //  Select  the  bitmap 
 
     GetObject(hBitmap,  sizeof(BITMAP),  (LPSTR)&bm); 
     ptSize.x  =  bm.bmWidth;                        //  Get  width  of  bitmap 
     ptSize.y  =  bm.bmHeight;                      //  Get  height  of  bitmap 
     DPtoLP(hdcTemp,  &ptSize,  1);            //  Convert  from  device 
 
                                                                         //  to  logical  points 
 
     //  Create  some  DCs  to  hold  temporary  data. 
     hdcBack      =  CreateCompatibleDC(hdc); 
     hdcObject  =  CreateCompatibleDC(hdc); 
     hdcMem        =  CreateCompatibleDC(hdc); 
     hdcSave      =  CreateCompatibleDC(hdc); 
 
     //  Create  a  bitmap  for  each  DC.  DCs  are  required  for  a  number  of 
     //  GDI  functions. 
 
     //  Monochrome  DC 
     bmAndBack      =  CreateBitmap(ptSize.x,  ptSize.y,  1,  1,  NULL); 
 
     //  Monochrome  DC 
     bmAndObject  =  CreateBitmap(ptSize.x,  ptSize.y,  1,  1,  NULL); 
 
     bmAndMem        =  CreateCompatibleBitmap(hdc,  ptSize.x,  ptSize.y); 
     bmSave            =  CreateCompatibleBitmap(hdc,  ptSize.x,  ptSize.y); 
 
     //  Each  DC  must  select  a  bitmap  object  to  store  pixel  data. 
     bmBackOld      = (HBITMAP)SelectObject(hdcBack,  bmAndBack); 
     bmObjectOld  =  (HBITMAP)SelectObject(hdcObject,  bmAndObject); 
     bmMemOld        = (HBITMAP)SelectObject(hdcMem,  bmAndMem); 
     bmSaveOld      = (HBITMAP)SelectObject(hdcSave,  bmSave); 
 
     //  Set  proper  mapping  mode. 
     SetMapMode(hdcTemp,  GetMapMode(hdc)); 
 
     //  Save  the  bitmap  sent  here,  because  it  will  be  overwritten. 
     BitBlt(hdcSave,  0,  0,  ptSize.x,  ptSize.y,  hdcTemp,  0,  0,  SRCCOPY); 
 
     //  Set  the  background  color  of  the  source  DC  to  the  color. 
     //  contained  in  the  parts  of  the  bitmap  that  should  be  transparent 
     cColor  =  SetBkColor(hdcTemp,  cTransparentColor); 
 
     //  Create  the  object  mask  for  the  bitmap  by  performing  a  BitBlt 
     //  from  the  source  bitmap  to  a  monochrome  bitmap. 
     BitBlt(hdcObject,  0,  0,  ptSize.x,  ptSize.y,  hdcTemp,  0,  0, 
                   SRCCOPY); 
 
     //  Set  the  background  color  of  the  source  DC  back  to  the  original 
     //  color. 
     SetBkColor(hdcTemp,  cColor); 
 
     //  Create  the  inverse  of  the  object  mask. 
     BitBlt(hdcBack,  0,  0,  ptSize.x,  ptSize.y,  hdcObject,  0,  0, 
                   NOTSRCCOPY); 
 
     //  Copy  the  background  of  the  main  DC  to  the  destination. 
     BitBlt(hdcMem,  0,  0,  ptSize.x,  ptSize.y,  hdc,  xStart,  yStart, 
                   SRCCOPY); 
 
     //  Mask  out  the  places  where  the  bitmap  will  be  placed. 
     BitBlt(hdcMem,  0,  0,  ptSize.x,  ptSize.y,  hdcObject,  0,  0,  SRCAND); 
 
     //  Mask  out  the  transparent  colored  pixels  on  the  bitmap. 
     BitBlt(hdcTemp,  0,  0,  ptSize.x,  ptSize.y,  hdcBack,  0,  0,  SRCAND); 
 
     //  XOR  the  bitmap  with  the  background  on  the  destination  DC. 
     BitBlt(hdcMem,  0,  0,  ptSize.x,  ptSize.y,  hdcTemp,  0,  0,  SRCPAINT); 
 
     //  Copy  the  destination  to  the  screen. 
     BitBlt(hdc,  xStart,  yStart,  ptSize.x,  ptSize.y,  hdcMem,  0,  0, 
                   SRCCOPY); 
 
     //  Place  the  original  bitmap  back  into  the  bitmap  sent  here. 
     BitBlt(hdcTemp,  0,  0,  ptSize.x,  ptSize.y,  hdcSave,  0,  0,  SRCCOPY); 
 
     //  Delete  the  memory  bitmaps. 
     DeleteObject(SelectObject(hdcBack,  bmBackOld)); 
     DeleteObject(SelectObject(hdcObject,  bmObjectOld)); 
     DeleteObject(SelectObject(hdcMem,  bmMemOld)); 
     DeleteObject(SelectObject(hdcSave,  bmSaveOld)); 
 
     //  Delete  the  memory  DCs. 
     DeleteDC(hdcMem); 
     DeleteDC(hdcBack); 
     DeleteDC(hdcObject); 
     DeleteDC(hdcSave); 
     DeleteDC(hdcTemp); 
     }

程序中图片透明 函数相关推荐

  1. C程序中图片调用技巧(程序来自潜艇大站游戏)

    C程序中图片调用技巧 摘要:介绍如何在C程序中调用图片,这将有助于加强C程序的界面的美观性. 关键词: VGA .BMP.13h.h.TIMER.H.Logo. 一.问题的引入:   C语言使用愈来愈 ...

  2. C程序中图片调用技巧

    C程序中图片调用技巧 摘要:介绍如何在C程序中调用图片,这将有助于加强C程序的界面的美观性. 关键词: VGA .BMP.13h.h.TIMER.H.Logo. 一.问题的引入: C语言使用愈来愈普及 ...

  3. C语言中fun的功能是将字符串,下列给定的程序中,fun()函数的功能是:将p所指字符串中......

    下列给定的程序中,fun()函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写(这里的"单词"是指有空格隔开的字符串).例如,若输入: I am a student to ...

  4. 本地方法(JNI)——从java 程序中调用C函数

    [0]README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法--从java 程序中调用C函数 的基础知识 : 2) for source code, ...

  5. 在一个C程序中,main()函数可以放在哪?

    C语言规定,在一个C程序中,main()函数的位置(). A.必须在系统调用的库函数之后 B.必须在程序的开始 C.必须在程序的最后 D.可以在任意位置 答案:D [解析] 每个C程序有且只有一个主函 ...

  6. 小程序中图片太大应该怎么处理

    在小程序中图片格式为png时任然特别大的时候应该先将图片放在服务器上,然后从服务器上选取所用的图片 在小程序中有放置请求接口的配置文件config.js 在小程序页面中要使用大图时候 (1)先引入co ...

  7. 在应用了皮肤的程序中制作透明的文本编辑控件(如:TcxMemo)

    我要在程序中显示一段信息,因为需要让文字的背景透明,我首先使用静态文本控件来实现 遇到需要进行编辑的时候,静态文本控件就不能满足要求了,这就使我想到了可不可以制作一个透明的文本编辑控件 首先上网查了一 ...

  8. linux平台下通过mcr方式从c++程序中调用matlab函数

    小细节很多,所以容易出错. 平台:linux gcc matlab2010a 1 在matlab中写好函数例如branch,调用命令 mcc -W cpplib:libbranch -T link:l ...

  9. 在C语言程序中 当调用函数时,c语言程序设计第2版) 教学课件 作者 梅创社试题库 期末试卷一.docx...

    期末试卷一 一.单项选择题(每题1分,共45分)1.在计算机系统中,可以执行的程序是( )A.源程序 B.汇编语言程序C.机器语言程序 D.ASCII码2.C语言程序的基本单位是( )A.程序行 B. ...

最新文章

  1. python3 namedtuple_你不能低估的Python数据结构Namedtuple(二)
  2. 《Cracking the Coding Interview》——第18章:难题——题目11
  3. 算法-----两数之和 II - 输入有序数组
  4. #279. [SYZOI Round1] 滑稽♂树(树状数组套主席树)
  5. [html] 如何动态修改`<title>`的标题名称?
  6. 1006实验一实验报告
  7. 过渡效果_剪映教程:剪映怎么添加视频之间的过渡转场效果?
  8. 【repost】Javascript操作DOM常用API总结
  9. 你应该要掌握的7种回归分析方法
  10. Ripple 20:严重漏洞影响全球数十亿IoT设备,复杂软件供应链使修复难上加难
  11. Srping MVC中Controller的void方法声明误区
  12. JDK、SDK、JRE、JVM概念详解
  13. 静态代码块与构造函数的作用
  14. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_5_BufferedWriter_字符缓冲输出流...
  15. linux机器crt连接不上,SecureCRT连不上Linux主机了,求破
  16. 完全掌握加密解密实战超级手册
  17. 一文读懂Soul上市:注册用户破亿,上市是福还是祸?
  18. Android Qcom Display学习(五)
  19. html个人新闻网站,html,js,css实现
  20. 数学建模 导航(持续更新ing)

热门文章

  1. HDU4544 湫湫系列故事——消灭兔子
  2. 01.使用.svg格式图片生成app图标详细步骤和注意事项
  3. 第四方汇聚支付接口对接Php
  4. Java实现 蓝桥杯VIP 算法训练 步与血(递推 || DFS)
  5. 春节不出门!这三款超好评编程游戏,好玩到停不下来
  6. Springboot过滤器中注入Bean
  7. DMHS搭建、以及DMHS 双向同步
  8. 百度地图API—简易操作
  9. 核心函数--少儿编程
  10. 【系】微信小程序云开发实战坚果商城-商城项目搭建