Hej. Mam taki kod do tworzenia bitmapy jako formy:

class Win32
{
	public enum Bool	{
		False= 0,True	};


	[StructLayout(LayoutKind.Sequential)]
	public struct Point	{
		public Int32 x;
		public Int32 y;
		public Point(Int32 x, Int32 y) { this.x= x; this.y= y; }	}


	[StructLayout(LayoutKind.Sequential)]
	public struct Size {
		public Int32 cx;
		public Int32 cy;
		public Size(Int32 cx, Int32 cy) { this.cx= cx; this.cy= cy; }	}


	[StructLayout(LayoutKind.Sequential, Pack=1)]
	struct ARGB	{
		public byte Blue;
		public byte Green;
		public byte Red;
		public byte Alpha;	}


	[StructLayout(LayoutKind.Sequential, Pack=1)]
	public struct BLENDFUNCTION	{
		public byte BlendOp;
		public byte BlendFlags;
		public byte SourceConstantAlpha;
		public byte AlphaFormat;	}

	public const Int32 ULW_COLORKEY = 0x00000001;
	public const Int32 ULW_ALPHA    = 0x00000002;
	public const Int32 ULW_OPAQUE   = 0x00000004;

	public const byte AC_SRC_OVER  = 0x00;
	public const byte AC_SRC_ALPHA = 0x01;

	[DllImport("user32.dll", ExactSpelling=true, SetLastError=true)]
	public static extern Bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref Point pptDst, ref Size psize, IntPtr hdcSrc, ref Point pprSrc, Int32 crKey, ref BLENDFUNCTION pblend, Int32 dwFlags);
	[DllImport("user32.dll", ExactSpelling=true, SetLastError=true)]
	public static extern IntPtr GetDC(IntPtr hWnd);
	[DllImport("user32.dll", ExactSpelling=true)]
	public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
	[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
    public static extern IntPtr CreateCompatibleDC(IntPtr hDC);
	[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
	public static extern Bool DeleteDC(IntPtr hdc);
	[DllImport("gdi32.dll", ExactSpelling=true)]
	public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
	[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
	public static extern Bool DeleteObject(IntPtr hObject);
}




class PerPixelAlphaForm : Form
{
    public PerPixelAlphaForm()    {
        FormBorderStyle = FormBorderStyle.None;    }

	public void SetBitmap(Bitmap bitmap)	{
		SetBitmap(bitmap, 255);	}


	public void SetBitmap(Bitmap bitmap, byte opacity)	{
		IntPtr screenDc = Win32.GetDC(IntPtr.Zero);
		IntPtr memDc = Win32.CreateCompatibleDC(screenDc);
		IntPtr hBitmap = IntPtr.Zero;
		IntPtr oldBitmap = IntPtr.Zero;

		try {
			hBitmap = bitmap.GetHbitmap(Color.FromArgb(0)); 
			oldBitmap = Win32.SelectObject(memDc, hBitmap);
			Win32.Size size = new Win32.Size(250, 1500);
			Win32.Point pointSource = new Win32.Point(0, 0);
			Win32.Point topPos = new Win32.Point(Screen.PrimaryScreen.WorkingArea.Width-250, 0);
			Win32.BLENDFUNCTION blend = new Win32.BLENDFUNCTION();
			blend.BlendOp             = Win32.AC_SRC_OVER;
			blend.BlendFlags          = 0;
			blend.SourceConstantAlpha = opacity;
			blend.AlphaFormat         = Win32.AC_SRC_ALPHA;
			Win32.UpdateLayeredWindow(Handle, screenDc, ref topPos, ref size, memDc, ref pointSource, 0, ref blend, Win32.ULW_ALPHA);
		}
		finally {
			Win32.ReleaseDC(IntPtr.Zero, screenDc);
			if (hBitmap != IntPtr.Zero) {
				Win32.SelectObject(memDc, oldBitmap);
				Win32.DeleteObject(hBitmap);
			}
			Win32.DeleteDC(memDc);
		}	}


	protected override CreateParams CreateParams	{
		get {
			CreateParams cp = base.CreateParams;
			cp.ExStyle |= 0x00080000;
			return cp;		}	}
}

Jednak uzyskuje niechciany efekt a jest nim możliwość przesuwania tej bitmapy po ekranie. Ja tak nie chcę!