1

我知道这样一个新手问题,但我似乎无法在网上找到任何答案。基本上我正在使用 CFile 对话框,但不确定是否应该将其放入 .cpp 文件或头文件中。提前致谢。

CFileDialog( BOOL bOpenFileDialog, 
             LPCTSTR lpszDefExt = NULL, 
             LPCTSTR lpszFileName = NULL, 
             DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
             LPCTSTR lpszFilter = NULL, 
             CWnd* pParentWnd = NULL ); 

克里斯BD编辑

好的,所以我已将包含添加到我的 FileDialogDlg.cpp 并添加了代码:

CFileDialog fileDlg( TRUE, 
                     NULL, 
                     NULL, 
                     OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY, 
                     "All Files (.)|*.*||", 
                     this); 

// Initializes m_ofn structure 
fileDlg.m_ofn.lpstrTitle = "My File Dialog"; 

// Call DoModal 
if ( fileDlg.DoModal() == IDOK) 
{ 
    CString szlstfile = fileDlg.GetPathName(); // This is your selected file 
                                               // name with path

    AfxMessageBox("Your file name is :" +szlstfile ); 
} 

我的编译器仍然显示大量错误

4

3 回答 3

2

我对“无法从 ... 转换参数 5”错误的赌注是,您将应用程序编译为 Unicode(这是一件好事)。然后,您必须在代码中为字符串参数使用支持 Unicode 的字符串文字:

CFileDialog fileDlg( TRUE,  
                     NULL,  
                     NULL,  
                     OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY,  
                     L"All Files (.)|*.*||", // <-- I Added the leading L  
                     this);  

TEXT()您还可以决定使用宏或其_T()快捷方式使其同时兼容 ANSI/Unicode 。

CFileDialog fileDlg( TRUE,  
                     NULL,  
                     NULL,  
                     OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY,  
                     _T("All Files (.)|*.*||"), // <-- _T("blah")
                     this);  
于 2011-10-25T12:48:42.600 回答
1

答案都不是-CFileDialog已经在afxdlgs.h(根据CFileDialog文档)为您声明了该类,所以只需:

#include <afxdlgs.h>

然后你可以CFileDialog在你的代码中使用。

于 2011-10-25T08:33:17.843 回答
1

我建议您在本地创建一个新实例,设置其属性,然后以模态方式打开它。例如:

// Create an Open dialog; the default file name extension is ".txt".
   CFileDialog fileDlg (TRUE, "txt", "*.txt", OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);

   // Display the file dialog. When user clicks OK, fileDlg.DoModal() 
   // returns IDOK.
   if( fileDlg.DoModal ()==IDOK )
   {
      CString pathName = fileDlg.GetPathName();

      // Implement opening and reading file in here.
      ...
   }
于 2011-10-25T08:47:35.203 回答