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