03
May
May 3, 2012 分类: ASM/C/C++     作者: hoverlees     留言: 发表

Windows上实现异形窗口有多种形式,比如SetWindowRgn方式,UpdateLayeredWindow方式,DirectX方式等,这儿要介绍的是最简单但最有效的UpdateLayeredWindow方式。

UpdateLayeredWindow可以将一个位图用alpha混合的方式更新到屏幕上,让Layered window具有半透明和异形的效果。

UpdateLayeredWindow函数定义如下:

BOOL UpdateLayeredWindow(
  HWND hwnd,             // layered窗口句柄,窗口必须有WS_EX_LAYERED样式
  HDC hdcDst,            // 屏幕DC,可以通过GetDC(NULL)取得
  POINT *pptDst,         // layered窗口要移动到的位置
  SIZE *psize,           // 设置layered窗口的大小
  HDC hdcSrc,            // 源DC,类似BitBlt的源DC
  POINT *pptSrc,         // 要画到layered窗口上的源DC上的起点
  COLORREF crKey,        // 要作为透明的颜色,这个参数针对位图很有效
  BLENDFUNCTION *pblend, // 混合模式,指定alphaFormat为AC_SRC_ALPHA,就使用alpha混合方式。
  DWORD dwFlags          // 标志使用哪种混合模式,可以是ULW_ALPHA 表示使用alpha混合,ULW_OPAQUE表示不使用alpha混合,ULW_COLORKEY表示指定的颜色为透明色。
);

其实只要这个函数调用正确,透明窗口就实现了,下面是实现的一个透明窗口示例,用的是筱筱姑娘最喜欢的阿狸作为透明窗口主角。

文章中给出类的定义说明,示例程序和源码通过这里下载


查看详细内容 »

标签: ,
快速链接
推荐标签
最新图片
较新文章
随机推荐
友情链接