C# 自定义WndProc不';不要停止调整大小

C# 自定义WndProc不';不要停止调整大小,c#,winforms,resize,wndproc,C#,Winforms,Resize,Wndproc,我制作了一个表单来处理WM_CREATE、WM_ACTIVATE、WM_NCCALCSIZE和WM_NCHITTEST。它还覆盖“绘制”方法 问题是当我调整窗体大小时,它不会停止调整大小。我试图将消息与工作窗口进行比较,但spy++不断崩溃。 这是我的WndProc代码: 受保护的覆盖无效WndProc(参考消息m) { IntPtr结果=IntPtr.0; bool callDWP=!Win32Interop.DwmDefWindowProc(m.HWnd、m.Msg、m.WParam、m.L

我制作了一个表单来处理WM_CREATE、WM_ACTIVATE、WM_NCCALCSIZE和WM_NCHITTEST。它还覆盖“绘制”方法

问题是当我调整窗体大小时,它不会停止调整大小。我试图将消息与工作窗口进行比较,但spy++不断崩溃。 这是我的WndProc代码:

受保护的覆盖无效WndProc(参考消息m)
{
IntPtr结果=IntPtr.0;
bool callDWP=!Win32Interop.DwmDefWindowProc(m.HWnd、m.Msg、m.WParam、m.LParam、out result);
开关(m.Msg)
{
案例Win32Messages.WM\u创建:
{
int style=Win32Interop.GetWindowLong(m.HWnd,Win32Constants.GWL_样式);
int styleEx=Win32Interop.GetWindowLong(m.HWnd,Win32Constants.GWL_EXSTYLE);
Win32Interop.AdjustWindowRectEx(out-RECT-rc,style,false,stylex);
}
打破
案例Win32Messages.WM_激活:
{
保证金=新保证金
{
cxLeftWidth=Math.Abs(BorderLeft),
cxRightWidth=Math.Abs(BorderRight),
cyBottomHeight=Math.Abs(BorderBottom),
cytoHeight=Math.Abs(BorderTop)
};
int hr=Win32Interop.dwmextendframeintoclienterea(m.HWnd,参考页边距);
结果=IntPtr.0;
}
打破
案例Win32Messages.WM\u NCCALCSIZE:
{
如果(m.WParam!=IntPtr.Zero)
{
结果=IntPtr.0;
callDWP=false;
}
}
打破
案例Win32Messages.WM\u NCHITTEST:
{
{
int ht=多希特试验(m);
控制台写入线(ht);
if(callDWP)
{
callDWP=(ht==Win32Constants.HTNOWHERE);
结果=新IntPtr(ht);
}
}
打破
}
违约:
{
基准WndProc(参考m);
打破
}
}
m、 结果=结果;
if(callDWP)
{
基准WndProc(参考m);
}
}

不要调用
base.WndProc(参考m)