Windows层窗口的使用.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows层窗口的使用

Windows 层窗口的使用 windows从windows2000开始,提供了一种叫做layered的窗口风格,通过使用这种窗口风格,我们就可以创建透明的窗口或者半透明的窗口,在这里我将使用一个比较简单的例子来说明如何使用这种新的窗口风格。 首先我们说明一下windows api对层窗口的支持情况。在创建窗口的时候可以直接使用createwindowex来创建层窗口,或者在创建了普通的窗口之后使用setwindowlong()来修改已有的窗口的风格. windows层窗口的窗口风格是ws_ex_layered,创建了层窗口的同时,你也就创建了透明窗口, 因为层窗口会同时设置透明窗口的风格。 在我们创建了层窗口之后,我们可以调用api setlayeredwindowattributes()来设置层窗口的属性,这个api函数的原型是这样的 bool setlayeredwindowattributes( hwnd hwnd, // handle to the layered window colorref crkey, // specifies the color key byte balpha, // value for the blend function dword dwflags // action ); 这个函数的主要功能就是设置层窗口的缺省的属性,第一个参数hwnd就是我们要设置的层窗口的句柄,第二个参数crkey是我们要指定的一个色彩的关键值,这个值在第4个参数设置为lwa_colorkey的时候有效,这个参数的主要目的是过滤掉这里指定的颜色,比如我们在这里把这个颜色设置成白色,那么当我们向窗口上画白色的时候, 所有的白色都会被滤掉,这样画白色的地方就变得透明了。第3个参数balpha是我们指定的用来设置blend功能的,这个参数在第4个参数设置成lwa_alpha的时候有效。如果设置了这个参数, 我们就可以创造一种半透明的窗口效果。 在使用colorkey方式的时候,我们可以得到一种透明的窗口,而且在这种情况下,所有透明的地方,都不会接受鼠标消息,鼠标消息都会被直接发送到层窗口下面的窗口上。 关于层窗口另一个比较重要的api是updatelayeredwindow(),这个函数的原型如下: bool updatelayeredwindow( hwnd hwnd, // handle to layered window hdc hdcdst, // handle to screen dc point *pptdst, // new screen position size *psize, // new size of the layered window hdc hdcsrc, // handle to surface dc point *pptsrc, // layer position colorref crkey, // color key blendfunction *pblend, // blend function dword dwflags // options ); 这个函数看起来好像参数很多,其实和bitblt函数差不多,不过它是用在层窗口上,其中的crkey和setlayeredwindowattributes中的crkey是一样的,pblend是一个结构,其中的内容也是很简单,这里不作介绍了 colorkey和alpha方式同时只能有一个有效,所以dwflags就是用来决定这个的,和setlayeredwindowattributes不一样的是这个参数有三个选项可以使用ulw_alpha,ulw_colorkey,ulw_opaque,前两个的作用和setlayeredwindowattributes一样,第三个就是指定这个窗口不透明。 setlayeredwindowattributes和updatelayeredwindow的另一个不同是setlayeredwindowattributes是在窗口创建之后调用一次就可以了,而updatelayeredwindow是用来处理windows的paint事件的。 在本文这个例子里我创建了一个时钟程序,这个程序除了表盘上的刻度和3个指针之外其他的地方都是透明的,而且一般情况下不会影响到你正常的应用操作。这个例子使用了atl, 另外需要支持windows2000的sdk才能编译过去。 #define

您可能关注的文档

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档