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 } }