透明窗口(窗口上面文字图片等内容不透明)的实现

本文讨论通过SetLayeredWindowAttributes来实现本文的目的。

SetLayeredWindowAttributes的实现必须将窗口设置为WS_EX_LAYERED的扩展风格。   然而,只有WS_POPUP窗口才能设置WS_EX_LAYERED的扩展风格。这就意味着只能够在POPUP的窗口中实现透明窗口,而在WS_CHILD风格的窗口中是不能够实现的。

当初我就是试了半天发现不行的。

SetLayeredWindowAttributes的原型如下:

  1. BOOL SetLayeredWindowAttributes(          HWND hwnd,
  2. COLORREF crKey,
  3. BYTE bAlpha,
  4. DWORD dwFlags
  5. );

第一个参数就是要设置的窗口的句柄,第二个就是要设置的一个透明色,第三个是要设置的透明度,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

http://blog.csdn.net/huasonl88/article/details/8697768

---------------------------------------------------------------------------------

::SetWindowLong(this->Handle , GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_LAYERED);
::SetLayeredWindowAttributes(this->Handle, 0, 100, LWA_ALPHA);

mcool就是这效果,已开源
http://mcool.appinn.me/

http://bbs.2ccc.com/topic.asp?topicid=307386

透明窗口(窗口上面文字图片等内容不透明)的实现(使用SetLayeredWindowAttributes API函数)的更多相关文章

  1. 设置windows窗口半透明(使用SetLayeredWindowAttributes API函数)

    所需函数原型:BOOL WINAPI SetLayeredWindowAttributes(HWND hWnd,  COLORREFcrKey,  BYTE bAlpha,  DWORD flag); ...

  2. css 背景透明文字(内容)不透明三种实现方法

    好久没写博客了.以前还想着最少一个月抽空写几篇.结果没做到O(∩_∩)O~~.好吧.现在努力,继续坚持. 看着以前写的东西,感觉自己在逐渐成长. 先上图: 本文主要记录如上图一样的.文字或内容不透明, ...

  3. <转载>使CSS文字图片div元素居中方法之水平居中的几个方法

    文字居中,文字垂直居中水平居中,图片居中,图片水平居中垂直居中,块元素垂直居中?当我们在做前端开发是时候关于css居中的问题是很常见的.情 况有很多种,不同的情况又有不同的解决方式.水平居中的方式解决 ...

  4. jquery文字上下滚动--单行 批量多行 文字图片上下翻滚 | 多行滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. PHP 实现微信小程序敏感图片、内容检测接口

    主要是为了调用微信小程序msgSecCheck.imgSecCheck接口. 先附上小程序接口说明文档地址:https://developers.weixin.qq.com/miniprogram/d ...

  6. navigation和tabbar上的文字.图片 自定义

    [[UITabBarItem appearance] setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor blackColor] ...

  7. java生成竖排文字图片

    package com.kadang.designer.web.action;import java.awt.Color;import java.awt.Font;import java.awt.Fo ...

  8. java分别通过httpclient和HttpURLConnection获取图片验证码内容

    前面的文章,介绍了如何通过selenium+Tesseract-OCR来识别图片验证码,如果用接口来访问的话,再用selenium就闲的笨重,下面就介绍一下分别通过httpclient和HttpURL ...

  9. 40 个顶级 jQuery 图片、内容滑块和幻灯片(转)

    在这个快速发展的网络世界中,我们使用图片.内容滑块和幻灯片来给网站实现良好.有吸引力的外观.你可以吸引浏览者借助图像滑块让网站更加具有活力.使用 JavaScript 可以轻松实现轻量级的图片和内容滑 ...

随机推荐

  1. C++中的操作符重载

    一.什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”.说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载.运算符重载和函数重载的不同之处在于操作符重载 ...

  2. 关于height:100%两三事

    对于CSS的height:100%,顾名思义,该元素的高度自动填充为其父元素的高度.但该样式有时候会不起作用,Mark down 一下.>< 首先,看一下以下CSS代码: div { he ...

  3. CC++初学者编程教程(5) 安装codeblocks软件开发环境

    Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境. Code::Blocks是开放源码软件.Code::Blocks由纯粹的C++语言开发完成,它使用了蓍名的图形界面库w ...

  4. paip.QQ音乐导出歌单总结

    paip.QQ音乐导出歌单总结 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/attilax ...

  5. oracle数据库导出并重新导入

    斌斌 (给我写信) 原创博文(http://blog.csdn.net/binbinxyz),转载请注明出处! 一.导出数据库 1.将数据库TEST完全导出,用户名scott密码tiger,导出到D: ...

  6. Android读写JSON格式的数据之JsonWriter和JsonReader

    近期的好几个月都没有搞Android编程了,逐渐的都忘却了一些东西.近期打算找一份Android的工作,要继续拾起曾经的东西.公司月初搬家之后就一直没有网络,直到今日公司才有网络接入,各部门才開始办公 ...

  7. 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后 ...

  8. 【Andord真】SlideMenu+ViewPagerIndictor双滑动边栏+滑动导航条

    采取SlideMenu达到的效果侧边栏: 间 setContentView是设置主背景的布局 setBehindContentView是设置左边菜单的布局 setSecondaryMenu是设置右边的 ...

  9. [ACM] hdu 1003 Max Sum(最大子段和模型)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  10. Dell 2950服务器CPU-E1422错误解决方法

    .造成原因:CPU松动或者是硅胶损耗 .解决方法: .断掉电源,将其后盖打开(在手没有静电的情况下操作) .拔掉周围的排热扇 .按住关卡,将其CPU卸下:并使用清洁剂清理,再次给CPU上涂上硅胶(均匀 ...