Unity 去边框 并实现拖拽窗口

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

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 
    }

}
  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值