using System; using System.Drawing; using System.Runtime.InteropServices; namespace WinTabControl.Win32 { internal partial class User32 { #region Struct [StructLayout(LayoutKind.Sequential)] internal struct RECT { public int left; public int top; public int right; public int bottom; public override string ToString() { return "{left=" + left.ToString() + ", " + "top=" + top.ToString() + ", " + "right=" + right.ToString() + ", " + "bottom=" + bottom.ToString() + "}"; } } [StructLayout(LayoutKind.Sequential)] internal struct BLENDFUNCTION { public byte BlendOp; public byte BlendFlags; public byte SourceConstantAlpha; public byte AlphaFormat; } #region Tab Control Notification Structures //[StructLayout(LayoutKind.Sequential)] //internal struct NMHDR //{ // public IntPtr HWND; // public uint idFrom; // public int code; // public override string ToString() // { // return String.Format("Hwnd: {0}, ControlID: {1}, Code: {2}", HWND, idFrom, code); // } //} ///// ///// From MSDN, Contains information about a key press in a tab control. It is used with the TCN_KEYDOWN notification message. This structure supersedes the TC_KEYDOWN structure. ///// //[StructLayout(LayoutKind.Sequential)] //internal struct NMTCKEYDOWN //{ // /// // /// NMHDR structure that contains information about the notification message. // /// // public NMHDR hdr; // /// // /// Virtual key code. // /// // public VirtualKeys wVKey; // /// // /// Value that is identical to the lParam parameter of the WM_KEYDOWN message. // /// // public uint flags; // public override string ToString() // { // return String.Format("NMHDR: [{0}], Key codes: [{1}], the lParam parameter of the WM_KEYDOWN: [{2}]", hdr, wVKey, flags); // } //} #endregion [StructLayout(LayoutKind.Sequential)] internal struct TCHITTESTINFO { public Point pt; public TabControlHitTest flags; public TCHITTESTINFO(TabControlHitTest hitTest) : this() { flags = hitTest; } public TCHITTESTINFO(Point point, TabControlHitTest hitTest) : this(hitTest) { pt = point; } public TCHITTESTINFO(int x, int y, TabControlHitTest hitTest) : this(hitTest) { pt = new Point(x, y); } } #endregion #region UnmanagedMethods [DllImport("gdi32")] internal static extern bool DeleteObject(IntPtr hObject); [DllImport("gdi32")] internal static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj); [DllImport("gdi32", SetLastError = true)] internal static extern IntPtr CreateCompatibleDC(IntPtr hdc); [DllImport("gdi32")] internal static extern IntPtr CreateDC( String driverName, String deviceName, String output, IntPtr lpInitData); [DllImport("gdi32")] internal static extern bool DeleteDC( IntPtr dc); [DllImport("uxtheme", ExactSpelling = true, CharSet = CharSet.Unicode)] internal static extern Int32 SetWindowTheme( IntPtr hWnd, String textSubAppName, String textSubIdList); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern IntPtr SetParent(IntPtr hwndChild, IntPtr hwndParent); /// /// The GetParent function retrieves a handle to the specified window's parent or owner. /// /// Handle to the window whose parent window handle is to be retrieved. /// If the window is a child window, the return value is a handle to the parent window. If the window is a top-level window, the return value is a handle to the owner window. If the window is a top-level unowned window or if the function fails, the return value is NULL. [DllImport("user32", CharSet = CharSet.Auto)] internal static extern IntPtr GetParent(IntPtr hwnd); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern int SendMessage( IntPtr hwnd, int wMsg, int wParam, int lParam); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern int SendMessage( IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern int SendMessage( IntPtr hwnd, int tMsg, IntPtr wParam, ref TCHITTESTINFO lParam); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern IntPtr LoadCursorFromFile(string filename); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern bool IsWindowVisible(IntPtr hwnd); /// /// The FindWindowEx function retrieves a handle to a window whose class name and window name match the specified strings. The function searches child windows, beginning with the one following the specified child window. /// /// Handle to the parent window whose child windows are to be searched. /// Handle to a child window. /// Specifies class name. /// Pointer to a null-terminated string that specifies the window name (the window's title). /// If the function succeeds, the return value is a handle to the window that has the specified class and window names.If the function fails, the return value is NULL. [DllImport("user32", CharSet = CharSet.Auto)] internal static extern IntPtr FindWindowEx( IntPtr hwndParent, IntPtr hwndChildAfter, [MarshalAs(UnmanagedType.LPTStr)] string lpszClass, [MarshalAs(UnmanagedType.LPTStr)] string lpszWindow); /// /// The InvalidateRect function adds a rectangle to the specified window's update region. /// /// Handle to window. /// Rectangle coordinates. /// Erase state. /// If the function succeeds, the return value is true.If the function fails, the return value is false. [DllImport("user32", CharSet = CharSet.Auto)] internal static extern bool InvalidateRect( IntPtr hwnd, ref Rectangle rect, bool bErase); /// /// The ValidateRect function validates the client area within a rectangle by removing the rectangle from the update region of the specified window. /// /// Handle to window. /// Validation rectangle coordinates. /// If the function succeeds, the return value is true.If the function fails, the return value is false. [DllImport("user32", CharSet = CharSet.Auto)] internal static extern bool ValidateRect( IntPtr hwnd, ref Rectangle rect); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern int GetWindowLong( IntPtr hWnd, int dwStyle); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern IntPtr GetDC( IntPtr hwnd); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern int ReleaseDC( IntPtr hwnd, IntPtr hdc); //[DllImport("user32", SetLastError = false)] //internal static extern IntPtr GetDesktopWindow(); //[DllImport("user32", CharSet = CharSet.Auto)] //internal static extern int GetScrollPos( // IntPtr hwnd, // int nBar); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern int GetClientRect( IntPtr hwnd, ref RECT rc); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern int GetClientRect( IntPtr hwnd, [In, Out] ref Rectangle rect); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern bool GetWindowRect( IntPtr hWnd, [In, Out] ref Rectangle rect); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern int GetWindowRect( IntPtr hwnd, ref RECT rc); [DllImport("user32", ExactSpelling = true, SetLastError = true)] internal 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", CharSet = CharSet.Auto)] internal static extern uint SetWindowLong( IntPtr hWnd, int nIndex, int dwNewLong); /// /// Changes the size, position, and Z order of a child, pop-up, or top-level window. /// These windows are ordered according to their appearance on the screen. /// The topmost window receives the highest rank and is the first window in the Z order. /// /// A handle to the window. /// A handle to the window to precede the positioned window in the Z order. This parameter must be a window handle or one of the following values. /* HWND_BOTTOM : 1 Places the window at the bottom of the Z order. If the hWnd parameter identifies a topmost window, the window loses its topmost status and is placed at the bottom of all other windows. HWND_NOTOPMOST : -2 Places the window above all non-topmost windows (that is, behind all topmost windows). This flag has no effect if the window is already a non-topmost window. HWND_TOP : 0 Places the window at the top of the Z order. HWND_TOPMOST : -1 Places the window above all non-topmost windows. The window maintains its topmost position even when it is deactivated. */ /// Specifies the new position of the left side of the window, in client coordinates. /// Specifies the new position of the top of the window, in client coordinates. /// Specifies the new width of the window, in pixels. /// Specifies the new height of the window, in pixels. /// Specifies the window sizing and positioning flags. This parameter can be a combination of the following values. /// If the function succeeds, the return value is nonzero, if the function fails, the return value is zero. [DllImport("user32", CharSet = CharSet.Auto)] internal static extern int SetWindowPos( IntPtr hWnd, IntPtr hWndAfter, int X, int Y, int Width, int Height, FlagsSetWindowPos flags); [DllImport("user32", CharSet = CharSet.Auto)] internal static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); #endregion } }