Если вам нужно решение pInvoke (я вижу IntPtr
, NCHITTEST
et c. В вашем текущем коде), вы можете попробовать сообщение WM_GETMINMAXINFO . Сначала мы хотим MINMAXINFO
и POINT
struct
s:
using System.Runtime.InteropServices;
...
[StructLayout(LayoutKind.Sequential)]
internal struct POINT {
public int X;
public int Y;
public POINT(int x, int y) {
X = x;
Y = y;
}
}
[StructLayout(LayoutKind.Sequential)]
internal struct MINMAXINFO {
public POINT ptReserved;
public POINT ptMaxSize;
public POINT ptMaxPosition;
public POINT ptMinTrackSize;
public POINT ptMaxTrackSize;
}
Затем
protected override void WndProc(ref Message m) {
...
switch (m.Msg) {
...
case 0x0024: { // WM_GETMINMAXINFO
MINMAXINFO info = Marshal.PtrToStructure<MINMAXINFO>(m.LParam);
info.ptMinTrackSize = new POINT(
Math.Max(200, info.ptMinTrackSize.X), // smallest X (width)
Math.Max(100, info.ptMinTrackSize.Y)); // smallest Y (height)
Marshal.StructureToPtr(info, m.LParam, true);
break;
}
...
}