OpenFileDialog 在Win32、MFC、C#的实现

这篇博客介绍了如何在不同的Windows编程环境中实现文件打开对话框,包括Win32 API、MFC和C#。通过设置Filter、InitialDir和defExt属性,可以定制文件类型、初始路径和默认扩展名。对话框成功打开后,用户选择的文件路径可用于后续操作。

  大多数windows运用程序都需要处理文件中的数据,所以需要一个接口打开和保存文件;比如,我们经常使用的word,可以看到非常标准的打开对话框,windows已经帮我们提供了很好的接口,我们会使用就好,我们主要介绍两种:

   1,win32环境的api风格,代码如下:

  1. OPENFILENAME ofn;  
  2. TCHAR szFileName[MAX_PATH] = _T("");  
  3. ZeroMemory(&ofn, sizeof(ofn));  
  4. ofn.lStructSize = sizeof(ofn);   
  5. ofn.hwndOwner = hWnd;    //父窗口句柄  
  6. ofn.lpstrFilter = _T("Text Files (*.xml)\0*.xml\0All Files (*.*)\0*.*\0");   //打开的文件类型,这里以xml和所有文件为例  
  7. ofn.lpstrFile = szFileName;  
  8. ofn.nMaxFile = MAX_PATH;  
  9. ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;  
  10. ofn.lpstrDefExt = _T("xml");        //默认的打开的文件类型  
  11. ofn.lpstrInitialDir=_T(".\\");     //默认的打开的文件路径,这里以当前目录为例  
  12.   
  13. if(GetOpenFileName(&ofn))  
  14. {  
  15.     //szFileName为获取的文件名  
  16.     // do something   
  17. }  

 

   2,MFC环境的类的风格(或者说是C#或者VB中的控件风格),代码如下:

  1. CString StrFile;        
  2. CString defExe("txt");  
  3. CString defFileName("*.txt");  
  4. CString defFilter("文本文档(*.txt)|*.txt|所有文件(*.*)|*.*|");  
  5. CFileDialog dlg(true,defExe,defFileName,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,defFilter);  
  6. dlg.m_ofn.lpstrInitialDir= _T(".\\");   
  7. if(dlg.DoModal()==IDOK)  
  8. {  
  9.    StrFile = dlg.GetPathName();  
  10.    // do something   
  11. }  


       C#风格如下:    

[csharp]  view plain copy print ?
  1. OpenFileDialog openFileDialog=new OpenFileDialog();  
  2. openFileDialog.InitialDirectory="c:\\";//注意这里写路径时要用c:\\而不是c:\  
  3. openFileDialog.Filter="文本文件|*.*|C#文件|*.cs|所有文件|*.*";  
  4. openFileDialog.RestoreDirectory=true;  
  5. openFileDialog.FilterIndex=1;  
  6. if (openFileDialog.ShowDialog()==DialogResult.OK)  
  7. {  
  8.    string fName=openFileDialog.FileName;  
  9.    //do something  
  10. }  


 

      可以看出,这三个风格其实很想象,最主要的就是那么几个属性,Filter表示可以打开的文件的类型,InitialDir表示默认打开的路径,defext表示默认打开的文件类型


转自:http://blog.csdn.net/jxluofeng/article/details/9265667

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值