gpt4 book ai didi

c# - 单击父窗口时子窗体不闪烁

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:26 24 4
gpt4 key购买 nike

我正在开发一个自定义表单,它提供了更多选项来自定义表单的外观。

为此,我从 System.Windows.Forms.Form 类派生了该类并覆盖了 WndProc(ref Message m) 方法。

我已经处理了所需的窗口消息(WM_NCPAINTWM_NCCALCSIZE 等)以自定义表单。

我已通过以下代码显示自定义表单表单,以通过单击按钮显示子表单。

CustomForm form = new CustomForm();
form.ShowDialog();

单击父窗体时子窗体不闪烁。但在 Microsoft 窗体中会出现闪烁。

我已经处理了窗口消息 WM_NCCALCSIZE 以指定我的窗体的客户区大小,如下所示。

void On_WM_NcCalcSize(ref Message m)
{
rect.Top += borderThickness + titleBarHeight;
rect.Left += borderThickness;
rect.Right -= borderThickness;
rect.Bottom -= borderThickness;
m.Result = IntPtr.Zero;
Marshal.StructureToPtr(rect, m.LParam, true);
}

我已经处理了 WM_NCPAINT 以绘制自定义标题栏和边框以及其他自定义内容。

我还通过以下代码处理了 On_Wm_NcActivate。

 private void On_Wm_NcActivate(ref Message m)
{
if (!this.IsMdiContainer)
NativeMethods.LockWindowUpdate(this.Handle);
base.WndProc(ref m);
NativeMethods.LockWindowUpdate(IntPtr.Zero);
if (Style != null)
{
var msg = new Message();
msg.Msg = WindowMessages.WM_NCPAINT;
msg.HWnd = m.HWnd;
msg.WParam = (IntPtr)1;
msg.LParam = (IntPtr)0;
On_Wm_NcPaint(ref msg);
}
}

我不知道我哪里做错了,所以请给我建议

最佳答案

您应该将“表单”的父级设置为父级表单

关于c# - 单击父窗口时子窗体不闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54473012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com