unity对应用边框的各种处理(置顶,置底,透明边框等等)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Runtime.InteropServices;

public class FixResolution 
{
    static FixResolution instance;
    public static FixResolution Instance
    {
        get
        {
            if (instance == null)
                instance = new FixResolution();
            return instance;
        }
    }


    /// <summary>
    /// _nIndex 详情
    /// </summary>
    const Int32 GWL_EXSTYLE = -20;//设定一个新的扩展风格
    const Int32 GWL_HINSTANCE = -6;//设置一个新的应用程序实例句
    const Int32 GWL_ID = -12;//设置一个新的窗口标识符
    const Int32 GWL_STYLE = -16;//设定一个新的窗口风格
    const Int32 GWL_USERDATA = -21;//设置与窗口有关的32位值。每个窗口均有一个由创建该窗口的应用程序使用的32位值
    const Int32 GWL_WNDPROC = -4;//为窗口设定一个新的处理函数
    const Int32 GWL_HWNDPARENT = -8;//改变子窗口的父窗口,应使用SetParent函数
    const Int32 DWL_DLGPROC = 4;//设置对话框过程的新地址
    const Int32 DWL_MSGRESULT = 0;//设置在对话框过程中处理的消息的返回值
    const Int32 DWL_USER = 8;//设置的应用程序私有的新的额外信息,例如一个句柄或指针


    /// <summary>
    /// dwNewLong 详情-------列表控件的专用风格 一般就写一个数字1吧  其他的我也不知道常量数是多少---没查出来
    /// </summary>
    const UInt32 LVS_ICON = 0;//大图标显示
    const UInt32 LVS_SMALLICON = 0;//小图标显示
    const UInt32 LVS_LIST = 0;//列表显示
    const UInt32 LVS_REPORT = 0;//详细报表显示
    const UInt32 LVS_EDITLABELS = 0;//结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列
    const UInt32 LVS_SHOWSELALWAYS = 0;//在失去焦点时也显示当前选中的结点
    const UInt32 LVS_SINGLESEL = 0;//同时只能选中列表中一项


    /// <summary>
    /// uFlags 详情
    /// </summary>
    const UInt32 SWP_NOMOVE = 0x0002;//保持当前的位置(忽略x和y参数)
    const UInt32 SWP_NOZORDER = 0x0004;//保持当前的次序(忽略pWndInsertAfter)
    const UInt32 SWP_NOREDRAW = 0x0008;//不重画变化。如果设置了这个标志,则不发生任何种类的变化。这适用于客户区、非客户区(包括标题和滚动条)以及被移动窗口覆盖的父窗口的任何部分。当这个标志被设置的时候,应用程序必须明确地无效或重画要重画的窗口和父窗口的任何部分。
    const UInt32 SWP_NOACTIVATE = 0x0010;//不激活窗口。如果没有设置这个标志,则窗口将被激活并移动到顶层或非顶层窗口组(依赖于pWndInsertAfter参数的设置)的顶部。
    const UInt32 SWP_FRAMECHANGED = 0x0020;//向窗口发送一条WM_NCCALCSIZE消息,即使窗口的大小不会改变。如果没有指定这个标志,则仅当窗口的大小发生变化时才发送WM_NCCALCSIZE消息。
    const UInt32 SWP_SHOWWINDOW = 0x0040;//显示窗口
    const UInt32 SWP_HIDEWINDOW = 0x0080;//隐藏窗口
    const UInt32 SWP_NOCOPYBITS = 0x0100;//废弃这个客户区的内容。如果没有指定这个参数,则客户区的有效内容将被保存,并在窗口的大小或位置改变以后被拷贝回客户区
    const UInt32 SWP_NOOWNERZORDER = 0x0200;//不改变拥有者窗口在Z轴次序上的位置
    const UInt32 SWP_NOSENDCHANGING = 0x0400;//防止窗口接收WM_WINDOWPOSCHANGING消息

    [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 GetActiveWindow();//表示获取它现在打开的windows窗体

    public void Init(int m_x, int m_y)
    {
        // Screen.SetResolution(400, 400, false);  unity自带的强制设置分辨率的函数

        //下面这俩是利用win32设置的改变起始位置和分辨率的函数
        //第一个是设置深度和长度的。通俗的讲就是有无边框
        //第二个是设置位置和分辨率的(参数为-1后面开始的那位,一共四位,前两位起始坐标位置,然后后两位是分辨率)

        SetWindowLong(GetActiveWindow(), -16, 1);
        SetWindowPos(GetActiveWindow(), -1, 0, 0, m_x, m_y, SWP_SHOWWINDOW);//SWP_SHOWWINDOW
    }




    /// <summary>
    /// 置底
    /// </summary>
    void button1()
    {
        SetWindowPos(GetActiveWindow(), -1, 0, 0, 1920, 1080, SWP_SHOWWINDOW);//SWP_SHOWWINDOW
    }

    /// <summary>
    /// 置顶
    /// </summary>
    void button2()
    {
        SetWindowPos(GetActiveWindow(), 1, 0, 0, 1920, 1080, SWP_SHOWWINDOW);//SWP_SHOWWINDOW
    }

}

 

 PS: 打包的时候不要勾选全屏

要在Unity PC应用程序中去掉边框和设置透明背景,可以按照以下步骤进行操作: 1. 首先,确保你的Unity版本高于5.0。边框透明背景选项在较旧的版本中可能不可用。 2. 选择你的主摄像机对象,然后在检视面板中找到“Clear Flags(清除标记)”设置。将其更改为“Solid Color(纯色)”。 3. 在同一检视面板中,找到“Background(背景)”设置,并将其颜色设置为透明。你可以使用颜色拾取器或手动输入RGBA值来设置透明颜色。 4. 接下来,需要修改你的应用程序的窗口样式。在你的脚本中,使用以下代码: ```csharp using System; using System.Runtime.InteropServices; public class WindowStyle : MonoBehaviour { [DllImport("user32.dll")] public static extern IntPtr GetActiveWindow(); [DllImport("user32.dll")] public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); [DllImport("user32.dll")] public static extern bool SetLayeredWindowAttributes(IntPtr hWnd, uint crKey, byte alpha, int dwFlags); private const int GWL_STYLE = -16; private const int WS_BORDER = 0x00800000; private const int WS_EX_LAYERED = 0x00080000; private const int LWA_COLORKEY = 0x00000001; private void Start() { IntPtr hWnd = GetActiveWindow(); SetWindowLong(hWnd, GWL_STYLE, WS_BORDER); SetWindowLong(hWnd, WS_EX_LAYERED, WS_EX_LAYERED); SetLayeredWindowAttributes(hWnd, 0x00FFFFFF, 0, LWA_COLORKEY); } } ``` 执行以上脚本后,将在应用程序开始时设置窗口样式。边框将被删除,并且背景将成为透明的。 5. 最后,你可以根据需要自定义应用程序窗口的大小和位置,以适应你的项目需求。你可以在Unity的Player设置中或在代码中进行调整。 希望以上解答对你有所帮助!如果还有任何疑问,请随时追问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月轻狂客rx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值