MDI子窗体的最大化问题
问题一:主窗体中有多个子窗体,子窗体在设期指定了windowstate为wsmaximazied,但每次创建子窗体时开始都是normal状态,然后再最大化,这其中有一个最大化的动作,会产生闪烁,如何能子窗体一创建就是已经是最大化的了,即去掉这个最大给的动作。
问题二:多个子窗体都是最大化显示的,在各子窗体间切换也是正常的,但如果关闭其中一个子窗体,便所有其它子窗体中便成了normal状态,怎么样才能关闭其中一个子窗体 而不影响其它的子窗体的最大化状态?
推荐阅读
处理oncanresize事件,将resize设为false;
我也想知道
关注一下
不知道,不过好像不太好解决
第一个问题以前还没注意到,第二个问题倒是解决了,我看了一下,不知是属性没设好还是怎么的,对于多个子窗体的程序,在打开一个新的窗体时,旧有的窗体就会变成normal,这个情景可以在新窗体产生是发生闪烁的一瞬间看到。由于很短暂,于是你看起来就是关掉一个窗体后所有的旧窗体都变成normal了。我解决的办法是在子窗体的formactivate事件中将窗体的windowstate属性再次设定wsmaximized状态,如果子窗体为frmtest,代码大致是,
if frmtest->windowstate=wsmaximized;
不过依旧有闪烁发生,不知如何解决。
在桌面点属性,然后-》效果,把动画显示菜单和提示之前的勾去掉,闪的就好一些了。不过还是有闪烁:
我在vb中解决了这个问题,好久没用vb,记得不清楚了,好像是用api函数阻止窗体重画。
你的第一个问题可以解决,你在主窗体的onshow 里面设置你的子窗体wsmaximized。可是当你在使用wsmaximized属性切换多个子窗体时还是出现了闪烁,不像其他多窗口程序切换时不出现闪烁,我想到一种减少闪烁的方法,那就是在显示前改变子窗口大小,使它于当前显示的子窗口一样大,可以减少闪烁。
在打开子窗体前,
::lockwindowupdate(mdimain->clienthandle) ;
然后再打开
最后
::lockwindowupdate(null) ;
最好是放在
try{} __finally{}里面


讨论区