- 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;
- }
- }
- }