wiki:unity:unity-remove-window-border
去除窗体模式下的边框并设置全屏
方法一:
此段代码主要的功能就是可以精确方便的设定发布后的Unity3D文件执行时在显示屏幕上的坐标和大小,且可以以无边框非全屏的模式显示。注意:要把此代码文件命名为WindowMod.cs。C#代码如下:
- WindowMod.cs
using System; using System.Collections; using System.Runtime.InteropServices; using System.Diagnostics; using UnityEngine; public class WindowMod: MonoBehaviour { public Rect screenPosition; [DllImport("user32.dll")] static extern IntPtr SetWindowLong (IntPtr hwnd,int _nIndex ,int dwNewLong); [DllImport("user32.dll")] static extern bool SetWindowPos (IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); [DllImport("user32.dll")] static extern IntPtr GetForegroundWindow (); // not used rigth now //const uint SWP_NOMOVE = 0x2; //const uint SWP_NOSIZE = 1; //const uint SWP_NOZORDER = 0x4; //const uint SWP_HIDEWINDOW = 0x0080; const uint SWP_SHOWWINDOW = 0x0040; const int GWL_STYLE = -16; const int WS_BORDER = 1; void Start () { SetWindowLong(GetForegroundWindow (), GWL_STYLE, WS_BORDER); bool result = SetWindowPos (GetForegroundWindow (), 0, (int)screenPosition.x,(int)screenPosition.y, (int)screenPosition.width,(int) screenPosition.height, SWP_SHOWWINDOW); } }
方法二:
- WindowResolution.cs
using UnityEngine; using System.Collections; using System.Runtime.InteropServices; using System; public class WindowResolution : MonoBehaviour { /// <summary> /// 窗口宽度 /// </summary> public int winWidth; /// <summary> /// 窗口高度 /// </summary> public int winHeight; /// <summary> /// 窗口左上角x /// </summary> public int winPosX; /// <summary> /// 窗口左上角y /// </summary> public int winPosY; [DllImport("user32.dll")] static extern IntPtr SetWindowLong(IntPtr hwnd, int _nIndex, int dwNewLong); [DllImport("user32.dll")] static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); [DllImport("user32.dll")] static extern IntPtr GetForegroundWindow(); [DllImport("User32.dll", EntryPoint = "GetSystemMetrics")] public static extern IntPtr GetSystemMetrics(int nIndex); const int SM_CXSCREEN = 0x00000000; const int SM_CYSCREEN = 0x00000001; const uint SWP_SHOWWINDOW = 0x0040; const int GWL_STYLE = -16; const int WS_BORDER = 1; const int WS_POPUP = 0x800000; public GUIText t; // Use this for initialization void Start() { winWidth = 610; winHeight = 350; //当前屏幕分辨率 int resWidth = (int)GetSystemMetrics(SM_CXSCREEN); int resHeight = (int)GetSystemMetrics(SM_CYSCREEN); winPosX = resWidth / 2 - winWidth / 2; winPosY = resHeight / 2 - winHeight / 2 -1; SetWindowLong(GetForegroundWindow(), GWL_STYLE, WS_POPUP); //测试发现左下角坐标为(0,1),修改如下 bool result = SetWindowPos(GetForegroundWindow(), 0, winPosX, winPosY, winWidth, winHeight, SWP_SHOWWINDOW); //bool result = SetWindowPos(GetForegroundWindow(), 0, winPosX, winPosY, winWidth, winHeight, SWP_SHOWWINDOW); } void OnGUI() { if (Input.GetMouseButtonDown(0)) { t.text = "X:"+Input.mousePosition.x + " Y:" + Input.mousePosition.y; } } }
wiki/unity/unity-remove-window-border.txt · 最后更改: 2023/01/03 15:25 由 127.0.0.1
评论