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 ...
随机推荐
- 【JS】JS格式化文件大小 单位:Bytes、KB、MB、GB
输入一个表示文件大小的数字,自适应转换到KB,MB,GB 方法一:bytes自适应转换到KB,MB,GB /// <summary> /// 格式化文件大小的JS方法 /// </s ...
- TranslateMessage消息翻译和DispatchMessage消息分发
TranslateMessage函数将虚拟键消息转换成字符消息.比如: 消息WM_KEYDOWN和WM_KEYUP组合产生一个WM_CHAR或WM_DEADCHAR消息. 消息WM_SYSKEYDOW ...
- jquery load 陷阱【原】
基础写法 function load(targetId,templateName) { $("#"+targetId).load(contextPath+templateName) ...
- Spring boot中使用Mongodb
安装 使用Idea新建Spring boot工程时需要选择Mongodb 或者在工程中加入依赖 Maven: <dependency> <groupId>org.springf ...
- 如何使用Cygwin在Windows上运行OpenSSH SSHD服务器
记录几款非常有趣, 但不怎么耳熟的软件: Cygwin 是可以安装 OpenSSH server 和 client 的, Mosh 也可以, 这对于 Linux 用户而言就非常方便了. 如何使用Cyg ...
- vue2.0页面缓存和不缓存的方法
// 模板中: <div class="home"> <keep-alive> <router-view v-if="$route.meta ...
- VisualStuido C# Files 的值“<<<<<<< .mine”无效。路径中具有非法字符。
直接在项目中搜是搜不到<<<<<<.mine,可以直接删除obj文件夹.
- JDK8新特性03 Lambda表达式03_Java8 内置的四大核心函数式接口
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.functio ...
- getaddrinfo函数
一.功能 对于IPv4和IPv6均适用,可以处理名字到地址以及服务到端口这两种变换,返回的是一个sockaddr结构而不是一个地址队列 二.函数原型 #include <netdb.h> ...
- ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
五.KMP算法: *KMP算法是一种改进的字符串匹配算法. *KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的.具体实现就是实现一个next()函 ...