本来是写在CSDN上的,现在转一下过来。
创建一个透明窗体,一种方法是设置windows下窗体的一个扩展窗口风格,在WINNT及以后,Windows开始支持用来创建透明窗体的一个API函数,先看一个效果图:
这一个GDI绘图的数字时钟的窗口。实现了窗口的半透明效果。实现方法如下:
1#define _WIN32_WINNT 0x5000 //定义WINNT的宏
2//
3hwnd = CreateWindow(szAppName,TEXT("Noble Qiao~"),
4 WS_POPUP | WS_SYSMENU | WS_VISIBLE ,
5 ::GetSystemMetrics(SM_CXSCREEN)/2,
6 ::GetSystemMetrics(SM_CYSCREEN)/2,
7 160,45,
8 NULL,NULL,hInstance,NULL);
9//
10::SetWindowLong(hwnd,GWL_EXSTYLE,GetWindowLong(hwnd,GWL_EXSTYLE)|WS_EX_LAYERED);
11SetLayeredWindowAttributes(hwnd,0,(255*70)/150,LWA_ALPHA);
SetLayeredWindowAttributes(hwnd,0,(255*70)/150,LWA_ALPHA);设置了窗体的属性,为透明效果,其中第二个参数为alpha值,即透明度。
另外,我在使用一个游戏引擎HGE做应用时,发现了关于这个API函数的一个问题,我把这个函数的调用放在初始化一些用于渲染场景的指针变量之前时,在 winxp下运行就会运行出错,而在 Vista 下完全正常。
我猜想在XP下,这个函数被调用后,直接调用wndproc,此时如果游戏资源(如纹理)没有被初始化,就会出错;而在Vista中没有这个问题,可能是Microsoft对这个API函数做了一定修改。
posted on 2010-01-28 22:41
乔宁博 阅读(7487)
评论(3) 编辑 收藏 引用