GDI+ 透明窗口.UpdateLayeredWindow
来源:互联网 发布:java 单例模型 编辑:程序博客网 时间:2024/05/27 20:51
制作透明窗口, 使用透明图片遇到的一个问题
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
- GDI+ 透明窗口.UpdateLayeredWindow
- GDI+ 透明窗口.UpdateLayeredWindow
- UpdateLayeredWindow 失败导致透明gdi+ 窗口没有被显示
- UpdateLayeredWindow实现自定义透明窗口
- gdi+ 快速绘制透明窗口
- [GDI+]16位色下UpdateLayeredWindow失败
- UpdateLayeredWindow 绘制异型窗口
- 使用UpdateLayeredWindow 创建透明窗体
- UpdateLayeredWindow方式实现异型窗口
- DrawText在UpdateLayeredWindow中透明的解决办法
- GDI+ / PNG 实现半透明窗口,正常情况下没有问题 将系统设置为16位色后UpdateLayeredWindow函数失败,GetLastError返回8(ERROR_NOT_ENOUGH_MEMORY)
- Layered windows and UpdateLayeredWindow 分层窗口
- 用UpdateLayeredWindow实现任意异形窗口
- Layered windows and UpdateLayeredWindow 分层窗口
- [转]用PNG透明图片和GDI+做不规则透明窗体"异形窗口"
- 用PNG透明图片和GDI+做不规则透明窗体"异形窗口"
- 用PNG透明图片和GDI+做不规则透明窗体"异形窗口"
- Ubuntu 12.04中文输入法的安装
- linux内核学习笔记:进程、进程组、会话
- windows 7 64位无法连接到HP5200LX打印机 (错误 0x0000007e)的解决方法
- C# 控件 单双击并存的解决办法
- Oracle kill sessin 说明 .
- GDI+ 透明窗口.UpdateLayeredWindow
- Dom4j递归输出所有的接点和值
- poj1200-CrazySearch(Rabin-Karp Hash)
- 解析VC++ Name Mangling 机制
- Oracle云数据库初体验 之一 - 申请与介绍
- jquery去掉点击文字,图片,按钮时出现的虚线
- Can not find a java.io.InputStream with the name [] in the invocation stack 解决办法
- unix基础---有关于孤儿进程组和终端会话的理解-------值得一看!!!
- C programe (The second day of the training of cognizant )