您的位置:首页 > 编程语言 > C#

屏幕类,用于全屏程序&显示任务栏

2016-11-16 17:45 260 查看
 /// <summary>

    /// 屏幕类,用于全屏程序&显示任务栏

    /// </summary>

    public class ScreenHelper

    {

        #region Windows Mobile全屏

        [DllImport("aygshell.dll")]

        public static extern bool SHFullScreen(IntPtr hWnd, uint dwState);

        const uint SHFS_SHOWTASKBAR = 0x1;//任务栏

        const uint SHFS_HIDETASKBAR = 0x2;

        const uint SHFS_SHOWSIPBUTTON = 0x4;//输入法

        const uint SHFS_HIDESIPBUTTON = 0x8;

        const uint SHFS_SHOWSTARTICON = 0x10;//开始菜单栏

        const uint SHFS_HIDESTARTICON = 0x20;

        /// <summary>

        /// 全屏显示,即隐藏WM和win CE的任务栏(和开始菜单栏)

        /// </summary>

        /// <param name="hWnd">要显示的窗体句柄</param>

        /// <param name="isFull">true全屏,false取消全屏</param>

        /// <returns></returns>

        public static bool FullScreen(IntPtr hWnd, bool isFull)

        {

            uint dwState = 0;

            if (isFull)

            {

                dwState = SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON;

            }

            else

            {

                dwState = SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON;

            }

            return SHFullScreen(hWnd, dwState);

        }

        //this.WindowState = FormWindowState.Maximized;//这句不能少,且注意窗体的大小与屏幕相同

        //Win32.FullScreen(this.Handle,true);//本示例在windows mobile 6.1下测试通过

        #endregion

        //Win32 API

        [DllImport("coredll.dll", EntryPoint = "FindWindow")]

        private static extern IntPtr FindWindow(string lpWindowName, string lpClassName);

        [DllImport("coredll.dll", EntryPoint = "ShowWindow")]

        private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);

        [DllImport("coredll.dll", EntryPoint = "SystemParametersInfo")]

        private static extern int SystemParametersInfo(int uAction, int uParam, ref Rectangle lpvParam, int fuWinIni);

        [DllImport("coredll.dll", EntryPoint = "ShowWindow")]

        public static extern int ShowWindow(int hwnd, int nCmdShow);

        public const int SPI_SETWORKAREA = 47;

        public const int SPI_GETWORKAREA = 48;

        public const int SW_HIDE = 0x00;

        public const int SW_SHOW = 0x0001;

        public const int SPIF_UPDATEINIFILE = 0x01;

        public const int TASKBAR_SW_SHOW = 5; //显示窗口常量 

        public const int TASKBAR_SW_HIDE = 0; //隐藏窗口常量 

        /// <summary>

        /// 隐藏任务栏

        /// </summary>

        /// <param name="FLAG">是否隐藏</param>

        /// <returns></returns>

        public static bool HideTaskBar(bool FLAG)

        {

            int Hwnd = FindWindow("HHTaskBar", null).ToInt32();

            if (Hwnd == 0) return false;

            else

            {

                if (FLAG)

                {

                    ShowWindow(Hwnd, TASKBAR_SW_HIDE);

                }

                else

                {

                    ShowWindow(Hwnd, TASKBAR_SW_SHOW);

                }

            }

            return true;

        }

        /// <summary>

        /// 是否全屏

        /// </summary>

        /// <param name="fullscreen">是否全屏</param>

        /// <param name="rectOld"></param>

        /// <returns></returns>

        public static bool SetFullScreen(bool fullscreen, ref Rectangle rectOld)

        {

            IntPtr Hwnd = FindWindow("HHTaskBar", null);

            if (Hwnd == IntPtr.Zero) return false;

            if (fullscreen)

            {

                ShowWindow(Hwnd, SW_HIDE);

                Rectangle rectFull = Screen.PrimaryScreen.Bounds;

                SystemParametersInfo(SPI_GETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);//get SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectFull, SPIF_UPDATEINIFILE);//set

            }

            else

            {

                ShowWindow(Hwnd, SW_SHOW);

                SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);

            }

            return true;

        }

        /// <summary>

        /// 屏幕居中

        /// </summary>

        /// <param name="f"></param>

        /// <returns></returns>

        public static bool CenterScreen(Form f)

        {

            Rectangle ScreenArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;

            f.Left = (ScreenArea.Width - f.Width) / 2;

            f.Top = (ScreenArea.Height - f.Height) / 2;

            return true;

        }

        public static bool CenterControl(Control child, Control parent)

        {

            child.Left = (parent.Width - child.Width) / 2;

            child.Top = (parent.Height - child.Height) / 2;

            return true;

        }

        public static Size GetScreenSize()

        {

            Rectangle rectFull = Screen.PrimaryScreen.Bounds;

            return new Size(rectFull.Width, rectFull.Height);

        }

        #region 屏幕像素计算

        static ScreenHelper()

        {

            Init();

        }

        private static double InchesToMMUnit = 25.4;

        private static double ScreenDPI_X = 102.8;

        private static double ScreenDPI_Y = 102.8;

        private static void Init()

        {

#if Computer

            using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))

            {

                ScreenDPI_X = graphics.DpiX;

                ScreenDPI_Y = graphics.DpiY;

            }

