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

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

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

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

SetLayeredWindowAttributes的原型如下:

[cpp] view plaincopy

  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

时间: 2024-08-04 15:04:25

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

窗口使用半透明图片,控件不透明的方法

最近项目软件需要制作半透明窗口,但控件不能透明.窗口和控件都是自绘的.网上大部分例子都是直接设置窗口透明度实现,这样只能让整个窗口透明,达不到我们想要的效果.经研究发现,需要使用父子两个窗口配合制作,父窗口不能在OnPaint那里自绘,而是直接GetDC得到句柄自绘背景,子窗口负责自绘控件. 关键代码:父窗口 OnInitDialog() { m_dlg.Create(m_hWnd); m_dlg.ShowWindow(SW_SHOW); m_dlg.MoveWindow(&rct); HDC

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

文字居中,文字垂直居中水平居中,图片居中,图片水平居中垂直居中,块元素垂直居中?当我们在做前端开发是时候关于css居中的问题是很常见的.情 况有很多种,不同的情况又有不同的解决方式.水平居中的方式解决的时候相对来说通过css比较容易设置,垂直居中相对比较棘手. 先来说一下水平居中的不同情况与不同解决方法吧. 1文本,图片等行内元素的水平居中方法呢比较简单.直接给父元素设置一个text-align:centent属性就可以实现元素的水平居中了. 2 确定宽度的块级元素水平居中怎么设置呢?设置方法也

CSS实现背景透明而背景上的文字图片不透明

1.用图片则能兼容IE8和IE7 2.用颜色则不能兼容IE8和IE7,并且颜色层不能随着内容层自增长,只能设置一个固定高度 3.用颜色则颜色层不能包含内容层(图片和文字) 1 <!-- wrap最外层设置position:relative --> 2 <div class="wrap"> 3 <!-- bg为背景透明层 --> 4 <div class="bg"></div> 5 <!-- conte

视频通讯中文字图片设置的解决方案

在前面发布的"AnyChat发布单向视频解决方案"中,一些应用场景需要在Web的视频上迭加文字.图片等内容来提高用户体验,AnyChat研发团队针对这种需求开放了新的API接口来实现,在AnyChatr4479版本中提供了相关的API接口. 新增API接口功能特点包括: 1.可以在视频上动态迭加文字信息,文字颜色.字体.大小.迭加位置可设置: 2.可以同时迭加不超过5条的文字信息到视频上: 3.可以动态更新文字信息迭加位置,实现文字信息的运动效果: 4.可以在视频上动态迭加图片信息,图

iOS.TextKit.02.文字图片混合排版

1.案例如图 2.代码 TextKit02ViewController.h #import <UIKit/UIKit.h> @interface TextKit02ViewController : UIViewController @property (nonatomic,strong) IBOutlet UITextView *textView; @property (nonatomic,weak) IBOutlet UIImageView *imageView; // 文本可以排版的区域

c# post文字图片至服务器

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/41764521 最近由于项目需要实现c#提交文字及数据至服务器,因此研究了一下c# php数据传送: 下面用一个示例来演示,c# post文字+图片 ,php端接收: post提交数据核心代码(post数据提交) using System; using System.Collections.Generic; using System.Linq; using System.Tex

button 文字图片上下/左右经常会用到,记录一下

上下:    self.button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;//使图片和文字水平居中显示    [self.button setTitleEdgeInsets:UIEdgeInsetsMake(self.button.imageView.frame.size.height+10 ,-self.button.imageView.frame.size.width, 0.0,0.0)

Python PIL创建文字图片

PIL库中包含了很多模块,恰当地利用这些模块可以做许多图像处理方面的工作. 下面是我用来生成字母或字符串测试图片而写的类及测试代码. 主要用到的模块: PIL.Image,PIL.ImageDraw,PIL.ImageFont PIL.Image用来生成一个空的图片,ImageDraw用来在空图片上画图及写字符,ImageFont则是创建需要使用到的字体 #-*- coding:gb2312 -*- from PIL import Image,ImageDraw,ImageFont,ImageO

php生成文字图片效果

php生成文字图片效果最近看到php的GD功能,试着做了一个基本生成文字图片效果的代码: 显示文字图片页面:demo.php<?php$str = $_REQUEST['str'] ? $_REQUEST['str']:"暂无输入";//$str = "中华人民共和国";$im = imagecreate(200,200);$white = imagecolorallocate($im,0xFF,0xFF,0xFF);imagecolortransparent