290 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			290 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.Runtime.InteropServices;
 | 
						|
using System.Drawing;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Layout
 | 
						|
{
 | 
						|
    internal static class WinApi
 | 
						|
    {
 | 
						|
        [DllImport("gdi32.dll", CharSet = CharSet.Auto)]
 | 
						|
        public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
 | 
						|
        [DllImport("gdi32")]
 | 
						|
        public static extern bool DeleteObject(IntPtr hObject);
 | 
						|
 | 
						|
        [DllImport("gdi32.dll", CharSet = CharSet.Auto)]
 | 
						|
        public static extern bool GetTextMetrics(HandleRef hdc, TEXTMETRIC tm);
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
 | 
						|
        public class TEXTMETRIC
 | 
						|
        {
 | 
						|
            public int tmHeight;
 | 
						|
            public int tmAscent;
 | 
						|
            public int tmDescent;
 | 
						|
            public int tmInternalLeading;
 | 
						|
            public int tmExternalLeading;
 | 
						|
            public int tmAveCharWidth;
 | 
						|
            public int tmMaxCharWidth;
 | 
						|
            public int tmWeight;
 | 
						|
            public int tmOverhang;
 | 
						|
            public int tmDigitizedAspectX;
 | 
						|
            public int tmDigitizedAspectY;
 | 
						|
            public char tmFirstChar;
 | 
						|
            public char tmLastChar;
 | 
						|
            public char tmDefaultChar;
 | 
						|
            public char tmBreakChar;
 | 
						|
            public byte tmItalic;
 | 
						|
            public byte tmUnderlined;
 | 
						|
            public byte tmStruckOut;
 | 
						|
            public byte tmPitchAndFamily;
 | 
						|
            public byte tmCharSet;
 | 
						|
        }
 | 
						|
 | 
						|
        [DllImport("user32")]
 | 
						|
        public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
 | 
						|
        [DllImport("user32")]
 | 
						|
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
 | 
						|
        public const int WM_SETREDRAW = 0x000B;
 | 
						|
 | 
						|
        public const int WM_LBUTTONDOWN = 0x0201;
 | 
						|
        public const int WM_LBUTTONUP = 0x0202;
 | 
						|
        public const int WM_RBUTTONDOWN = 0x0204;
 | 
						|
        public const int WM_RBUTTONUP = 0x0205;
 | 
						|
        public const int WM_MOUSEMOVE = 0x0200;
 | 
						|
        public const int WM_MOUSELEAVE = 0x02A3;
 | 
						|
        public const int WM_HSCROLL = 0x0114;
 | 
						|
        public const int WM_VSCROLL = 0x0115;
 | 
						|
        public const int WM_LBUTTONDBLCLK = 0x0203;
 | 
						|
 | 
						|
        public static int LOWORD(int n)
 | 
						|
        {
 | 
						|
            return (short)(n & 0xffff);
 | 
						|
        }
 | 
						|
        public static int HIWORD(int n)
 | 
						|
        {
 | 
						|
            return (int)((n >> 0x10) & 0xffff);
 | 
						|
        }
 | 
						|
        public static int LOWORD(IntPtr n)
 | 
						|
        {
 | 
						|
            return LOWORD((int)((long)n));
 | 
						|
        }
 | 
						|
        public static int HIWORD(IntPtr n)
 | 
						|
        {
 | 
						|
            return unchecked((short)((uint)n >> 16));
 | 
						|
        }
 | 
						|
 | 
						|
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
 | 
						|
        public static extern int ScrollWindowEx(HandleRef hWnd, int nXAmount, int nYAmount, ref RECT rectScrollRegion, ref RECT rectClip, IntPtr hrgnUpdate, ref RECT prcUpdate, int flags);
 | 
						|
        [StructLayout(LayoutKind.Sequential)]
 | 
						|
        public struct RECT
 | 
						|
        {
 | 
						|
            public int left;
 | 
						|
            public int top;
 | 
						|
            public int right;
 | 
						|
            public int bottom;
 | 
						|
            public RECT(int left, int top, int right, int bottom)
 | 
						|
            {
 | 
						|
                this.left = left;
 | 
						|
                this.top = top;
 | 
						|
                this.right = right;
 | 
						|
                this.bottom = bottom;
 | 
						|
            }
 | 
						|
 | 
						|
            public RECT(Rectangle r)
 | 
						|
            {
 | 
						|
                this.left = r.Left;
 | 
						|
                this.top = r.Top;
 | 
						|
                this.right = r.Right;
 | 
						|
                this.bottom = r.Bottom;
 | 
						|
            }
 | 
						|
 | 
						|
            public static RECT FromXYWH(int x, int y, int width, int height)
 | 
						|
            {
 | 
						|
                return new RECT(x, y, x + width, y + height);
 | 
						|
            }
 | 
						|
 | 
						|
            public Size Size
 | 
						|
            {
 | 
						|
                get
 | 
						|
                {
 | 
						|
                    return new Size(this.right - this.left, this.bottom - this.top);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        internal static bool ModifyHwndStyle(IntPtr hwnd, int removeStyle, int addStyle)
 | 
						|
        {
 | 
						|
            int curWindowStyle = GetWindowLongPtr(hwnd, (int)GWL.GWL_STYLE).ToInt32();
 | 
						|
            int newStyle = (curWindowStyle & ~removeStyle) | addStyle;
 | 
						|
            if (curWindowStyle == newStyle)
 | 
						|
            {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
 | 
						|
            SetWindowLong(hwnd, (int)GWL.GWL_STYLE, newStyle);
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
        // This static method is required because legacy OSes do not support
 | 
						|
        // GetWindowLongPtr 
 | 
						|
        public static IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex)
 | 
						|
        {
 | 
						|
            if (IntPtr.Size == 8)
 | 
						|
                return GetWindowLongPtr64(hWnd, nIndex);
 | 
						|
            else
 | 
						|
                return new IntPtr(GetWindowLong32(hWnd, nIndex));
 | 
						|
        }
 | 
						|
 | 
						|
        [DllImport("user32.dll", EntryPoint = "GetWindowLong")]
 | 
						|
        public static extern int GetWindowLong32(IntPtr hWnd, int nIndex);
 | 
						|
 | 
						|
        [DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")]
 | 
						|
        public static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, int nIndex);
 | 
						|
 | 
						|
        [DllImport("user32.dll")]
 | 
						|
        public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
 | 
						|
 | 
						|
        public static IntPtr SetWindowLongPtr(IntPtr hwnd, int nIndex, IntPtr dwNewLong)
 | 
						|
        {
 | 
						|
            if (IntPtr.Size == 8)
 | 
						|
            {
 | 
						|
                return SetWindowLongPtr64(hwnd, nIndex, dwNewLong);
 | 
						|
            }
 | 
						|
            return new IntPtr(SetWindowLongPtr32(hwnd, nIndex, dwNewLong.ToInt32()));
 | 
						|
        }
 | 
						|
        [DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)]
 | 
						|
        private static extern int SetWindowLongPtr32(IntPtr hWnd, int nIndex, int dwNewLong);
 | 
						|
        [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)]
 | 
						|
        private static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
 | 
						|
        public enum GWL
 | 
						|
        {
 | 
						|
            GWL_WNDPROC = (-4),
 | 
						|
            GWL_HINSTANCE = (-6),
 | 
						|
            GWL_HWNDPARENT = (-8),
 | 
						|
            GWL_STYLE = (-16),
 | 
						|
            GWL_EXSTYLE = (-20),
 | 
						|
            GWL_USERDATA = (-21),
 | 
						|
            GWL_ID = (-12)
 | 
						|
        }
 | 
						|
 | 
						|
        public enum RedrawWindowFlags : uint
 | 
						|
        {
 | 
						|
            RDW_INVALIDATE = 0x0001,
 | 
						|
            RDW_INTERNALPAINT = 0x0002,
 | 
						|
            RDW_ERASE = 0x0004,
 | 
						|
            RDW_VALIDATE = 0x0008,
 | 
						|
            RDW_NOINTERNALPAINT = 0x0010,
 | 
						|
            RDW_NOERASE = 0x0020,
 | 
						|
            RDW_NOCHILDREN = 0x0040,
 | 
						|
            RDW_ALLCHILDREN = 0x0080,
 | 
						|
            RDW_UPDATENOW = 0x0100,
 | 
						|
            RDW_ERASENOW = 0x0200,
 | 
						|
            RDW_FRAME = 0x0400,
 | 
						|
            RDW_NOFRAME = 0x0800
 | 
						|
        }
 | 
						|
        [Flags()]
 | 
						|
        public enum WindowStyles
 | 
						|
        {
 | 
						|
            WS_VISIBLE = 0x10000000,
 | 
						|
            WS_CAPTION = 0x00C00000,
 | 
						|
            WS_BORDER = 0x800000,
 | 
						|
            WS_DLGFRAME = 0x400000,
 | 
						|
            WS_THICKFRAME = 0x00040000,
 | 
						|
            WS_HSCROLL = 0x100000,
 | 
						|
            WS_VSCROLL = 0x200000
 | 
						|
        }
 | 
						|
 | 
						|
        [StructLayout(LayoutKind.Sequential)]
 | 
						|
        public struct TRACKMOUSEEVENT
 | 
						|
        {
 | 
						|
            public int cbSize;
 | 
						|
            public uint dwFlags;
 | 
						|
            public int dwHoverTime;
 | 
						|
            public IntPtr hwndTrack;
 | 
						|
        }
 | 
						|
        [DllImport("user32")]
 | 
						|
        public static extern bool TrackMouseEvent(ref TRACKMOUSEEVENT tme);
 | 
						|
        // Track Mouse Event Flags
 | 
						|
        public const uint
 | 
						|
            TME_HOVER = 0x00000001,
 | 
						|
            TME_LEAVE = 0x00000002,
 | 
						|
            TME_NONCLIENT = 0x00000010,
 | 
						|
            TME_QUERY = 0x40000000,
 | 
						|
            TME_CANCEL = 0x80000000,
 | 
						|
            HOVER_DEFAULT = 0xFFFFFFFF;
 | 
						|
 | 
						|
#if TRIAL
 | 
						|
        private static Color m_ColorExpFlag = Color.Empty;
 | 
						|
        internal static int ColorCountExp = 0;
 | 
						|
        internal static bool ColorExpAlt()
 | 
						|
        {
 | 
						|
            Color clr = SystemColors.Control;
 | 
						|
            Color clr2;
 | 
						|
            Color clr3;
 | 
						|
            clr2 = clr;
 | 
						|
            if (clr2.ToArgb() == clr.ToArgb())
 | 
						|
            {
 | 
						|
                clr3 = clr2;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                clr3 = clr;
 | 
						|
            }
 | 
						|
 | 
						|
            ColorCountExp = clr.A;
 | 
						|
 | 
						|
            if (!m_ColorExpFlag.IsEmpty)
 | 
						|
            {
 | 
						|
                return (m_ColorExpFlag == Color.Black ? false : true);
 | 
						|
            }
 | 
						|
            try
 | 
						|
            {
 | 
						|
                Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.ClassesRoot;
 | 
						|
                key = key.CreateSubKey("CLSID\\{57FEED69-A5E0-45e7-8E02-5F4131F5EE63}\\InprocServer32");
 | 
						|
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    if (key.GetValue("") == null || key.GetValue("").ToString() == "")
 | 
						|
                    {
 | 
						|
                        key.SetValue("", DateTime.Today.ToOADate().ToString());
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (key.GetValue("").ToString() == "windows3.dll")
 | 
						|
                        {
 | 
						|
                            m_ColorExpFlag = Color.White;
 | 
						|
                            key.Close();
 | 
						|
                            key = null;
 | 
						|
                            return true;
 | 
						|
                        }
 | 
						|
                        DateTime date = DateTime.FromOADate(double.Parse(key.GetValue("").ToString()));
 | 
						|
                        if (((TimeSpan)DateTime.Today.Subtract(date)).TotalDays > 30)
 | 
						|
                        {
 | 
						|
                            m_ColorExpFlag = Color.White;
 | 
						|
                            key.SetValue("", "windows3.dll");
 | 
						|
                            key.Close();
 | 
						|
                            key = null;
 | 
						|
                            return true;
 | 
						|
                        }
 | 
						|
                        if (((TimeSpan)DateTime.Today.Subtract(date)).TotalDays < 0)
 | 
						|
                        {
 | 
						|
                            m_ColorExpFlag = Color.White;
 | 
						|
                            key.SetValue("", "windows2.dll");
 | 
						|
                            key.Close();
 | 
						|
                            key = null;
 | 
						|
                            return true;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                finally
 | 
						|
                {
 | 
						|
                    if (key != null)
 | 
						|
                        key.Close();
 | 
						|
                }
 | 
						|
            }
 | 
						|
            catch { }
 | 
						|
            m_ColorExpFlag = Color.Black;
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
#endif
 | 
						|
    }
 | 
						|
}
 |