2015.12.14 MDI(多文档窗口结构)设置基本解决,折腾一天,部分解决存在已久的问题。但效果仍不如临时航线的MDI窗体结构。
创建从一个窗口弹出多个子窗口的结构叫MDI窗体结构
如果不按MDI结构管理,最简单的做法是:
在窗体A上添加菜单或按钮,在菜单或按钮事件中添加弹出B窗体代码:
B b = new B();
b.show()
这样A与B没有任何关系,有多少个弹出窗口任务栏上就有多少个图标,父窗口最小化时其余窗口没有任何变化。这样比较凌乱。
但好处是弹出窗口的位置和大小与父窗口没有约束关系,弹出窗口可以在父窗口之外显示。
稍改进的方法(可能是比下方改进MDI还好的方法)
B b = new B();
b.show(this) //加上this后标明b窗口属于A窗体this,这样A最小化时所有子窗口也会最小化,最小化后任务栏上只有一个图标。且所有子窗口始终在父窗口的前端,不会被其遮挡。但任务栏上还是会有所有子窗口的图标。
要用传统的MDI子窗口处理如下
1、父窗口的isMdiContainer属性设为true(可通过界面设)
2、菜单或按钮事件的子窗口弹出代码写为:
B b = new B();
b. MdiParent = this; //this代表父窗口
b.WindowState = FormWindowState.Maximized;//
b.show()
注意:重要缺陷:可能是VS的bug,所有子窗体都只能在父窗体控件下方显示,如果父窗体上有一个picturebox的图片背景,则所有弹出窗口都会被图片盖住,就像没弹出一样。(折腾我近1个小时才发现)。
3种解决方法:
1、将背景图片设成主窗口的背景,而不用picturebox但这样会产生闪烁,不好看
2、弹出任意子窗口后将picturebox隐藏。
3、用API函数代替b. MdiParent = this。写成API.SetParent(b.Handle,pictureBox1.Handle); 注意:是将子窗体的父窗体设为picturebox而不是A!这对传统MDI窗体来说已经比较完美了,但是如果用了下面的优化MDI效果就不好,只能用方法2
这样就完成了传统MDI窗体的设置,
这样做缺点与优点一样明显。
优点是:所有窗体在任务栏上只有一个图标,所有子窗体最小化后都罗列在父窗体底部(显示最大化、最小化等三个按钮)、所有子窗体都随父窗口一起最消失出现。
缺点只有1个,但很致命:子窗体不能挪出父窗体。对大显示器或多显示器非常不方便。
改进方法:主要解决子窗体无法挪出父窗口的。
思路:子窗体默认最大化,充满父窗口客户区,但点击恢复正常尺寸显示时,退出MDI子窗口模式,使其脱离父窗口尺寸限制,成为独立窗口。
方法:上述MDI设置后,在弹出每个窗体中增加Wndproc回调函数,处理还原显示事件以及最大、最小化事件
在子窗口函数中定义:
const int WM_SYSCOMMAND = 0X112;//274
const int SC_MAXIMIZE = 0XF030;//61488
const int SC_MINIMIZE = 0XF020;//61472
const int SC_RESTORE = 0XF120; //61728
const int SC_CLOSE = 0XF060;//61536
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_RESTORE) //处理窗体还原事件,将子窗口父窗体设为原父窗口的父窗口,即桌面
{
this.MdiParent = MF.mf.MdiParent;
this.WindowState = FormWindowState.Normal;
System.Drawing.Rectangle rect = SystemInformation.WorkingArea;//获取屏幕工作尺寸
this.Height = rect.Height * 3 / 4;
this.Width = rect.Width * 3 / 4;
this.CenterToParent();
}
if (m.WParam.ToInt32() == SC_MAXIMIZE) //处理窗体最大化最小化事件,还原成MDI模式,同时还要写上最大化、最小化
{
this.MdiParent = MF.mf;
this.WindowState = FormWindowState.Maximized;
}
if (m.WParam.ToInt32() == SC_MINIMIZE)
{
this.MdiParent = MF.mf;
this.WindowState = FormWindowState.Minimized;
}
}
base.WndProc(ref m);
}
2015.12.14 MDI(多文档窗口结构)设置基本解决,折腾一天,部分解决存在已久的问题。但效果仍不如临时航线的MDI窗体结构。的更多相关文章
- Qt 的MDI 多文档窗口
一.MDI简介 MDI就是多文档界面(Multi-document Interface,MDI)应用程序 MDI就是在主窗口里创建多个同类型的MDI子窗口,这些MDI子窗口在主窗口里显示,并共享主窗口 ...
- Word2003文档窗口分成上下两个独立的窗口
http://www.officezu.com/word/2003/index16.html 拆分窗口就是把一个Word2003文档窗口分成上下两个独立的窗口,从而可以通过两个Word2003文档窗口 ...
- 打开word文档总是自动弹出控件工具条的解决办法:
打开word文档总是自动弹出控件工具条的解决办法:1.查看是否word文档和模板中了'apmp宏病毒,按ALT+F11组合键,双击当前文档下属的ThisDocument,清空里面的内容:双击Norma ...
- Pycharm新建文档的模板设置
下图演示的是关于python的文档的模板设置! 这样,以后的每一个新建的python的py文件,开头都会有下图中的两句:解释器路径与编码方式 步聚5的第二行内容打错了,应该是utf: #!/usr/b ...
- hbase0.96与hive0.12整合高可靠文档及问题总结
本文链接:http://www.aboutyun.com/thread-7881-1-1.html 问题导读:1.hive安装是否需要安装mysql?2.hive是否分为客户端和服务器端?3.hive ...
- ABBYY FineReader 14创建PDF文档功能解析
使用ABBYY FineReader,您可以轻松查看和编辑任何类型的 PDF,真的是一款实至名归的PDF编辑转换器,您知道的,它能够保护.签署和编辑PDF文档,甚至还可以创建PDF文档,本文和小编一起 ...
- 图文详细解说DevExpress 2015新版亮点【附文档下载】
历时两个月,翻译自官网的更新说明文档,最后整理成册,文末附PDF地址. DevExpress 在今年6月份发布了正式的2015版本,2015在旧版基础上有明显的升级改进,尤其是DevExtreme.W ...
- ABBYY FineReader 12 能够识别哪些文档语言
ABBYY FineReader可以识别单语言文本和多语言文本(如使用两种及以上语言).对于多语言文本,需要选择多种识别语言. 要为文本指定一种 OCR 语言,请从主工具栏或任务窗口的文档语言下拉列表 ...
- 关于MDI多文档程序的一些思考
MDI程序的框架 客户窗口是一个预定义的窗口类(MDICLIENT),它是框架窗口的子窗口同时也是各个子文档窗口的父窗口.框架窗口和各个子文档窗口都是自定义的窗口类. MDI程序中的一些要点 窗口中的 ...
随机推荐
- 使用命令【TLCL】
type command 显示命令的类别 which command 显示可执行程序的位置 help - 得到 shell 内建命令的帮助文档 --help - 显示用法信息 man ...
- waitpid使用的一点问题
使用waipid的时候遇到了一个奇怪的问题,将情况简化后描述一下. 有关waitpid的基本介绍参见这里一下:http://www.cnblogs.com/mickole/p/3187770.html ...
- Java -- JDBC 批处理
两种批处理方式: 采用Statement.addBatch(sql)方式实现批处理: •优点:可以向数据库发送多条不同的SQL语句. •缺点: •SQL语句没有预编译. •当向数据库发送多条语句相同, ...
- QT QDockWidget锚接部件 和 QTreeWidget 树形部件 构成树形选择项
1. 如图,在mainwindow中 添加DockWidget到右侧,里面镶嵌TreeWidget. 2. QTreeWidget *treeWidget = new QTreeWidget; // ...
- review03
class XiyoujiRenwu{ float height; float weight; String head; String ear; void speak(String s) { Syst ...
- mysql数据库优化课程---2、命令其实也就是那几个单词
mysql数据库优化课程---2.命令其实也就是那几个单词 一.总结 一句话总结: 比如show,use,alter 1.开启和关闭mysql服务? Windows下:net start/stop m ...
- 如何直接在网页中显示PDF文件
通过的浏览器:360.Firefox.IE.Chrome 2. 下面这个完整点: <param name="_Version" value="65539" ...
- J2EE配置tomcat
- leetcode_sql_1,176,177
1.176题目,Second Highest Salary,https://leetcode.com/problems/second-highest-salary/#/description Writ ...
- 微信小程序编写物流信息进度样式
做电商类型的小程序一定会碰到编写物流信息的时候,一般页面如下图 难点在于只有一条信息时候的页面样式 以及多条信息最后一条信息的页面样式 之前没做过这一块的东西,所以刚碰到的时候想了老半天orz.后来上 ...