首先使用透明之前必须设置该窗口为层级窗口,即增加窗口的扩展风格WS_EX_LAYERED,增加的时候最好使用GetWindowlong获取Ex风格,然后加入后在SetWindowLong设置,最好不适用ModifyStyle增加(有时候不好使,我用vs10可以,但08却不行). UpdateLayeredWindow使用之后不会再发出WM_PAINT绘制消息,所有的绘制消息都由UpdateLayeredWindow代而处理,所以不要再OnPaint里做任何事,因为是徒劳的(可能在调用Update…
LayeredWindow提供两种模式: 1.使用SetLayeredWindowAttributes去设置透明度, 完成窗口的统一透明,此时窗口仍然收到PAINT消息, 其他应用跟普通窗口一样. 2.使用UpdateLayeredWindow方法, 向系统提交包含bitmap的DC, 交由系统统一管理,此时再也收不到paint消息, 任何对窗口的改变,只能通过UpdateLayeredWindow来修改. 如果你不需要针对像素级别的不同透明,只需要使用SetLayeredWindowAttri…
前面提到,我们可以用SetWindowRgn或SetLayeredWindowAttributes实现不规则以及半透明的效果 对于SetWindowRgn,它通过一个Rgn来设置区域,这个Rgn一般可以从图片中读取,在这张图片中,将不需要显示的区域标记为一种特殊的颜色,这里有个问题,必须保证这种颜色没有被正常的区域使用,否则会被误伤.为了解决这个问题,可以考虑用两张图片,增加一张单色的掩码图,这种方案带来了额外的管理开销.SetWindowRgn的好处是效率较高,对于大部分自绘的皮肤,一般只有四…
#region UpdateLayeredWindow #region 重写窗体的 CreateParams 属性 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x00080000; // WS_EX_LAYERED 扩展样式 //无边框任务栏窗口最小化 const int WS_MINIMIZEBOX = 0x00020000; /…
http://www.pudn.com/downloads171/sourcecode/windows/detail791686.html unit Unit1; interface  uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, gdipapi, gdipobj, Menus, StdCtrls;  type   TForm1 = class(TForm)…
自绘——是的,输入框每个字都自己绘制,计算行宽,行高,模拟光标闪烁,处理输入法的各种事件,以及选中,拖动等功能. 支持支持一下,实际上无句柄的,就是多行富文本编辑比较麻烦,其他的,都不复杂.很容易实现的,楼主这个,貌似和DDUI的模式类似,有句柄,然后一个整体Render? 我没有用WM_PAINT来绘制,每个控件都理解成是一个32位位图,自己画自己的内容,最后合成时,一并Render到一张图片上面,每次就UpdateLayeredWindow这张图片.32位有透明通道,合成成为一张图以后自然就…
所需函数原型:BOOL WINAPI SetLayeredWindowAttributes(HWND hWnd,  COLORREFcrKey,  BYTE bAlpha,  DWORD flag);       参数含义:       hWnd: 所要设置的窗口句柄.       flag:    透明方式,可取两个值:LWA_COLORKEY(其值定义为0x1)和LWA_ALPHA(其值定义为0x2).可取二者的组合.       crKey: 掩码颜色,当flag取值为LWA_COLORK…
透明窗口(窗口上面文字图片等内容不透明)的实现 本文讨论通过SetLayeredWindowAttributes来实现本文的目的. SetLayeredWindowAttributes的实现必须将窗口设置为WS_EX_LAYERED的扩展风格.   然而,只有WS_POPUP窗口才能设置WS_EX_LAYERED的扩展风格.这就意味着只能够在POPUP的窗口中实现透明窗口,而在WS_CHILD风格的窗口中是不能够实现的. 当初我就是试了半天发现不行的. SetLayeredWindowAttri…
在初始化中使用下面两行代码 ModifyStyleEx(0, WS_EX_LAYERED); ::SetLayeredWindowAttributes(m_hWnd, RGB(1, 255, 0), 100, LWA_COLORKEY);       //set color transparent,指定透明的颜色 然后在OnEraseBkgnd或者OnPaint中 CRect rect; this->GetClientRect(&rect); dc.FillSolidRect(rect, R…
来源:http://stackoverflow.com/questions/5309914/updatelayeredwindow-and-drawtext 要点就是在先在memDc DrawText,然后手动设置DIB的Alpha值,最后通过AlphaBlend贴到DC. Question: I'm using UpdateLayeredWindow to display an application window. I have created my own custom buttons a…