/// <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
}
/// 屏幕类,用于全屏程序&显示任务栏
/// </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
}