unity3d调用win32打开对话框

//解决unity3D中使用OpenFileDialog报错的问题。实现unity3D打开资源管理器选择本地图片并显示。
<pre name="code" class="html">http://www.cnblogs.com/U-tansuo/archive/2012/07/10/2584447.html
 
 
//参考链接:<a target=_blank href="http://www.cnblogs.com/U-tansuo/archive/2012/07/10/2584447.html">http://www.cnblogs.com/U-tansuo/archive/2012/07/10/2584447.html</a>
//方便自己以后参考。
using System.Collections;
using System.IO;
using UnityEngine;
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;
}


public class DllTest
{
[DllImport("Comdlg32.dll",SetLastError=true,ThrowOnUnmappableChar=true, CharSet = CharSet.Auto)]          
     public static extern bool GetOpenFileName([ In, Out ] OpenFileName ofn );   
     public static  bool GetOpenFileName1([ In, Out ] OpenFileName ofn )


    {
        return GetOpenFileName(ofn);
    }
}


public class LoadTexture : MonoBehaviour
{
    private Texture2D img = null;
// Use this for initialization
void Start () {
   
}

// Update is called once per frame
void Update () {

}
    public void a()
    {


    }
    private string path = "";
    public void Loadtexture()
    {
        /*OpenFileDialog od = new OpenFileDialog();
        od.Title = "请选择头像图片";
        od.Multiselect = false;
        od.Filter = "图片文件(*.jpg,*.png)|*.jpg;*.png";
        if (od.ShowDialog() == DialogResult.OK)
        {
            path = UnityEngine.Application.streamingAssetsPath + "Temp/temp.png";
            if (File.Exists(path))
            {
                File.Delete(path);
                File.Copy(od.FileName, path);
            }
            else
            {
                File.Copy(od.FileName, path);
            }
            StartCoroutine(GetTexture("file://" + path));
        }*/
    }
    public void Load()
    {
        OpenFileName ofn = new OpenFileName();


        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 = UnityEngine.Application.dataPath;//默认路径


        ofn.title = "Open Project";


        ofn.defExt = "JPG";//显示文件的类型
        //注意 一下项目不一定要全选 但是0x00000008项不要缺少
        ofn.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;//OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR


        if (DllTest.GetOpenFileName(ofn))
        {


            StartCoroutine(WaitLoad(ofn.file));//加载图片到panle


            Debug.Log("Selected file with full path: {0}" + ofn.file);


        }




    }
    IEnumerator WaitLoad(string fileName)
    {
        WWW wwwTexture = new WWW("file://" + fileName);


        Debug.Log(wwwTexture.url);


        yield return wwwTexture;


        img = wwwTexture.texture;
    }
    void OnGUI()
    {
        if (img != null)
        {
            GUI.DrawTexture(new Rect(500, 500, img.width, img.height), img);
        }
    }


    IEnumerator GetTexture(string url)
    {
        WWW www = new WWW(url);
        yield return www;
        if (www.isDone && www.error == null)
        {
            img = www.texture;
            Debug.Log(img.width + "  " + img.height);
            byte[] data = img.EncodeToPNG();
            File.WriteAllBytes(path, data);
        }
    }
}

你可能感兴趣的:(unity3d调用win32打开对话框)