制作透明窗口, 使用透明图片遇到的一个问题

1:

添加 PNG 资源 失败.

答: 先添加PNG资源组, 然后导入图片.

2:

显示成功加载资源, 资源成功载入内存, 但是加载到Image类的时候, 返回空指针.

答: 可能是忘了 初始化GDI+了. GDI+ 的所有功能使用之前 必须先调用 Gdiplusstartup()函数初始化好.

3:

在使用内存DC时,

如果是在GDI下, 我们使用bitblt函数, 把内存缓存更新到目标缓存里

如果是想制作透明窗口, 则使用UpdateLayeredWindow函数.

4:

UpdateLayerdWindow函数功能异常强大

UpdateLayeredWindow(
    m_hWnd,                            // :当前窗口的句柄
    hdcDlgDC,                         // :当前窗口的DC
    &ptWinPos,                       // :当前窗口在屏幕的左上角位置(相当于 ::SetWindowPos()函数)
    &sizeWindow,                   // :当前窗口在的宽度和高度
    m_hdcMemory,                 // :内存缓存DC
    &ptSrc,                              // :内存缓存的左上角坐标(可用于裁剪内存缓存)
     0,
     &m_Blend,                        // 混合样式
     2);

5:

关于混合样式
    m_Blend.BlendOp=0; //theonlyBlendOpdefinedinWindows2000
    m_Blend.BlendFlags=0; //nothingelseisspecial...
    m_Blend.AlphaFormat=1; //...
    m_Blend.SourceConstantAlpha= 1~255; // :该选项控制着整个窗口的透明度. 1为完全透明, 255为完全不透明( 即使窗口完全不透明, 如果里面的图片有透明属性, 仍能够透明 )

6:
调用UpdateLayerdWindow之前, 要给窗口加上 0x80000样式. 否则无效.
 DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);
 if((dwExStyle&0x80000)!=0x80000)
  SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);

7:
Guiplus::Graphics 类提供了功能强大的 DrawImage 具体如何把一个Image类Draw到Graphics掌握的HDC上, 查看guiplus 帮助文档

8:
GDI和GDI+ 不变的是 HDC,他们都要把东西画到一个DC上.
所以, 初始化Guiplus::Graphics时, 要给其绑定一个DC,一般是绑定到内存dc上.
Graphics graph(m_hdcMemory);

除了加入了一些新的图像算法之外, GDI+和GDI的差别在于
GDI: 面向句柄(HDC)编程
GDI+面向对象编程. HDC是其的一个内部变量.

VCKBASE上有例子. 可以找找看.

转自:http://blog.csdn.net/zdl1016/article/details/3298744

GDI+ 透明窗口.UpdateLayeredWindow相关推荐

  1. VC++玩转炫酷悬浮窗3---GDI+完美实现不规则窗体

     目标 上一篇不规则窗体虽然实现了,但是图形有锯齿,给人以上世纪的老古董感觉,跟酷炫不搭边.今天就要用高级一些的技术做出完美的光滑的无锯齿的不规则窗体. 计划&方案 PNG图片本身就是带透 ...

  2. 利用GDI+基于WIN32实现桌面雪花效果(一)

    前言:毕业论文写完了,闲着没事干,研究研究这些一直想做的效果,先从桌面飘雪花开始,下面是过程记录.最后给出代码,供大家参考. 效果图:(桌面局部截图) 一.创建空WIN32工程并初始化 1.创建空WI ...

  3. GDI+用PNG图片做半透明异型窗口

    {*******************************************************} {                                          ...

  4. Delphi以GDI+制作桌面歌词效果

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Win ...

  5. duilib设置透明窗口_使用duilib开发半透明异形窗体程序(补充)

    距离上一篇半透明窗体的博客,已经过去一年,现在这几天又对Duilib进行了一些优化和修复.这次我把CRenderEngine的渲染函数都改成了基于Gdi+的.根据我的测试,因为Duilib所需的都是最 ...

  6. MFC和GDI+制作蝴蝶苍蝇飞舞小程序

    看到网上有个老外写的蝴蝶飞舞程序,一时兴起,开发个功能相似的小程序.实现功能:屏幕上有蝴蝶或苍蝇飞舞.素材是通过提取工具提取出来的.老外程序的网址记不清了.程序原理比较简单,本文仅供新手学习参考用. ...

  7. Delphi使用GDI+绘制Png图像

    最近在使用鱼鱼桌面秀和雪狐桌面精灵的时候发现一些很漂亮的png图片,但是在Delphi里面没有办法直接加载Png图片进行绘制,所以试用了GDI+进行绘制.效果如下,我使用了雪狐桌面精灵里面的一张图片 ...

  8. 用MFC和Gdi+实现桌面雪花特效

    1.最简窗口的建立 2.添加Gdi+支持 这两个我的博客前文都有自己找 在CMainframe类外添加结构如下 struct Snow {int x;int y;int speed; }; 3.在CM ...

  9. MFC和GDI+制作雪花飞舞小程序

    基于CWnd对话框,利用GDI+和PNG素材实现雪花飞舞唯美场景小程序.程序技术简单,仅供新手参考学习使用. 先看疗效: 下面来说说程序原理吧: 工程:VS2005,MFC(对话框)工程. 窗口:主窗 ...

最新文章

  1. 清华成果发布 | 广度学习基础计算系统集成平台
  2. Exchange Server 2010 灾难恢复
  3. (6) 查看汉字转换成字节数组后的字节值
  4. sqlyog怎么设置默认值_详细讲解如何用SQLyog来分析MySQL数据库
  5. Web.py Cookbook 简体中文版 - Hello World!
  6. super() 函数??
  7. JavaFX自定义控件– Nest Thermostat第2部分
  8. 工作67:el-table问题
  9. 将MyEclipse项目导入到Eclipse中
  10. linux跟踪内存块,在Linux程序中跟踪活动使用的内存
  11. 数据结构之树状数组(候补)
  12. 亿元大奖后抑郁被网友质疑卖惨 信小呆:不想再被打扰
  13. 一款性价比远超visio的画图小工具-Dia Diagram Editor(开源-跨平台)
  14. 自训练和半监督学习介绍
  15. 有哪些国外便宜虚拟主机适合个人建站呢
  16. Mac下Android studio搭建Android开发环境【新手】
  17. 网站关键词排名优化需要注意哪些问题?
  18. 基于 abp vNext 和 .NET Core 开发博客项目 - 接入GitHub,用JWT保护你的API
  19. DirectX的error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 long __cdecl InitD3D(struct HWND__ *)
  20. C++中的内存管理、内存泄漏和内存回收

热门文章

  1. 第一章 软件项目管理概述
  2. LeetCode-8-String to Integer (atoi)
  3. 9.思科交换路由基本命令操作
  4. 小蚂蚁学习PHP性能优化(2)--PHP语言级性能优化
  5. ALSA音频工具amixer,aplay,arecord
  6. sencha touch 彩色图标按钮(button+ico)
  7. Rokon 关于精灵的点击事件
  8. Linq快速入门——扩展方法
  9. typecho 调用评论最多热门文章
  10. [凯立德]2015春季版C2739-M7L83-3521JON,已O+带3D+带路况