Где я должен объявить экземпляр в c ++? - PullRequest
1 голос
/ 25 октября 2011

Такой вопрос новичка, я знаю, но я не могу найти ответы в Интернете.В основном я использую диалог CFile и не уверен, должен ли я поместить его в файл .cpp или файл заголовка.Заранее спасибо.

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

редактировать ChrisBD

Хорошо, поэтому я добавил включения в мой 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 ); 
} 

Мой компилятор все еще показывает загрузку ошибок

Ответы [ 3 ]

2 голосов
/ 25 октября 2011

Моя ставка на ошибку «невозможно преобразовать параметр 5 из ...» заключается в том, что вы компилируете свое приложение как Unicode (что хорошо). Затем вы должны использовать строковые литералы с поддержкой Unicode в вашем коде для строковых параметров:

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

Вы также можете сделать его совместимым с ANSI / Unicode, используя макрос TEXT() или его ярлык _T().

CFileDialog fileDlg( TRUE,  
                     NULL,  
                     NULL,  
                     OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY,  
                     _T("All Files (.)|*.*||"), // <-- _T("blah")
                     this);  
1 голос
/ 25 октября 2011

Я бы посоветовал вам создать новый экземпляр локально, установить его свойства, а затем открыть его модально. Например:

// 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.
      ...
   }
1 голос
/ 25 октября 2011

Ответ , ни - класс CFileDialog уже объявлен для вас в afxdlgs.h (согласно документации CFileDialog ), поэтому просто:

#include <afxdlgs.h>

Тогда вы можете использовать CFileDialog в своем коде.

...