#endif

        }

        //[DllImport("user32.dll")]

        //static extern IntPtr GetDC(IntPtr ptr);

        //[DllImport("user32.dll", EntryPoint = "ReleaseDC")]

        //public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);

        //[DllImport("gdi32.dll")]

        //private static extern int GetDeviceCaps(IntPtr hdc, int Index);

        //private static void Init()

        //{

        //    IntPtr screenDC = GetDC(IntPtr.Zero);

        //    int width = GetDeviceCaps(screenDC, 4);     // 毫米宽度 

        //    int pixels = GetDeviceCaps(screenDC, 8);     // 像素

        //    ReleaseDC(IntPtr.Zero, screenDC);

        //    double vDpi = pixels / width;

        //    ScreenDPI_X = vDpi * InchesToMMUnit;

        //    ScreenDPI_Y = vDpi * InchesToMMUnit;

        //}

        /// <summary>
        /// 毫米转为像素(注:dpi分水平和垂直,获取方法为得到 Graphics 的实例化对象 g,调用g.DpiX、g.DpiY)

        /// </summary>

        /// <param name="mm">毫米</param>

        /// <param name="fDPI">分辨率(水平/垂直)</param>

        /// <returns></returns>

        public static double MillimetersToPixel(double mm, double fDPI)

        {

            //毫米转像素:mm * dpi / 25.4 

            return mm * fDPI / InchesToMMUnit;

        }

        /// <summary>

        /// 根据毫米获取屏幕像素

        /// </summary>

        /// <param name="mm"></param>

        /// <returns></returns>

        public static int MillimetersToPixel(double mm)

        {

            return (int)Math.Round(MillimetersToPixel(mm, ScreenDPI_X), 0);

        }

        /// <summary>

        /// 像素转为毫米(注:dpi分水平和垂直,获取方法为得到 Graphics 的实例化对象 g,调用g.DpiX、g.DpiY)

        /// </summary>

        /// <param name="px">像素</param>

        /// <param name="fDPI">分辨率(水平/垂直)</param>

        /// <returns></returns>

        public static double PixelToMillimeters(double px, double fDPI)

        {

            //像素转毫米:px * 25.4 / dpi

            return px * InchesToMMUnit / fDPI;

        }

        /// <summary>

        /// 根据像素获取毫米

        /// </summary>

        /// <param name="px">像素</param>

        /// <returns></returns>

        public static double PixelToMillimeters(double px)

        {

            return PixelToMillimeters(px, ScreenDPI_X);

        }

        /// <summary>

        /// 英寸到像素

        /// </summary>

        /// <param name="inches"></param>

        /// <returns></returns>

        public static double InchesToPixels(double inches, double fDPI)

        {

            return inches * fDPI;

        }

        /// <summary>

        /// 像素到英寸

        /// </summary>

        /// <param name="px"></param>

        /// <returns></returns>

        public static double PixelsToInches(double px, double fDPI)

        {

            return px / fDPI;

        }

        /// <summary>

        /// 毫米到英寸

        /// </summary>

        /// <param name="mm"></param>

        /// <returns></returns>

        public static double MillimetersToInches(double mm)

        {

            return mm / InchesToMMUnit;

        }

        /// <summary>

        /// 英寸到毫米

        /// </summary>

        /// <param name="mm"></param>

        /// <returns></returns>

        public static double InchesToMillimeters(double Inches)

        {

            return Inches * InchesToMMUnit;

        }

        #endregion

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# 屏幕类