gpt4 book ai didi

c# - 当 FormBorderStyle 设置为 None 时,winforms 绘制边框并 move

转载 作者:行者123 更新时间:2023-11-30 22:43:19 24 4
gpt4 key购买 nike

我将 winform 显示为对话框(在主窗口上使用 ShowDialog)。因此,我将 FormBorderStyle 设置为 None,因为我既不想要控制框也不想要标题栏。虽然,我想画一个边框(例如像普通窗口一样的蓝色边框)并保持 move 表单的能力。我不需要调整它大小的能力。我试图通过覆盖 OnPaint 来绘制边框,但它从未被调用过。这是我的代码:

  protected override void OnPaint (PaintEventArgs e)
{
base.OnPaint (e);
int borderWidth = 2;
Color borderColor = Color.Blue;
ControlPaint.DrawBorder (e.Graphics, e.ClipRectangle, borderColor,
borderWidth, ButtonBorderStyle.Solid, borderColor, borderWidth,
ButtonBorderStyle.Solid, borderColor, borderWidth, ButtonBorderStyle.Solid,
borderColor, borderWidth, ButtonBorderStyle.Solid);
}

如有任何帮助,我们将不胜感激。

最佳答案

Paint 方法在这里是错误的,因为它不绘制表单的所谓非客户区,例如边框和标题栏。

要隐藏标题栏,您需要将 ControlBox 属性设置为 false 并清除表单的 Text 属性。将边框设置为 FixedDialog 以使表单无法调整大小。

要保留在没有标题栏的情况下 move 窗体的能力,您需要覆盖 WndProc

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x84: m.Result = new IntPtr(0x2);
return;
}
base.WndProc(ref m);
}

基本上这是处理 WM_NCHITTEST 消息和作弊的标准方式,说 - 鼠标光标在窗口的标题上 [返回值 0x2],因此即使您在客户区中单击并拖动它。

关于c# - 当 FormBorderStyle 设置为 None 时,winforms 绘制边框并 move ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4013231/

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