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 = 0×00000001;
        public static uint LWA_ALPHA = 0×00000002;
        
        [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 = 0×00080000
        }
     }
}



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 = 0×00000080 | 0×00000008;
                //WS_EX_TOOLWINDOW | WS_EX_TOPMOST
                return cp;  
            }  
        }  
    }  
}  

 

posted @ 2014-12-02 15:06  如.若  阅读(905)  评论(0编辑  收藏  举报