冷月照霜城

憔悴江南倦客,不堪听、急管繁弦

博客园 首页 新随笔 联系 订阅 管理
在C#的Winform中实现窗口全屏显示的代码非常简单,如下:
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.TopMost = true//这句无关紧要,可以不加

本来没什么可说的,但是——
今天碰巧要实现一个用键盘快捷键来切换“全屏/窗口”的功能,发现只有第一次按的时候正常实现全屏。
在点击按键切换成非全屏后,再切回来时任务栏不消失。代码如下:
if (this.FormBorderStyle == FormBorderStyle.None)
{
    
this.FormBorderStyle = FormBorderStyle.FixedSingle;
}

else
{
    
this.FormBorderStyle = FormBorderStyle.None;
    
this.WindowState = FormWindowState.Maximized;
}

第一次按的时候正常说明代码没有大的问题……
第一次和后来的N次操作有什么区别呢?
突然想到第一次按的时候程序是以正常大小的窗口显示的,而后续按键操作时因程序语句的关系窗口一直是最大化的(无论全屏与否)。
当即改成如下代码:
if (this.FormBorderStyle == FormBorderStyle.None)
{
    
this.FormBorderStyle = FormBorderStyle.FixedSingle;
    
this.WindowState = FormWindowState.Normal;
}

else
{
    
this.FormBorderStyle = FormBorderStyle.None;
    
this.WindowState = FormWindowState.Maximized;
}

OK,一切正常了。
但是为什么会出现这个问题呢?想了一下,觉得应该是这样:
在最初的代码中,从全屏切换成窗口时,此时窗口的WindowState保留了最大化的状态。
又因为此时不是全屏,任务栏是要显示的,所以此时显示的程序窗口大小不是1024*768,而是1024*(768-30)=1024*738
当再从最大化的窗口切回全屏时,程序将FormBorderStyle设置成None后,执行到“this.WindowState = FormWindowState.Maximized”这句时,因为窗口状态已经是Maximized,所以系统自动接受了此时窗口的大小,而问题是此时的窗口大小并不是1024*768,所以就出现上面问题了。

这是我个人的推断,没有经过验证,如果哪们高手知道真实原委并肯指点一二,那真是感激不尽了。



posted on 2008-01-29 14:26  青弦  阅读(2765)  评论(0编辑  收藏  举报