我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

在MDi窗体嵌入子窗体后不显示菜单栏的解决方法

来源:网络 更新时间:2024-04-20 15:31:22

由于之前做的一个程序的功能全部都是放在一个界面上的,有一个功能能够在数据库查询数据,并返回到界面上。数据量比较小的时候还好,但是数据量多了,导致它阻塞的其他线程。经过一系列讨论之后,决定将一个界面换成一个主界面加多个子界面。

多个子界面迁移完成之后,使用下面的方法将其放置的主界面中(先将主窗体的 IsMdiContainer 设置为true,不然会报错)

然后在主窗体和子窗体的属性那里把 ControlBox 属性设置为false,然后测试发现主窗体一开始是没有菜单栏的,但是打开子窗体之后就会在主窗体的右上角显示出菜单栏。

查阅了一些网上的办法去改变其他属性值,但是测试之后发现没有用,有说用pannel的,但是我的这个程序需要在Mdi中实现,就没有去实践了,后面就去问gpt4了,最后用gpt4给的方法实现了。

这个方法是重写WndProc,在获取到子窗体需要重新计算大小时,直接告诉系统我们只需要计算工作区,而不需要把菜单栏加入进来,这里微软的官方文档里面也有写到( https://learn.microsoft.com/zh-cn/windows/win32/winmsg/wm-nccalcsize )

然后根据我想要的功能给它简单的优化了一些:

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x0083 && m.WParam.ToInt32() != 0)
    {
        m.Result = IntPtr.Zero;
        return;
    }
    base.WndProc(ref m);
}

效果图: