首页 > 学院 > 开发设计 > 正文

C# 双击全窗口/全屏显示和恢复

2019-11-08 00:47:58
字体:
来源:转载
供稿:网友

用控件panel1全屏显示

panel1-事件里用MouseDoubleClick

遮盖panel1上的控件属性的Enabled设置为false,避免捕捉不到双击

C#代码:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Runtime.InteropServices;//DllImport用namespace 全屏显示{    public partial class Form1 : Form    {        [DllImport("user32.dll", SetLastError = true)]        static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);        [DllImport("user32.dll", SetLastError = true)]        static extern IntPtr GetDesktopWindow();        [DllImport("user32.dll", SetLastError = true)]        static extern IntPtr GetParent(IntPtr hWnd);        [DllImport("user32.dll", SetLastError = true)]        static extern int GetSystemMetrics(int nIndex);        [DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]        public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);        [DllImport("User32.dll ", EntryPoint = "FindWindow")]        PRivate static extern IntPtr FindWindow(string lpClassName, string lpWindowName);        public int SW_HIDE = 0;        public int SW_RESTORE = 9;        public bool m_bIsFullScreen=false;//判断是否全屏        public bool m_bIsFillDock = false;//判断是否全容器        Rectangle m_RecPanel1 = new Rectangle();//获取原始大小        public Form1()        {            InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e)        {            m_RecPanel1 = Panel1.Bounds;//获得panel1原始Bounds范围大小        }        //控件panel1全屏显示        private void panel1_MouseDoubleClick(object sender, MouseEventArgs e)        {            if (!m_bIsFullScreen)            {                //获取桌面窗口并设置为父窗口                IntPtr hDesk = GetDesktopWindow();                SetParent(this.Panel1.Handle, hDesk);                int width = GetSystemMetrics(0);                int height = GetSystemMetrics(1);                this.Panel1.Dock = DockStyle.None;//这个很重要,Anchor属性仍可用                this.Panel1.Bounds = new Rectangle(new Point(0, 0), new Size(width, height));                ShowWindow(FindWindow("Shell_TrayWnd", null), SW_HIDE);//隐藏Windows任务栏                //ShowWindow(FindWindow("Button", null), SW_HIDE);                m_bIsFullScreen = true;            }            else            {                //获取桌面窗口并设置为父窗口                IntPtr hDesk = GetDesktopWindow();                SetParent(this.Panel1.Handle, this.Handle);                int width = GetSystemMetrics(0);                int height = GetSystemMetrics(1);                this.Panel1.Dock = DockStyle.None;//这个很重要,Anchor属性仍可用                this.Panel1.Bounds = m_RecPanel1;                ShowWindow(FindWindow("Shell_TrayWnd", null), SW_RESTORE);//Shell_TrayWnd是任务栏的类名                m_bIsFullScreen = false;            }        }        //全窗口显示        //也可以用全屏的方法将   panel2.Bounds=窗口的大小;        private void panel2_MouseDoubleClick(object sender, MouseEventArgs e)        {            if (!m_bIsFillDock)            {                this.panel2.Parent = this;//以窗口为父控件                this.panel2.Dock = DockStyle.Fill;//填充至整个父控件大小                panel2.BringToFront();//可以没有,用来保证panel2在最前面,但是还原时候会遮盖原来在上面的控件                m_bIsFillDock = true;            }            else            {                this.panel2.Parent = this;                this.panel2.Dock = DockStyle.None;                //panel2.BringToFront();                m_bIsFillDock = false;            }        }    }}

参考文章:

1、隐藏和显示Windows任务栏:http://www.thinksaas.cn/topics/0/237/237013.html

2、C#中使用FindWindow函数详解:http://blog.csdn.net/soief/article/details/4094476

3、Showwindow 及参数:http://blog.csdn.net/bychentufeiyang/article/details/7164171

4、http://blog.csdn.net/u010956619/article/details/51174795

5、http://blog.163.com/wslngcjsdxdr@126/blog/static/16219623020161415256363/


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表