透明窗口(窗口上面文字图片等内容不透明)的实现
2013-03-20 18:13
288 查看
透明窗口(窗口上面文字图片等内容不透明)的实现
本文讨论通过SetLayeredWindowAttributes来实现本文的目的。
SetLayeredWindowAttributes的实现必须将窗口设置为WS_EX_LAYERED的扩展风格。 然而,只有WS_POPUP窗口才能设置WS_EX_LAYERED的扩展风格。这就意味着只能够在POPUP的窗口中实现透明窗口,而在WS_CHILD风格的窗口中是不能够实现的。
当初我就是试了半天发现不行的。
SetLayeredWindowAttributes的原型如下:
[cpp] view
plaincopy
BOOL SetLayeredWindowAttributes( HWND hwnd,
COLORREF crKey,
BYTE bAlpha,
DWORD dwFlags
);
第一个参数就是要设置的窗口的句柄,第二个就是要设置的一个透明色,第三个是要设置的透明度,bAlpha的范围是 0-255,如果是0,那么完全透明,如果是255,是完全不透明。 第四个参数,就是设置是按照透明色来透明,还是按照bAlpha来透明。或者两个都设置。 如果 dwFlags 设置了LWA_COLORKEY,那么crKey就起作用,窗口中所有的crKey颜色区域就会全部透明,如果dwFlags设置了LWA_ALPHA,那么bAlpha就会起作用,整个窗口就会按照bAlpha的值来透明。也可以这两个一起设置来同时实现这两个效果。
比如下面的代码:
SetLayeredWindowAttributes(m_hWnd,RGB(255,0,255),
(BYTE)220,LWA_ALPHA|LWA_COLORKEY);
将会把窗口的所有的洋红色区域全透,然后剩下的区域半透明。
切记,不能够分别设置,比如像下面这么设置是达不到要求的:
SetLayeredWindowAttributes(m_hWnd,
RGB(255,0,255),0,LWA_COLORKEY);
SetLayeredWindowAttributes(m_hWnd,0,(BYTE)220,LWA_ALPHA);
下面我们来实现一个半透明的tip窗口:
1. 由于我们的窗口是要实现一个tip,这个窗口是个非规则窗口,所有需要贴图来实现边框等,所有需要洋红色全透,其他部分半透的效果。在OnCreat或者OnInitDialog中使用下面的代码就可以实现了:
SetLayeredWindowAttributes(m_hWnd,RGB(255,0,255),
(BYTE)220,LWA_ALPHA|LWA_COLORKEY);
2. 然后,我们需要窗口整体半透,但是上面的文字内容等不能透明,这个问题不能解决,所有只能够在这个窗口上面再套上一个POPUP的upWindow窗口,背景刷上一种纯颜色,比如
RGB(0,255,0),然后OnCreat或者OnInitDialog用SetLayeredWindowAttributes设置窗口全透明,显示的内容都绘制在这个upWindow,这样就看起来实现了窗口半透明,但是上面的文字不透明的效果。
代码如下:
SetLayeredWindowAttributes(m_hWnd,RGB(0,255,0),0,LWA_COLORKEY);
在upWindow的OnPaint中写上如下代码:
CRect rc;
GetClientRect(&rc);
dc.FillSolidRect(rc,RGB(0,255,0);
这样就实现了我们需要的效果了。
下图就是我实现的效果:
原文链接:http://blog.csdn.net/tangaowen/article/details/6054123
本文讨论通过SetLayeredWindowAttributes来实现本文的目的。
SetLayeredWindowAttributes的实现必须将窗口设置为WS_EX_LAYERED的扩展风格。 然而,只有WS_POPUP窗口才能设置WS_EX_LAYERED的扩展风格。这就意味着只能够在POPUP的窗口中实现透明窗口,而在WS_CHILD风格的窗口中是不能够实现的。
当初我就是试了半天发现不行的。
SetLayeredWindowAttributes的原型如下:
[cpp] view
plaincopy
BOOL SetLayeredWindowAttributes( HWND hwnd,
COLORREF crKey,
BYTE bAlpha,
DWORD dwFlags
);
第一个参数就是要设置的窗口的句柄,第二个就是要设置的一个透明色,第三个是要设置的透明度,bAlpha的范围是 0-255,如果是0,那么完全透明,如果是255,是完全不透明。 第四个参数,就是设置是按照透明色来透明,还是按照bAlpha来透明。或者两个都设置。 如果 dwFlags 设置了LWA_COLORKEY,那么crKey就起作用,窗口中所有的crKey颜色区域就会全部透明,如果dwFlags设置了LWA_ALPHA,那么bAlpha就会起作用,整个窗口就会按照bAlpha的值来透明。也可以这两个一起设置来同时实现这两个效果。
比如下面的代码:
SetLayeredWindowAttributes(m_hWnd,RGB(255,0,255),
(BYTE)220,LWA_ALPHA|LWA_COLORKEY);
将会把窗口的所有的洋红色区域全透,然后剩下的区域半透明。
切记,不能够分别设置,比如像下面这么设置是达不到要求的:
SetLayeredWindowAttributes(m_hWnd,
RGB(255,0,255),0,LWA_COLORKEY);
SetLayeredWindowAttributes(m_hWnd,0,(BYTE)220,LWA_ALPHA);
下面我们来实现一个半透明的tip窗口:
1. 由于我们的窗口是要实现一个tip,这个窗口是个非规则窗口,所有需要贴图来实现边框等,所有需要洋红色全透,其他部分半透的效果。在OnCreat或者OnInitDialog中使用下面的代码就可以实现了:
SetLayeredWindowAttributes(m_hWnd,RGB(255,0,255),
(BYTE)220,LWA_ALPHA|LWA_COLORKEY);
2. 然后,我们需要窗口整体半透,但是上面的文字内容等不能透明,这个问题不能解决,所有只能够在这个窗口上面再套上一个POPUP的upWindow窗口,背景刷上一种纯颜色,比如
RGB(0,255,0),然后OnCreat或者OnInitDialog用SetLayeredWindowAttributes设置窗口全透明,显示的内容都绘制在这个upWindow,这样就看起来实现了窗口半透明,但是上面的文字不透明的效果。
代码如下:
SetLayeredWindowAttributes(m_hWnd,RGB(0,255,0),0,LWA_COLORKEY);
在upWindow的OnPaint中写上如下代码:
CRect rc;
GetClientRect(&rc);
dc.FillSolidRect(rc,RGB(0,255,0);
这样就实现了我们需要的效果了。
下图就是我实现的效果:
原文链接:http://blog.csdn.net/tangaowen/article/details/6054123
相关文章推荐
- 透明窗口(窗口上面文字图片等内容不透明)的实现
- 透明窗口(窗口上面文字图片等内容不透明)的实现(使用SetLayeredWindowAttributes API函数)
- CSS实现Div透明,而显示在上面的文字不透明,但也可看到显示在下面的图片内容
- PHP 根据文字内容添加图片上实现自动换行的小程序
- 如何实现文字加透明背景显示在一张图片的底部的效果
- 一个textview实现文字在图片上面的效果
- 在XIB 或者 SB 上面 实现 半透明的背景上添加UILabel是文字不透明
- 背景色透明,里面内容(图片、文字)不透明
- 使用分层窗口及透明png图片实现一个异形窗口
- 使用分层窗口及透明png图片实现一个异形窗口
- div+css实现图片底部透明遮罩文字标题
- 如何在网页图片上面叠加透明的文字层
- CSS实现背景透明而背景上的文字图片不透明
- js和css两种实现鼠标经过图片时显示透明框的遮罩条文字
- CSS实现背景透明/半透明效果 但内容文字不透明
- (源码实例)通过层DIV实现,当鼠标放在链接上面,显示图片及文字 - 流星絮语 JAVA学习笔记 - CSDNBlog
- Firefox实现设置图片或文字内容的透明度CSS样式
- 实现TCHART+上面画透明图片飘动效果delphi
- (源码实例)通过层DIV实现,当鼠标放在链接上面,显示图片及文字
- (源码实例)通过层DIV实现,当鼠标放在链接上面,显示图片及文字