分享

控制台下用Win32 API打开文件对话框

 SamBookshelf 2013-09-27

在控制台下打开对话框?!没错,这是完全可以的,实现起来也是相当简单,基本上连雕虫小技都不算。不过网上这样的例子还不是很多,我就把自己写的一个demo贴上来。参考了大名鼎鼎的《windows程序设计》中的一点代码。

  1. #include <Windows.h>  
  2. #include <CommDlg.h>  
  3. #include <iostream>  
  4.   
  5. using namespace std;  
  6.   
  7. static OPENFILENAME ofn ;  
  8.   
  9. void PopFileInitialize (HWND hwnd)  
  10. {  
  11.      static TCHAR szFilter[] = TEXT ("所有图片文件\0*.bmp;*.dib;*.jpg;*.jpeg;*.jpe;*.gif;*.tiff;*.png;*.ico\0")  \  
  12.                                TEXT ("JPEG文件 (*.jpg;*.jpeg;*.jpe)\0*.jpg;*.jpeg;*.jpe\0") \  
  13.                                TEXT ("位图文件 (*.bmp;*.dib)\0*.bmp;*.dib\0") \  
  14.                                TEXT ("GIF (*.gif)\0*.gif\0") \  
  15.                                TEXT ("TIFF (*.tiff)\0*.tiff") \  
  16.                                TEXT ("PNG (*.png)\0*.png") \  
  17.                                TEXT ("ICO (*.ico)\0*.ico\0\0");  
  18.        
  19.      ofn.lStructSize       = sizeof (OPENFILENAME) ;  
  20.      ofn.hwndOwner         = hwnd ;  
  21.      ofn.hInstance         = NULL ;  
  22.      ofn.lpstrFilter       = szFilter ;  
  23.      ofn.lpstrCustomFilter = NULL ;  
  24.      ofn.nMaxCustFilter    = 0 ;  
  25.      ofn.nFilterIndex      = 0 ;  
  26.      ofn.lpstrFile         = NULL ;          // Set in Open and Close functions  
  27.      ofn.nMaxFile          = MAX_PATH ;  
  28.      ofn.lpstrFileTitle    = NULL ;          // Set in Open and Close functions  
  29.      ofn.nMaxFileTitle     = MAX_PATH ;  
  30.      ofn.lpstrInitialDir   = NULL ;  
  31.      ofn.lpstrTitle        = NULL ;  
  32.      ofn.Flags             = 0 ;             // Set in Open and Close functions  
  33.      ofn.nFileOffset       = 0 ;  
  34.      ofn.nFileExtension    = 0 ;  
  35.      ofn.lpstrDefExt       = TEXT ("jpg") ;  
  36.      ofn.lCustData         = 0L ;  
  37.      ofn.lpfnHook          = NULL ;  
  38.      ofn.lpTemplateName    = NULL ;  
  39. }  
  40.   
  41. BOOL PopFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)  
  42. {  
  43.      ofn.hwndOwner         = hwnd ;  
  44.      ofn.lpstrFile         = pstrFileName ;  
  45.      ofn.lpstrFileTitle    = pstrTitleName ;  
  46.      ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;  
  47.        
  48.      return GetOpenFileName (&ofn) ;  
  49. }  
  50.   
  51. int main()  
  52. {  
  53.     static TCHAR     szFileName[MAX_PATH], szTitleName[MAX_PATH] ;  
  54.     HWND      hwnd;  
  55.     hwnd=GetForegroundWindow(); //获取前台窗口句柄。本程序中的前台窗口就是控制台窗口。   
  56.     PopFileInitialize (hwnd);  //初始化ofn  
  57.     PopFileOpenDlg(hwnd, szFileName, szTitleName);//打开文件对话框  
  58.     cout<<szFileName<<endl;  //在控制台中显示选中文件的路径  
  59.     return 0;  
  60. }  
这个程序仅仅是一个简单范例,用于在控制台中打开文件对话框,顺便再控制台中输出选中文件的路径。记得把你的工程属性中得字符集改成多字节字符集,因为在Unicode字符集下路径显示出的是一串数字。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多