作为一个新手,大家不要乱喷,高手勿进。嘿嘿
最近在做一个win7的cs软件,可是把窗口拖动到边框上就会让窗口全屏,并且不能自动退出全屏,没有办法就百度了,大概有两种方法,
1、就是修改注册表把win7的这个功能给禁用了,百度的例子很多,当时我也想用,想在程序启动的时候就后台修改注册表,来达到这样的目的。
2、就是响应一些事件,来手动退出,比如按下ESC,和双击标题栏来达到这样的效果,
我选择了第二种,因为修改注册表对于现在的杀毒软件是很难通过的可能影响程序的其它方面。
一开始想的是双击标题栏,我的标题是一个border,没有鼠标点击事件,可是却有一个MouseLeftButtonDown,这个事件,两者的区别就是事件发生的源不一样,解析不同
一个是MouseButtonEventArgs保存了鼠标按下的相关数据,而另一个却是RoutedEventArgs记录了路由的相关数据,都要实现双击自然也是有所不同的。
对于第一种我可以这样来做到
if (e.ClickCount == 2)
{
}
对于第二种我只能手动来加一个计时器来模拟这种效果
int i = 0;
void btn_Effection_Click(object sender, RoutedEventArgs e)
{
//i += 1;
//System.Timers.Timer t = new System.Timers.Timer(600);
//t.Interval = 600;
//t.Elapsed += (s, ee) => { t.Enabled = false; i = 0; };
//t.Enabled = true;
//if (i % 2 == 0)
//{
// t.Enabled = false;
// MessageBox.Show("双击");
// i = 0;
//}
//this.Topmost = true;
//this.WindowStyle = System.Windows.WindowStyle.None;
//this.WindowState = System.Windows.WindowState.Maximized;
}
但是却都是可以都能达到相同的效果。
没有测量过效率的问题。
我还想过做强转,如下:
private void btn_Effection_Click_1(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
MouseButtonEventArgs ms = e as MouseButtonEventArgs;
if (ms.ClickCount == 2)
{
MessageBox.Show("这样可以");
}
}
可是没有效果会死掉,因为这样ms是没有得到任何值的
全屏,自然后台调用相关的窗口状态了。
void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)//Esc键
{
this.WindowState = System.Windows.WindowState.Normal;
this.WindowStyle = System.Windows.WindowStyle.SingleBorderWindow;
}
}
可以根据自己的情况写窗口的状态,比如你自己的是无边框自己定义的窗口,那这样你就想好用SingleBorderWindow,因这样就会系统默认的状态给显示出来,要么你再把WindowsStyle改为None要不就不用不这样写了,直接更改窗口的状态,我就是这样写的,我当前不明白 为什么 要加下面的那句,话后,来去掉了也没有发现什么 问题,所以就没有加了,以后要是发现有问题,我再来更新。