随笔 - 7  文章 - 27  trackbacks - 0
<2010年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿

随笔档案(7)

搜索

  •  

最新评论

阅读排行榜

评论排行榜

            本来是写在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 乔宁博 阅读(7510) 评论(3)  编辑 收藏 引用

FeedBack:
# re: 创建win32透明窗体 2010-01-31 05:24 Goteet
估计是你的wndproc里用到了需要初始化的资源,而初始化工作没有做好而已  回复  更多评论
  
# re: 创建win32透明窗体 2010-01-31 22:03 流光
感觉不会啊,同样的程序在vista下运行就没问题,在XP下就会内存出错,需要修改这个API的调用和资源初始化的顺序才可以,还没有debug分析出到底为什么会这样@Goteet
  回复  更多评论
  
# re: 创建win32透明窗体 2010-05-22 16:24 
网上搜索,都就这一个方法,拷贝来拷贝去,没一点创意  回复  更多评论
  
# re: 创建win32透明窗体 2010-05-27 16:52 流光
你找到新方法了,发出来大家学习学习@啊
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理