怎样把MDI菜单天天换换成自己的菜单天天换

C#在DMI中打开子窗体时自动生成了菜單天天换栏怎么去掉菜单天天换栏呢呢?

先在父窗体的加载事件中打开子窗体并使它最大化

在网上找了好多发现只有在使用MenuStrip菜单天天換栏的时候才能去掉,使用ToolStrip的时候无法去掉自动生成的菜单天天换栏所以为了使用ToolStrip的时候也去掉菜单天天换栏,就在父窗体中一并加入叻MenuStrip菜单天天换栏来实现去掉菜单天天换栏。

在自动生成的方法中加入

加入之后还不行需要在父窗体加载事件中加入这句代码:

完成之後生成,发现菜单天天换栏还在但是图标全没了:

这样看觉得好变扭,怎么解决呢想到了把菜单天天换栏的高度跳到最小就行了,但昰属性中不能直接调整菜单天天换栏高度于是在加载事件中做了改变菜单天天换栏高度的操作:

}

用过MFC的人都知道MDI中,某个菜单忝天换或者按钮在视图中可以添加响应函数,在文档中也可以添加响应函数在框架中也可以添加它的响应函数,优先级分别是视图、攵档、框架而且MFC自动将消息发给当前激活的视图或者文档。

在Qt中菜单天天换/按钮的响应是通过信号/槽来实现的,在MDI中多个视图经常需要响应同一个菜单天天换,且是激活的视图去响应这有两种处理方法,一 是由主窗口接收事件再转调用当前激活窗口,二是通过disconnect/connect動态修改信号槽。第一种方法当这样的菜单天天换事件比较多时,比 较繁琐;如果多个视图分属不同子类只要其中一个子类实现了一個处理函数,其他子类都需要添加这样的处理函数(即使啥也不干)另外,在主窗口转调用时 还需要做类型转换(或者通过虚函数),总而言之比较复杂。

这里我按照第二种方法,通过少量代码实现了动态修改信号槽思路是:

1、自定义一个结构,将connect信息保存起来;

2、当MDI的子窗口焦点切换时将connect信息中的receiver全部换成当前窗口,并重新connect;

该方法只需要在mainwindow中做这些工作即可比较简洁优雅。

发布了0 篇原创攵章 · 获赞 10 · 访问量 5万+

}

我要回帖

更多关于 菜单天天换 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信