zoukankan      html  css  js  c++  java
  • Unity中调用Windows窗口选择文件

    1.OpenFileName数据接收类,如下:

    using UnityEngine;
    using System.Collections;
    using System;
    using System.Runtime.InteropServices;
    
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public class OpenFileName
    {
        public int structSize = 0;
        public IntPtr dlgOwner = IntPtr.Zero;
        public IntPtr instance = IntPtr.Zero;
        public String filter = null;
        public String customFilter = null;
        public int maxCustFilter = 0;
        public int filterIndex = 0;
        public String file = null;
        public int maxFile = 0;
        public String fileTitle = null;
        public int maxFileTitle = 0;
        public String initialDir = null;
        public String title = null;
        public int flags = 0;
        public short fileOffset = 0;
        public short fileExtension = 0;
        public String defExt = null;
        public IntPtr custData = IntPtr.Zero;
        public IntPtr hook = IntPtr.Zero;
        public String templateName = null;
        public IntPtr reservedPtr = IntPtr.Zero;
        public int reservedInt = 0;
        public int flagsEx = 0;
    }

    2.系统函数调用类, 如下:

     

    public class LocalDialog
    {
        //链接指定系统函数       打开文件对话框
        [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
        public static bool GetOFN([In, Out] OpenFileName ofn)
        {
            return GetOpenFileName(ofn);
        }
    
        //链接指定系统函数        另存为对话框
        [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern bool GetSaveFileName([In, Out] OpenFileName ofn);
        public static bool GetSFN([In,Out] OpenFileName ofn)
        {
            return GetSaveFileName(ofn); 
        }
    }

    3.测试入口类,如下:

    using UnityEngine;
    using System.Collections;
    using System.Runtime.InteropServices;
    
    public class DialogTest : MonoBehaviour {
    
        void OnGUI()
        {
            if (GUI.Button(new Rect(10,10,100,50),"Open"))
            {
                OpenFileName openFileName = new OpenFileName();
                openFileName.structSize = Marshal.SizeOf(openFileName);
                openFileName.filter = "Excel文件(*.xlsx)*.xlsx";
                openFileName.file = new string(new char[256]);
                openFileName.maxFile = openFileName.file.Length;
                openFileName.fileTitle = new string(new char[64]);
                openFileName.maxFileTitle = openFileName.fileTitle.Length;
                openFileName.initialDir = Application.streamingAssetsPath.Replace('/','\');//默认路径
                openFileName.title = "窗口标题";
                openFileName.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000008;
    
                if (LocalDialog.GetSaveFileName(openFileName))
                {
                    Debug.Log(openFileName.file);
                    Debug.Log(openFileName.fileTitle);
                }
            }
        }
    }
  • 相关阅读:
    模态框+Tab切换显示Json/Xml格式,提交Json/Xml字符串到后台
    jeDate时间插件
    ECharts柱状图+BootstrapTable联动
    ES6新增的一些常用特性
    Array数组遍历的几种方法以及Object对象的遍历
    Arguments 对象
    数组去重几种方法
    原型链图解
    切换镜像小工具
    AppID
  • 原文地址:https://www.cnblogs.com/steamedbun/p/10891171.html
Copyright © 2011-2022 走看看