using System;

using System.Drawing;

using System.Runtime.InteropServices;

using System.Diagnostics.CodeAnalysis;

using WeifenLuo.WinFormsUI.Docking.Win32;



namespace WeifenLuo.WinFormsUI.Docking

{

    internal static class NativeMethods

    {

		[DllImport("User32.dll", CharSet=CharSet.Auto)]

        [return: MarshalAs(UnmanagedType.Bool)]

		public static extern bool DragDetect(IntPtr hWnd, Point pt);



        [DllImport("User32.dll", CharSet=CharSet.Auto)]

        public static extern IntPtr GetFocus();



        [DllImport("User32.dll", CharSet=CharSet.Auto)]

        public static extern IntPtr SetFocus(IntPtr hWnd);



        [DllImport("User32.dll", CharSet=CharSet.Auto)]

        [return: MarshalAs(UnmanagedType.Bool)]

        public static extern bool PostMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam);



        [DllImport("User32.dll", CharSet=CharSet.Auto)]

        public static extern uint SendMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam);



        [DllImport("User32.dll", CharSet=CharSet.Auto)]

        public static extern int ShowWindow(IntPtr hWnd, short cmdShow);



        [DllImport("User32.dll", CharSet=CharSet.Auto)]

        public static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndAfter, int X, int Y, int Width, int Height, FlagsSetWindowPos flags);



		[DllImport("user32.dll", CharSet = CharSet.Auto)]

		public static extern int GetWindowLong(IntPtr hWnd, int Index);



		[DllImport("user32.dll", CharSet = CharSet.Auto)]

		public static extern int SetWindowLong(IntPtr hWnd, int Index, int Value);



		[DllImport("user32.dll", CharSet=CharSet.Auto)]

		public static extern int ShowScrollBar(IntPtr hWnd, int wBar, int bShow);



		[DllImport("user32.dll", CharSet=CharSet.Auto)]

        //*********************************

        // FxCop bug, suppress the message

        //*********************************

        [SuppressMessage("Microsoft.Portability", "CA1901:PInvokeDeclarationsShouldBePortable", MessageId = "0")]

		public static extern IntPtr WindowFromPoint(Point point);



        [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]

        public static extern int GetCurrentThreadId();



        public delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam);



        [DllImport("user32.dll")]

        public static extern IntPtr SetWindowsHookEx(Win32.HookType code, HookProc func, IntPtr hInstance, int threadID);



        [DllImport("user32.dll")]

        public static extern int UnhookWindowsHookEx(IntPtr hhook);



        [DllImport("user32.dll")]

        public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wParam, IntPtr lParam);

	}

}