Unity打包PC端各种屏幕适配,无边框,最小化,显示可拖拽部分
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
//using UnityEngine.SceneManagement;
using System;
using UnityEngine.UI;
using System.Runtime.InteropServices; public class DrawWindow : MonoBehaviour
{ //private GameObject go;
private 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); /// <summary>
/// 窗口宽度
/// </summary>
public int winWidth;
/// <summary>
/// 窗口高度
/// </summary>
public int winHeight;
/// <summary>
/// 窗口左上角x
/// </summary>
public int winPosX;
/// <summary>
/// 窗口左上角y
/// </summary>
public int winPosY; 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); }
public void btn_onclickxxx()
{//窗口化
Screen.fullScreen = false;
Screen.SetResolution(900, 540, false);
} public void btn_onclickxxxx()
{//默认分辨率无边框显示(可以自由根据winWidth和winHeight的值调整无边框的分辨率)
winWidth = 900;
winHeight = 540;
//显示器支持的所有分辨率
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);
} public void btn_onclickxxxxx()
{//第二分辨率显示
Resolution[] resolutions = Screen.resolutions;
int i = resolutions.Length;
winWidth = resolutions[i - 2].width;
winHeight = resolutions[i-2].height; //
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);
} IntPtr Handle;
bool bx; bool isMainScene = false; void Awake()
{
bx = false;
#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
btn_onclickxxxxx(); //go = transform.Find("go").gameObject;
//DontDestroyOnLoad(go);
} void Update()
{ MyDrag();
//测试各个分辨率的按键。
if (Input.GetKey(KeyCode.A))
{
btn_onclickxxxxx();
}
if (Input.GetKey(KeyCode.Escape))
{
btn_onclick();
}
if (Input.GetKey(KeyCode.W))
{
btn_onclickxx();
}
if (Input.GetKey(KeyCode.Q))
{
btn_onclickxxxx();
}
} /// <summary>
/// 自定义的只能在某些区域内点击有效的拖拽
/// </summary>
private void MyDrag()
{
if (bx)
{ //这样做为了区分界面上面其它需要滑动的操作
ReleaseCapture();
SendMessage(Handle, 0xA1, 0x02, 0);
SendMessage(Handle, 0x0202, 0, 0);
}
} public void OnPointerEnter(PointerEventData eventData)
{
bx = true;
} public void OnPointerExit(PointerEventData eventData)
{
bx = false;
}
void Start()
{
} }
Unity打包PC端各种屏幕适配,无边框,最小化,显示可拖拽部分的更多相关文章
- Qt无边框窗体-最大化时支持拖拽还原
目录 一.概述 二.效果展示 三.demo制作 1.设计窗体 2.双击放大 四.拖拽 五.相关文章 原文链接:Markdown模板 一.概述 用Qt进行开发界面时,既想要实现友好的用户交互又想界面漂亮 ...
- 再谈移动端Web屏幕适配
一个多月前水了一篇移动web屏幕适配方案,当时噼里啪啦的写了一通,自我感觉甚是良好.不过最近又有一些新的想法,和之前的有一些不同. 先说一下淘宝的方案,感觉现在好多的适配方案都是受了它的影响,上周六看 ...
- Unity输出PC端(Windows) 拖拽文件到app中
需求:给策划们写一个PC端(Window)的Excel导表工具.本来用OpenFile打开FileExplorerDialog后让他们自己选择想要添加的Excel文件就行了,结果有个需求是希望能拖拽E ...
- h5微信页面在手机微信端和微信web开发者工具中都能正常显示,但是在pc端微信浏览器上打不开(显示空白)
h5微信页面在手机微信和微信开发者工具中都能正常显示,但是在pc端微信浏览器上打不开或者数据加载不出来. 原因:pc端微信浏览器不支持ES6语法,我的代码中使用了一些ES6的特性 解决:将ES6转换为 ...
- Unity正交模式摄像机与屏幕适配的方法
public class CameraAuto : MonoBehaviour { float fDefaultRatio = 720.0f / 1280.0f;//预先设定屏幕大小1280*720 ...
- PC端判断屏幕宽度到达手机宽度的时候,直接跳转手机页面
<script> // //判断屏幕宽度到达手机宽度的时候,直接跳转手机页面 // window.addEventListener("resize", function ...
- Unity 打包PC和安卓的路径注意事项
if UNITY_STANDALONE_WIN || UNITY_EDITOR return Application.persistentDataPath + "/LocalData&quo ...
- Qt无边框窗体-模拟模态窗体抖动效果
目录 一.概述 二.效果展示 三.功能实现 四.相关文章 原文链接:Qt无边框窗体-模拟模态窗体抖动效果 一.概述 用Qt开发windows客户端界面确实是一大利器,兼顾性能的同时,速度相对来说也不错 ...
- (响应式PC端媒体查询)电脑屏幕分辨率尺寸大全
(响应式PC端媒体查询)电脑屏幕分辨率尺寸大全 时间:2015-08-17 16:50:40 阅读:3961 评论:0 收藏:0 [点我收藏+] 标签:styl ...
随机推荐
- vue中v-show与v-if的区别
v-show 手段:通过设置DOM元素的display样式属性控制显隐: 编译过程:v-show只是简单的基于css切换: 编译条件:v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存 ...
- linux安装Subversion版本控制工具(Subversion + Apache + jsvnadmin)
操作系统:Centos 6.7 集成环境服务器:10.0.210.112 操作用户:root 建议安装前更新操作系统 # yum update 更新完成后重启 # reboot 1: 安装 Apach ...
- IT术语
目录: 心跳检测 故障切换 主从配置 负载均衡 集群LVS 多集群横向扩容 纵向扩容 CDN DOS DDOS 会话跟踪 CSRF
- redis安全问题【原】
前提 假设redis安装在 IP 地址为 192.168.0.123 的linux服务器 . 我的本机Win10操作系统 IP地址为 192.168.0.45 , 有一套java客户端代码可调用lin ...
- SpringCloud微服务之跨服务调用后端接口
SpringCloud微服务系列博客: SpringCloud微服务之快速搭建EurekaServer:https://blog.csdn.net/egg1996911/article/details ...
- 【转载】C#:使用双缓冲让界面绘制图形时避免闪烁
https://blog.csdn.net/fujie724/article/details/5767064#
- springboot(十三):springboot结合mybatis generator逆向工程自动生成代码
错信息generate failed: Exception getting JDBC Driver: com.mysql.jdbc.Driver 上网查了一下,发现原来是generator这个插件在运 ...
- C# using 的用法
Ø 前言 说起 C# using 语句,想必大家都不陌生,它是 C# 中关键字之一.我们基本每天写代码都会使用到,其实也非常简单. 1. 首先,说说 using 有哪些用途 1) 用于引用其 ...
- 使用aspectJ实现Spring AOP的两种方式
方式一:基于aspectJ的XML配置 方式二:基于aspectJ的注解方式 基于aspectJ的XML配置 1) 引入相关jar包 2) 创建Spring核心配置文件,必须导 ...
- idea 创建运行web项目时,报错: Can not issue executeUpdate() for SELECTs解决方案
最近在做一个Web课程设计的时候遇到了如下的问题. java.sql.SQLException: java.lang.RuntimeException: java.sql.SQLException: ...