项目要无边框设置,窗口拖动如下:
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.InteropServices;
using UnityEngine.UI;
public class Drag_i : MonoBehaviour
{
[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")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
//边框参数
const uint SWP_SHOWWINDOW = 0x0040;
const int GWL_STYLE = -16;
const int GWL_STYLE_ = 16;
const int WS_BORDER = 1;
const int WS_POPUP = 0x800000;
const int SW_SHOWMINIMIZED = 2; //{最小化, 激活}
const int SW_SHOWMAXIMIZED = 3; //{最大化, 激活}
public void btn_onclick()
{ //最小化
ShowWindow(GetForegroundWindow(), SW_SHOWMINIMIZED);
}
public void btn_onclickxx()
{ //最大化
ShowWindow(GetForegroundWindow(), SW_SHOWMAXIMIZED);
}
IntPtr Handle;
float xx;
bool bx;
private void Awake()
{
#if UNITY_STANDALONE_WIN
//框体大小设置
float windowWidth = 1024;
float windowHeight = 768;
//计算框体显示位置
float posX = (Screen.currentResolution.width - windowWidth) / 2;
float posY = (Screen.currentResolution.height - windowHeight) / 2;
Rect rect = new Rect(posX, posY, windowWidth, windowHeight);
//去边框
//SetWindowLong(GetForegroundWindow(), GWL_STYLE, WS_BORDER);//将网上的WS_BORDER替换成WS_POPUP 测试之后,不换好像有点卡顿,又好像无影响
//显示边框
SetWindowLong(GetForegroundWindow(), GWL_STYLE_, WS_POPUP);
Handle = GetForegroundWindow(); //FindWindow ((string)null, "popu_windows");
SetWindowPos(GetForegroundWindow(), 0, (int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height, SWP_SHOWWINDOW);
#endif
}
void Start()
{
bx = false;
xx = 0f;
}
//update 是设置窗口可以拖动
void Update()
{
#if UNITY_STANDALONE_WIN
if (Input.GetMouseButtonDown(0))
{
xx = 0f;
bx = true;
}
if (bx && xx >= 0.3f)
{ //这样做为了区分界面上面其它需要滑动的操作
ReleaseCapture();
SendMessage(Handle, 0xA1, 0x02, 0);
SendMessage(Handle, 0x0202, 0, 0);
}
if (bx)
xx += Time.deltaTime;
if (Input.GetMouseButtonUp(0))
{
xx = 0f;
bx = false;
}
#endif
}
}