C# 窗口透明

 

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace TransForm 
{ 
    class WinAPI 
    { 
        [DllImport("user32.dll")] 
        public extern static IntPtr GetDesktopWindow(); 

        [DllImport("user32.dll")] 
        public extern static bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags); 
        public static uint LWA_COLORKEY = 0x00000001; 
        public static uint LWA_ALPHA = 0x00000002; 

        [DllImport("user32.dll")] 
        public extern static uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong); 
        [DllImport("user32.dll")] 
        public extern static uint GetWindowLong(IntPtr hwnd, int nIndex); 

        public enum WindowStyle : int 
        { 
            GWL_EXSTYLE = -20 
        } 

        public enum ExWindowStyle : uint 
        { 
            WS_EX_LAYERED = 0x00080000 
        } 

    } 
}
DeviceForm.cs单元是API函数的调用方式:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

namespace TransForm 
{ 
    public partial class Form1 : Form 
    { 
        public Form1() 
        { 
            InitializeComponent(); 
        } 

        private void Form1_Load(object sender, EventArgs e) 
        { 
            this.SetWindowTransparent(100); 
        } 
        private void SetWindowTransparent(byte bAlpha) 
        { 
            try 
            { 
                WinAPI.SetWindowLong(this.Handle, (int)WinAPI.WindowStyle.GWL_EXSTYLE, 
                    WinAPI.GetWindowLong(this.Handle, (int)WinAPI.WindowStyle.GWL_EXSTYLE) | (uint)WinAPI.ExWindowStyle.WS_EX_LAYERED); 

                WinAPI.SetLayeredWindowAttributes(this.Handle, 0, bAlpha, WinAPI.LWA_COLORKEY | WinAPI.LWA_ALPHA); 
            } 
            catch 
            { 
            } 
        } 
        protected override CreateParams CreateParams 
        { 
            get 
            { 
                CreateParams cp = base.CreateParams; 

                cp.Parent = WinAPI.GetDesktopWindow(); 
                cp.ExStyle = 0x00000080 | 0x00000008;//WS_EX_TOOLWINDOW | WS_EX_TOPMOST 

                return cp; 
            } 
        } 
    } 
}

posted @ 2010-10-15 21:04  base  阅读(1696)  评论(3编辑  收藏  举报