Unity 去边框 并实现拖拽窗口

来源:互联网 发布:微信呼死你软件免费版 编辑:程序博客网 时间:2024/05/23 02:06

自己前一段时间一直查找相关资料、一直都没有,百度出来的都是一模一样的最大化、最小化、无边框的功能,就是没有拖拽的功能,自己搞定了就贴代码出来,省的其它程序员走弯路。
直接上代码,看注释。看不懂的就留言吧。

using UnityEngine;using System.Collections;using System;  using System.Runtime.InteropServices;  using UnityEngine.UI;public class popuxxx : 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 ();      [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 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;    void Start ()      {          bx = false;        xx = 0f;        #if UNITY_STANDALONE_WIN        Resolution[] r = Screen.resolutions;        screenPosition = new Rect ((r[r.Length-1].width-Screen.width)/2,(r[r.Length-1].height-Screen.height)/2,Screen.width,Screen.height);          SetWindowLong(GetForegroundWindow (), GWL_STYLE, WS_POPUP);//将网上的WS_BORDER替换成WS_POPUP          Handle = GetForegroundWindow ();   //FindWindow ((string)null, "popu_windows");        SetWindowPos (GetForegroundWindow (), 0,(int)screenPosition.x,(int)screenPosition.y, (int)screenPosition.width,(int) screenPosition.height, SWP_SHOWWINDOW);          #endif     }      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     }}
0 0
原创粉丝点击