日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

在java程序中利用swt實現(xiàn)窗口始終最前以及透明窗口

 @IT小小鳥@ 2012-01-14
從win2000開始,windows提供了一個新的api SetLayeredWindowAttributes,可以輕松實現(xiàn)透明窗口,在網(wǎng)上有許多vb,vc,delphi的示例程序,下面我來介紹一下如何使用swt來實現(xiàn)這一效果
從win2000開始,windows提供了一個新的api SetLayeredWindowAttributes,可以輕松實現(xiàn)透明窗口,在網(wǎng)上有許多vb,vc,delphi的示例程序,下面我來介紹一下如何使用swt來實現(xiàn)這一效果:

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被設(shè)置的話,通過bAlpha決定透明度.
LWA_COLORKEY被設(shè)置的話,則指定被透明掉的顏色為crKey,其他顏色則正常顯示.
注:要使使窗體擁有透明效果,首先要有WS_EX_LAYERED擴展屬性(舊sdk也沒有的).
 
上面是該函數(shù)的資料,下面是一段代碼示例:
java代碼: 

            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.SetWindowPos(shell.handle , OS.HWND_TOPMOST, 0 , 700 , 1024 , 68 , SWT.NULL);

            //透明窗體
            OS.SetWindowLong(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 = newbyte[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);
            }

里面用到的幾個類都在org.eclipse.swt.internal.win32下

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多