using UnityEngine; using System.Collections; using System; using System.Runtime.InteropServices; namespace MyFrameworkPure { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public class FileDialogTool { 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; public void SetSaveType(string defExt, string filter = "All Files\0*.*\0\0") { this.structSize = Marshal.SizeOf(this); this.filter = filter; this.file = new string(new char[256]); this.maxFile = this.file.Length; this.fileTitle = new string(new char[64]); this.maxFileTitle = this.fileTitle.Length; this.initialDir = UnityEngine.Application.dataPath;//默认路径 this.title = "Open Project"; this.defExt = defExt;//显示文件的类型 //注意 一下项目不一定要全选 但是0x00000008项不要缺少 this.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;//OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR } public void SetOpenType(string defExt, string filter = "All Files\0*.*\0\0") { this.structSize = Marshal.SizeOf(this); this.filter = filter; this.file = new string(new char[256]); this.maxFile = this.file.Length; this.fileTitle = new string(new char[64]); this.maxFileTitle = this.fileTitle.Length; this.initialDir = UnityEngine.Application.dataPath;//默认路径 this.title = "Save Project"; this.defExt = defExt;//显示文件的类型 //注意 一下项目不一定要全选 但是0x00000008项不要缺少 this.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;//OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR } } public class FileDialog { [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)] public static extern bool GetOpenFileName([In, Out] FileDialogTool ofn); [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)] public static extern bool GetSaveFileName([In, Out] FileDialogTool ofn); public static bool OpenImage(out FileDialogTool ofn) { ofn = new FileDialogTool(); ofn.structSize = Marshal.SizeOf(ofn); ofn.filter = "All Files\0*.*\0\0"; ofn.file = new string(new char[256]); ofn.maxFile = ofn.file.Length; ofn.fileTitle = new string(new char[64]); ofn.maxFileTitle = ofn.fileTitle.Length; ofn.initialDir = Application.dataPath;//默认路径 ofn.title = "打开图像"; //ofn.defExt = "JPG"; ofn.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008; return FileDialog.GetOpenFileName(ofn); } } }