Unity C# GetSaveFileName()的应用
本文原创,转载请注明出处:http://www.cnblogs.com/AdvancePikachu/p/6944870.html
唉哟,这次厉害咯,网上搜罗了好久,终于被我找到汉化的保存对话框了,根据网上的一些前辈总结的内容,做了一些修改,
先放个效果图:

首先需要定义一个OpenFileName的类:
[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;
}
当然,也不是都用到了,只用到了一小部分,有性趣的童鞋可以个性化一下保存对话框,
然后是最重要的委托GetSaveName()方法:
public class DllTest
{
[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
public static extern bool GetSaveFileName([In, Out] OpenFileName ofn);
}
挡挡挡,最后调用一下即可:
public static void OpenDialog(Action<Stream> onSave)
{
OpenFileName ofn = new OpenFileName();
ofn.structSize = Marshal.SizeOf(ofn); ofn.filter = "Excel (*.xls)\0*.xls\0\0";
ofn.file = new string(new char[]);
ofn.maxFile = ofn.file.Length;
ofn.fileTitle = new string(new char[]);
ofn.maxFileTitle = ofn.fileTitle.Length;
ofn.initialDir = UnityEngine.Application.dataPath;//默认路径
ofn.title = "保存文件";
ofn.defExt = ".xls";//显示文件的类型
ofn.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;
if (DllTest.GetSaveFileName(ofn))
{
dosomething(); string Savepath = Path.GetDirectoryName (ofn.file);
Process.Start (Savepath);
}
}


终于搞定保存对话框汉化了,5555,也是不容易啊!
那位小伙伴有更好的方法希望可以分享给我啊!
2017/12/27
前两天同时使用的时候遇到很多问题,原因是封装的不太好,而且也没有注释,逻辑提供不全,今天把完整的代码贴上来,最近比较忙,等空闲了再整理下
首先是调用OpenDialog的方法
void save()
{
SaveDialog.OpenDialog (saveExcel);
} public void saveExcel(Stream s)
{
//excell的逻辑
ExcelWrite ew = new ExcelWrite ();
ew.WriteToStream (s);
}
然后是 ExcelWrite.cs
public void WriteToStream(Stream s)
{
IWorkbook workbook = new HSSFWorkbook ();
ISheet sheet = workbook.CreateSheet (); IRow row = sheet.CreateRow (0);//参数0表示第0行 string[] firstRow = new string[]
{
"ID",
"性别",
"博客"
}; for (int i = 0; i < firstRow.Length; i++)
{
ICell cell = row.CreateCell (i);
cell.SetCellValue (firstRow [i]);
} IRow row2 = sheet.CreateRow (1); string[] secondRow = new string[]
{
"AdvancePikachu",
"男",
"http://www.cnblogs.com/AdvancePikachu/"
}; for (int i = 0; i < secondRow.Length; i++)
{
ICell cell = row2.CreateCell (i);
cell.SetCellValue (secondRow [i]);
} workbook.Write (s);
}
这个excel用的是NPOI写的,效果挺好的,最后附上demo实例,欢迎各路大神提供更好的思路!
Test
Unity C# GetSaveFileName()的应用的更多相关文章
- Unity C# 运用 GetSaveFileName() 导出Excel文件
本文原创,转载请注明出处:http://www.cnblogs.com/AdvancePikachu/p/6944870.html 唉哟,这次厉害咯,网上搜罗了好久,终于被我找到汉化的保存对话框了,根 ...
- unity 实现调用Windows窗口/对话框交互
Unity调用Window窗口 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...
- Unity 3D调用Windows打开、保存窗口、文件浏览器
Unity调用Window窗口 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...
- Unity中调用Windows窗口句柄以及根据需求设置并且解决扩展屏窗体显示错乱/位置错误的Bug
问题背景: 现在在搞PC端应用开发,我们开发中需要调用系统的窗口以及需要最大化最小化,缩放窗口拖拽窗口,以及设置窗口位置,去边框等功能 解决根据: 使用user32.dll解决 具体功能: Unity ...
- Unity3d入门 - 关于unity工具的熟悉
上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...
- 聊聊Unity项目管理的那些事:Git-flow和Unity
0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...
- Unity游戏内版本更新
最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...
- Unity 序列化
Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...
- Unity 序列化 总结
查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...
随机推荐
- NSUserDefaults registerDefaults
NSUserDefaults除了保存和读取功能外,还为我们提供了一个很便捷的方法:registerDefaults. func registerDefaults(registrationDiction ...
- PHP 魔术方法__set() __get() 方法
a); //output: 123 var_dump($s->b); //output: 123 var_dump($s->c); //output: null var_dump($s-& ...
- python自动化测试应用-番外篇--接口测试2
篇2 book-python-auto-test-番外篇--接口测试2 --lamecho辣么丑 大家好! 我是lamecho(辣么丑),今天将继续上一篇python接 ...
- BackgroundWorker的DoWork方法中发生异常无法传递到RunWorkedCompleted方法
在使用C#的BackgroundWorker时需要在UI界面上显示DoWork中发生的异常,但怎么调试都无法跳转到界面上,异常也不会传递到RunWorkerCompleted方法中(e.Error为空 ...
- dva框架使用mock.js模拟数据 + fetch请求数据
what DVA? Dva是基于Redux做了一层封装,对于React的state管理,有很多方案,我选择了轻量.简单的Dva. dva 可以很方便就使用mock.js进行数据的模拟. 只需要三步,即 ...
- hdu4185二分图匹配
Thanks to a certain "green" resources company, there is a new profitable industry of oil s ...
- php web开发安全之csrf攻击的简单演示和防范(一)
csrf攻击,即cross site request forgery跨站(域名)请求伪造,这里的forgery就是伪造的意思.网上有很多关于csrf的介绍,比如一位前辈的文章浅谈CSRF攻击方式,参考 ...
- hdu3336 kmp
It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ...
- eclipse配置相关
1,配置gradle,操作都正确,就是报gradle dependencies Uninitialized或者gradle dependencies怎么都不出现,此时的解决方案是在外部cmd下执行gr ...
- mysql5.7.16二进制安装
1.下载二进制文件 cd /data wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-linux-glibc2.5-x ...