发烧的感觉 >>
<< 谁比较笨
Re: 请问java swing如何做出透明的窗口

Author Zhou Renjian Create@ 2004-11-21 20:55
whizz Note icon

发信人: Duke (一年了唉), 信区: Java                                                                                    
标  题: Re: 请问java swing如何做出透明的窗口??                                                                       
发信站: 日月光华 (2004年10月30日21:38:37 星期六), 站内信件                                                             

从win2000开始,windows提供了一个新的api SetLayeredWindowAttributes实现透明窗口                                          
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                                                                                                
);                                                                                                                     

Windows NT/2000/XP: Included in Windows 2000 and later.                                                                
Windows 95/98/Me: Unsupported.                                                                                         
Header: Declared in Winuser.h; include Windows.h.                                                                      
Library: Use User32.lib.                                                                                               

一些常量:                                                                                                              
WS_EX_LAYERED = 0x80000;                                                                                               
LWA_ALPHA = 0x2;                                                                                                       
LWA_COLORKEY=0x1                                                                                                       
其中dwFlags有LWA_ALPHA和LWA_COLORKEY                                                                                   
LWA_ALPHA被设置的话,通过bAlpha决定透明度.                                                                              
LWA_COLORKEY被设置的话,则指定被透明掉的颜色为crKey,其他颜色则正常显示.                                                 
注:要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性(旧sdk也没有的).                                                
                                                                                                                       
程序代码:                                                                                                             
display = new Display();                                                                                               
shell = new Shell(display , SWT.NULL);                                                                                 
shell.setMaximized(false);                                                                                             
shell.setBackground(display.getSystemColor(SWT.COLOR_BLACK));                                                          
shell.setText("Example");                                                                                              
shell.setBounds(0 , 700 , 1024 , 68);                                                                                  
                                                                                                                       
//透明窗体                                                                                                             
OS.GetWindowLong(shell.handle , OS.GWL_EXSTYLE ,                                                                       
OS.GetWindowLong(shell.handle , OS.GWL_EXSTYLE)^0x80000);                                                              
                                                                                                                       
TCHAR lpLibFileName = new TCHAR (0, "User32.dll", true);                                                               
int hInst = OS.LoadLibrary(lpLibFileName);                                                                             
if(hInst != 0) {                                                                                                       
    String name = "SetLayeredWindowAttributes\0";                                                                      
    byte[] lpProcName = new byte[name.length ()];                                                                      
    for (int i=0; i<lpProcName.length; i++) {                                                                          
        lpProcName [i] = (byte) name.charAt (i);                                                                       
    int fun = OS.GetProcAddress(hInst , lpProcName);                                                                   
    if (fun != 0) {                                                                                                    
        OS.CallWindowProc(fun , shell.handle , 0,50,1);                                                                
    }                                                                                                                  
    OS.FreeLibrary(hInst);                                                                                             
}                                                                                                                      
                                                                                                                       
 【 在 lssl (ls) 的大作中提到: 】                                                                                      
: swt怎么做                                                                                                            
: 【 在 Duke (一年了唉) 的大作中提到: 】                                                                               
: : swing做不到,用swt吧                                                                                               

                                                                                                                       
--                                                                                                                     
http://www.danasoft.com/vipersig.jpg                                                                                   
※ 来源:·日月光华 bbs.fudan.edu.cn·[FROM: 60.63.96.53]                                                               
※ 修改:·Duke 於 10月30日21:54:08 修改本文·[FROM: 60.63.96.53]                                                       

本记录所在类别:
本记录相关记录: