using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using System;
public class Test : 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();
const uint SWP_SHOWWINDOW = 0x0040;
const int GWL_STYLE = -16;
const int WS_BORDER = 1;
const int WS_POPUP = 0x800000;
// Use this for initialization
void Start()
{
winWidth = 610;
winHeight = 350;
//显示器支持的所有分辨率
int i = Screen.resolutions.Length;
int resWidth = Screen.resolutions[i - 1].width;
int resHeight = Screen.resolutions[i - 1].height;
winPosX = resWidth / 2 - winWidth / 2;
winPosY = resHeight / 2 - winHeight / 2;
SetWindowLong(GetForegroundWindow(), GWL_STYLE, WS_POPUP);
bool result = SetWindowPos(GetForegroundWindow(), 0, winPosX, winPosY, winWidth, winHeight, SWP_SHOWWINDOW);
}
}
测试发现GUI坐标偏差,修改如下
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using System;
public class Test : 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;
}
}
}