Unity打包窗口化放大、缩小、拖拽功能、无边框设置 C# 您所在的位置:网站首页 cad图形整体缩小尺寸怎么设置 Unity打包窗口化放大、缩小、拖拽功能、无边框设置 C#

Unity打包窗口化放大、缩小、拖拽功能、无边框设置 C#

2023-07-20 07:55| 来源: 网络整理| 查看: 265

Unity打包Windows窗口实现放大、缩小、拖拽、无边框

文章目录 Unity打包Windows窗口实现放大、缩小、拖拽、无边框前言一、引入 user32.dll二、使用步骤1.引入库2.功能封装3.效果图如下,绑定自定义按钮 总结

前言

Unity无边框设置、窗口化放大、缩小、拖拽 提示:PC端打包,测试尽量在打包后测试。 编辑器下测试会有意想不到的后果呦~~

一、引入 user32.dll

[DllImport("user32.dll")]。

二、使用步骤 1.引入库

代码如下:

[DllImport("user32.dll")] private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow); [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] private static extern IntPtr SetWindowLong(IntPtr hwnd, int _nIndex, int dwNewLong); [DllImport("user32.dll")] private static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); [DllImport("user32.dll")] private static extern bool ReleaseCapture(); [DllImport("user32.dll")] private static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); 2.功能封装

代码如下:注释详细,不懂就问哈

public class WindowSetting : MonoBehaviour { [DllImport("user32.dll")] private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow); [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] private static extern IntPtr SetWindowLong(IntPtr hwnd, int _nIndex, int dwNewLong); [DllImport("user32.dll")] private static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); [DllImport("user32.dll")] private static extern bool ReleaseCapture(); [DllImport("user32.dll")] private static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); const int SW_SHOWMINIMIZED = 2; //{最小化, 激活} const int SW_SHOWMAXIMIZED = 3; //最大化 const int SW_SHOWRESTORE = 1; //还原 const uint SWP_SHOWWINDOW = 0x0040; const int GWL_STYLE = -16; const int WS_POPUP = 0x800000; private Rect _screenPosition; private IntPtr _handle; /// /// 放大全屏按钮 缩小按钮 还原窗口按钮 退出按钮 /// public Button bigBtn, smallBtn, restoreBtn, closeBtn; /// /// 自定义屏幕分辨率 长高 /// private int _screenWidth, _screenHeight; private void Start() { bigBtn.onClick.AddListener(OnClickMaximize); smallBtn.onClick.AddListener(OnClickMinimize); restoreBtn.onClick.AddListener(OnClickRestore); closeBtn.onClick.AddListener(CloseWindow); //自定义窗口分辨率 _screenWidth = 1280; _screenHeight = 720; #if UNITY_STANDALONE_WIN && !UNITY_EDITOR //作用是编辑器模式下不运行 尽量打包运行测试 Resolution[] r = Screen.resolutions; _screenPosition = new Rect((r[r.Length - 1].width - Screen.width) / 2, (r[r.Length - 1].height - Screen.height) / 2, _screenWidth, _screenHeight); 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 } /// /// 最小化 隐藏 /// private static void OnClickMinimize() { ShowWindow(GetForegroundWindow(), SW_SHOWMINIMIZED); } /// /// 最大化 全屏 /// private static void OnClickMaximize() { ShowWindow(GetForegroundWindow(), SW_SHOWMAXIMIZED); } /// /// 还原窗口 /// private static void OnClickRestore() { ShowWindow(GetForegroundWindow(), SW_SHOWRESTORE); } /// /// 退出 /// private void CloseWindow() { Application.Quit(); } /// /// 窗口拖拽区域 此处调用可以在按钮上添加EventTrigger组件 使用Drag方法 /// public void DragWindowsMethod() { ReleaseCapture(); SendMessage(_handle, 0xA1, 0x02, 0); SendMessage(_handle, 0x0202, 0, 0); } } 3.效果图如下,绑定自定义按钮

在这里插入图片描述

总结

代码整体已贴出,功能亲测可用,欢迎学习交流。点赞+收藏+关注哦~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有