RaUI/Source/ryControls/Controls/Win32.cs
2020-11-28 15:03:57 +08:00

946 lines
27 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Globalization;
namespace ryControls
{
/// <summary>
///
/// </summary>
public static class Win32
{
/// <summary>
///
/// </summary>
public const int MF_REMOVE = 0x1000;
/// <summary>
/// 还原
/// </summary>
public const int SC_RESTORE = 0xF120; //还原
/// <summary>
/// 移动
/// </summary>
public const int SC_MOVE = 0xF010; //移动
/// <summary>
/// 大小
/// </summary>
public const int SC_SIZE = 0xF000; //大小
/// <summary>
/// 最小化
/// </summary>
public const int SC_MINIMIZE = 0xF020; //最小化
/// <summary>
/// 最大化
/// </summary>
public const int SC_MAXIMIZE = 0xF030; //最大化
/// <summary>
/// 关闭
/// </summary>
public const int SC_CLOSE = 0xF060; //关闭
/// <summary>
///
/// </summary>
public const int WM_SYSCOMMAND = 0x0112;
/// <summary>
///
/// </summary>
public const int WM_COMMAND = 0x0111;
/// <summary>
///
/// </summary>
public const int GW_HWNDFIRST = 0;
/// <summary>
///
/// </summary>
public const int GW_HWNDLAST = 1;
/// <summary>
///
/// </summary>
public const int GW_HWNDNEXT = 2;
/// <summary>
///
/// </summary>
public const int GW_HWNDPREV = 3;
/// <summary>
///
/// </summary>
public const int GW_OWNER = 4;
/// <summary>
///
/// </summary>
public const int GW_CHILD = 5;
/// <summary>
///
/// </summary>
public const int WM_NCCALCSIZE = 0x83;
/// <summary>
///
/// </summary>
public const int WM_WINDOWPOSCHANGING = 0x46;
/// <summary>
///
/// </summary>
public const int WM_PAINT = 0xF;
/// <summary>
///
/// </summary>
public const int WM_CREATE = 0x1;
/// <summary>
///
/// </summary>
public const int WM_NCCREATE = 0x81;
/// <summary>
///
/// </summary>
public const int WM_NCPAINT = 0x85;
/// <summary>
///
/// </summary>
public const int WM_PRINT = 0x317;
/// <summary>
///
/// </summary>
public const int WM_DESTROY = 0x2;
/// <summary>
///
/// </summary>
public const int WM_SHOWWINDOW = 0x18;
/// <summary>
///
/// </summary>
public const int WM_SHARED_MENU = 0x1E2;
/// <summary>
///
/// </summary>
public const int HC_ACTION = 0;
/// <summary>
///
/// </summary>
public const int WH_CALLWNDPROC = 4;
/// <summary>
///
/// </summary>
public const int GWL_WNDPROC = -4;
/// <summary>
///
/// </summary>
public const int WS_SYSMENU = 0x80000;
/// <summary>
///
/// </summary>
public const int WS_SIZEBOX = 0x40000;
/// <summary>
///
/// </summary>
public const int WS_MAXIMIZEBOX = 0x10000;
/// <summary>
///
/// </summary>
public const int WS_MINIMIZEBOX = 0x20000;
/// <summary>
///
/// </summary>
/// <param name="hWndChild"></param>
/// <param name="hWndParent"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern int SetParent(IntPtr hWndChild, IntPtr hWndParent);
/// <summary>
///
/// </summary>
/// <param name="hWnd"></param>
/// <param name="Index"></param>
/// <param name="Value"></param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SetWindowLong(IntPtr hWnd, int Index, int Value);
/// <summary>
///
/// </summary>
/// <param name="hWnd"></param>
/// <param name="Index"></param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowLong(IntPtr hWnd, int Index);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="flag"></param>
/// <returns></returns>
[DllImport("user32")]
public static extern IntPtr GetSystemMenu(IntPtr hwnd, int flag);
/// <summary>
///
/// </summary>
/// <param name="hMenu"></param>
/// <param name="wFlags"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="nReserved"></param>
/// <param name="hwnd"></param>
/// <param name="lprc"></param>
/// <returns></returns>
[DllImport("user32")]
public static extern int TrackPopupMenu(int hMenu, int wFlags, int x, int y, int nReserved, IntPtr hwnd, int lprc);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="msg"></param>
/// <param name="wp"></param>
/// <param name="lp"></param>
/// <returns></returns>
[DllImport("user32")]
public static extern int SendMessage(IntPtr hwnd, int msg, int wp, int lp);
/// <summary>
///
/// </summary>
/// <returns></returns>
[DllImport("user32")]
public static extern int ReleaseCapture();
/// <summary>
///
/// </summary>
/// <param name="x1"></param>
/// <param name="y1"></param>
/// <param name="x2"></param>
/// <param name="y2"></param>
/// <param name="x3"></param>
/// <param name="y3"></param>
/// <returns></returns>
[DllImport("gdi32.dll")]
public static extern int CreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3, int y3);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="hRgn"></param>
/// <param name="bRedraw"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern int SetWindowRgn(IntPtr hwnd, int hRgn, Boolean bRedraw);
/// <summary>
///
/// </summary>
public const int CS_DROPSHADOW = 0x20000;
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="nIndex"></param>
/// <param name="dwNewLong"></param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SetClassLong(IntPtr hwnd, int nIndex, int dwNewLong);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="nIndex"></param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int GetClassLong(IntPtr hwnd, int nIndex);
/// <summary>
///
/// </summary>
public struct MENUINFO
{
/// <summary>
///
/// </summary>
public int cbSize;
/// <summary>
///
/// </summary>
public uint fMask;
/// <summary>
///
/// </summary>
public int dwStyle;
/// <summary>
///
/// </summary>
public int cyMax;
/// <summary>
///
/// </summary>
public int hbrBack;
/// <summary>
///
/// </summary>
public int dwContextHelpID;
/// <summary>
///
/// </summary>
public int dwMenuData;
}
/// <summary>
///
/// </summary>
/// <param name="hBitmap"></param>
/// <returns></returns>
[DllImport("gdi32")]
public static extern int CreatePatternBrush(int hBitmap);
/// <summary>
///
/// </summary>
/// <param name="hMenu"></param>
/// <param name="mi"></param>
/// <returns></returns>
[DllImport("user32")]
public static extern int SetMenuInfo(IntPtr hMenu, ref MENUINFO mi);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="nCmdShow"></param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
/// <summary>
///
/// </summary>
/// <param name="process"></param>
/// <param name="minSize"></param>
/// <param name="maxSize"></param>
/// <returns></returns>
[DllImport("kernel32.dll")]
public static extern bool SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
/// <summary>
///
/// </summary>
public const int GCW_ATOM = -32;
/// <summary>
///
/// </summary>
public const int GCL_CBCLSEXTRA = -20;
/// <summary>
///
/// </summary>
public const int GCL_CBWNDEXTRA = -18;
/// <summary>
///
/// </summary>
public const int GCL_HBRBACKGROUND = -10;
/// <summary>
///
/// </summary>
public const int GCL_HCURSOR = -12;
/// <summary>
///
/// </summary>
public const int GCL_HICON = -14;
/// <summary>
///
/// </summary>
public const int GCL_HMODULE = -16;
/// <summary>
///
/// </summary>
public const int GCL_MENUNAME = -8;
/// <summary>
///
/// </summary>
public const int GCL_STYLE = -26;
/// <summary>
///
/// </summary>
public const int GCL_WNDPROC = -24;
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="nIndex"></param>
/// <returns></returns>
[DllImport("user32", EntryPoint = "GetClassLong")]
public static extern int GetClassLong(int hwnd, int nIndex);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="nIndex"></param>
/// <param name="dwNewLong"></param>
/// <returns></returns>
[DllImport("user32", EntryPoint = "SetClassLong")]
public static extern int SetClassLong(int hwnd, int nIndex, int dwNewLong);
/// <summary>
///
/// </summary>
public const int WM_SETREDRAW = 0x000B;
/// <summary>
///
/// </summary>
public const int WM_USER = 0x400;
/// <summary>
///
/// </summary>
public const int EM_GETEVENTMASK = (WM_USER + 59);
/// <summary>
///
/// </summary>
public const int EM_SETEVENTMASK = (WM_USER + 69);
/// <summary>
///
/// </summary>
/// <param name="hWndLock"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public extern static bool LockWindowUpdate(IntPtr hWndLock);
/// <summary>
///
/// </summary>
/// <param name="handle"></param>
/// <returns></returns>
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetWindowDC(IntPtr handle);
/// <summary>
///
/// </summary>
/// <param name="handle"></param>
/// <param name="hDC"></param>
/// <returns></returns>
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr ReleaseDC(IntPtr handle, IntPtr hDC);
/// <summary>
///
/// </summary>
/// <param name="hdc"></param>
/// <returns></returns>
[DllImport("Gdi32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="className"></param>
/// <param name="maxCount"></param>
/// <returns></returns>
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetClassName(IntPtr hwnd, char[] className, int maxCount);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="uCmd"></param>
/// <returns></returns>
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetWindow(IntPtr hwnd, int uCmd);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <returns></returns>
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern bool IsWindowVisible(IntPtr hwnd);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="lpRect"></param>
/// <returns></returns>
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern int GetClientRect(IntPtr hwnd, ref RECT lpRect);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="rect"></param>
/// <returns></returns>
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern int GetClientRect(IntPtr hwnd, [In, Out] ref Rectangle rect);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="X"></param>
/// <param name="Y"></param>
/// <param name="nWidth"></param>
/// <param name="nHeight"></param>
/// <param name="bRepaint"></param>
/// <returns></returns>
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern bool MoveWindow(IntPtr hwnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <returns></returns>
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern bool UpdateWindow(IntPtr hwnd);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="rect"></param>
/// <param name="bErase"></param>
/// <returns></returns>
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern bool InvalidateRect(IntPtr hwnd, ref Rectangle rect, bool bErase);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="rect"></param>
/// <returns></returns>
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern bool ValidateRect(IntPtr hwnd, ref Rectangle rect);
/// <summary>
///
/// </summary>
/// <param name="hWnd"></param>
/// <param name="rect"></param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool GetWindowRect(IntPtr hWnd, [In, Out] ref Rectangle rect);
/// <summary>
///
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
/// <summary>
///
/// </summary>
public int Left;
/// <summary>
///
/// </summary>
public int Top;
/// <summary>
///
/// </summary>
public int Right;
/// <summary>
///
/// </summary>
public int Bottom;
}
/// <summary>
///
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct WINDOWPOS
{
/// <summary>
///
/// </summary>
public IntPtr hwnd;
/// <summary>
///
/// </summary>
public IntPtr hwndAfter;
/// <summary>
///
/// </summary>
public int x;
/// <summary>
///
/// </summary>
public int y;
/// <summary>
///
/// </summary>
public int cx;
/// <summary>
///
/// </summary>
public int cy;
/// <summary>
///
/// </summary>
public uint flags;
}
/// <summary>
///
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct NCCALCSIZE_PARAMS
{
/// <summary>
///
/// </summary>
public RECT rgc;
/// <summary>
///
/// </summary>
public WINDOWPOS wndpos;
}
/// <summary>
///
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct TagSCROLLINFO
{
/// <summary>
///
/// </summary>
public uint cbSize;
/// <summary>
///
/// </summary>
public uint fMask;
/// <summary>
///
/// </summary>
public int nMin;
/// <summary>
///
/// </summary>
public int nMax;
/// <summary>
///
/// </summary>
public uint nPage;
/// <summary>
///
/// </summary>
public int nPos;
/// <summary>
///
/// </summary>
public int nTrackPos;
}
/// <summary>
///
/// </summary>
public enum FnBar
{
/// <summary>
///
/// </summary>
SB_HORZ = 0,
/// <summary>
///
/// </summary>
SB_VERT = 1,
/// <summary>
///
/// </summary>
SB_CTL = 2
}
/// <summary>
///
/// </summary>
public enum FMask
{
/// <summary>
///
/// </summary>
SIF_ALL,
/// <summary>
///
/// </summary>
SIF_DISABLENOSCROLL = 0X0010,
/// <summary>
///
/// </summary>
SIF_PAGE = 0X0002,
/// <summary>
///
/// </summary>
SIF_POS = 0X0004,
/// <summary>
///
/// </summary>
SIF_RANGE = 0X0001,
/// <summary>
///
/// </summary>
SIF_TRACKPOS = 0X0008
}
/// <summary>
///
/// </summary>
/// <param name="lowPart"></param>
/// <param name="highPart"></param>
/// <returns></returns>
public static int MakeLong(short lowPart, short highPart)
{
return (int)(((ushort)lowPart) | (uint)(highPart << 16));
}
/// <summary>
///
/// </summary>
public const int SB_THUMBTRACK = 5;
/// <summary>
///
/// </summary>
public const int WM_HSCROLL = 0x114;
/// <summary>
///
/// </summary>
public const int WM_VSCROLL = 0x115;
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="fnBar"></param>
/// <param name="lpsi"></param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "GetScrollInfo")]
public static extern bool GetScrollInfo(IntPtr hwnd, int fnBar, ref SCROLLINFO lpsi);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <param name="fnBar"></param>
/// <param name="lpsi"></param>
/// <param name="fRedraw"></param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "SetScrollInfo")]
public static extern int SetScrollInfo(IntPtr hwnd, int fnBar, [In] ref SCROLLINFO lpsi, bool fRedraw);
/// <summary>
///
/// </summary>
/// <param name="hWnd"></param>
/// <param name="Msg"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
[DllImport("User32.dll", CharSet = CharSet.Auto, EntryPoint = "SendMessage")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
/// <summary>
///
/// </summary>
/// <param name="hWnd"></param>
/// <param name="Msg"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(IntPtr hWnd, uint Msg, long wParam, int lParam);
/// <summary>
///
/// </summary>
public struct SCROLLINFO
{
/// <summary>
///
/// </summary>
public uint cbSize;
/// <summary>
///
/// </summary>
public uint fMask;
/// <summary>
///
/// </summary>
public int nMin;
/// <summary>
///
/// </summary>
public int nMax;
/// <summary>
///
/// </summary>
public uint nPage;
/// <summary>
///
/// </summary>
public int nPos;
/// <summary>
///
/// </summary>
public int nTrackPos;
}
/// <summary>
///
/// </summary>
public enum ScrollInfoMask
{
/// <summary>
///
/// </summary>
SIF_RANGE = 0x1,
/// <summary>
///
/// </summary>
SIF_PAGE = 0x2,
/// <summary>
///
/// </summary>
SIF_POS = 0x4,
/// <summary>
///
/// </summary>
SIF_DISABLENOSCROLL = 0x8,
/// <summary>
///
/// </summary>
SIF_TRACKPOS = 0x10,
/// <summary>
///
/// </summary>
SIF_ALL = SIF_RANGE + SIF_PAGE + SIF_POS + SIF_TRACKPOS
}
/// <summary>
///
/// </summary>
public enum ScrollBarDirection
{
/// <summary>
///
/// </summary>
SB_HORZ = 0,
/// <summary>
///
/// </summary>
SB_VERT = 1,
/// <summary>
///
/// </summary>
SB_CTL = 2,
/// <summary>
///
/// </summary>
SB_BOTH = 3
}/// <summary>
///
/// </summary>
/// <param name="hWnd"></param>
/// <param name="rect"></param>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern bool GetClientRect(HandleRef hWnd, [In, Out] ref RECT rect);
/// <summary>
///
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public class SYSTEMTIME
{
/// <summary>
///
/// </summary>
public short wYear;
/// <summary>
///
/// </summary>
public short wMonth;
/// <summary>
///
/// </summary>
public short wDayOfWeek;
/// <summary>
///
/// </summary>
public short wDay;
/// <summary>
///
/// </summary>
public short wHour;
/// <summary>
///
/// </summary>
public short wMinute;
/// <summary>
///
/// </summary>
public short wSecond;
/// <summary>
///
/// </summary>
public short wMilliseconds;
/// <summary>
///
/// </summary>
/// <returns></returns>
public override string ToString()
{
return ("[SYSTEMTIME: " + this.wDay.ToString(CultureInfo.InvariantCulture) + "/" + this.wMonth.ToString(CultureInfo.InvariantCulture) + "/" + this.wYear.ToString(CultureInfo.InvariantCulture) + " " + this.wHour.ToString(CultureInfo.InvariantCulture) + ":" + this.wMinute.ToString(CultureInfo.InvariantCulture) + ":" + this.wSecond.ToString(CultureInfo.InvariantCulture) + "]");
}
}
/// <summary>
///
/// </summary>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class SYSTEMTIMEARRAY
{
/// <summary>
///
/// </summary>
public short wYear1;
/// <summary>
///
/// </summary>
public short wMonth1;
/// <summary>
///
/// </summary>
public short wDayOfWeek1;
/// <summary>
///
/// </summary>
public short wDay1;
/// <summary>
///
/// </summary>
public short wHour1;
/// <summary>
///
/// </summary>
public short wMinute1;
/// <summary>
///
/// </summary>
public short wSecond1;
/// <summary>
///
/// </summary>
public short wMilliseconds1;
/// <summary>
///
/// </summary>
public short wYear2;
/// <summary>
///
/// </summary>
public short wMonth2;
/// <summary>
///
/// </summary>
public short wDayOfWeek2;
/// <summary>
///
/// </summary>
public short wDay2;
/// <summary>
///
/// </summary>
public short wHour2;
/// <summary>
///
/// </summary>
public short wMinute2;
/// <summary>
///
/// </summary>
public short wSecond2;
/// <summary>
///
/// </summary>
public short wMilliseconds2;
}
}
}