Как вызвать конструктор класса CFileDialog

Мне нужен объект CFileDialog для использования во всех функциях-членах класса. Поэтому я написал заголовок класса как:

#pragma once
#include <string.h>
#include "afxdlgs.h"
#include "gdal_priv.h"
#include "cpl_conv.h"
#include "cpl_string.h"
#include "ogr_spatialref.h"


class FilesWorkFlow
{
public:
    FilesWorkFlow(void);
    virtual ~FilesWorkFlow(void);
    CString GetPath();
    GDALDataset* OpenTiff(CString);
private:
    wchar_t* lpszFilter;
    CFileDialog dlgFile;
};  

и реализовал конструктор класса в этой форме:

FilesWorkFlow::FilesWorkFlow(void)
{
    lpszFilter = _T("JPEG Files (*.jpg)|*.jpg|")
    _T("TIFF Files (*.tif)|*.tif|")_T("PNG Files (*.png)|*.png|")_T("Bitmap Files (*.bmp)|*.bmp|");

    dlgFile = CFileDialog(true,0,0,OFN_ENABLESIZING | OFN_HIDEREADONLY,lpszFilter,0,0,true);
}  

но в конструкторе я получаю ошибку:

no default constructor exists for class CFileDialog  

в чем проблема?

-------------------------------------------------- -----------------------------------------

Задача решена. Я реализовал класс таким образом.

FilesWorkFlow.h

class FilesWorkFlow
{
public:
    FilesWorkFlow(void);
    virtual ~FilesWorkFlow(void);
    CString GetPath();
    GDALDataset* OpenTiff(CString);
private:
    wchar_t* lpszFilter;
    CFileDialog* dlgFile;
};  

FilesWorkFlow.cpp

FilesWorkFlow::FilesWorkFlow(void)
{
        lpszFilter = _T("JPEG Files (*.jpg)|*.jpg|")
    _T("TIFF Files (*.tif)|*.tif|")_T("PNG Files (*.png)|*.png|")_T("Bitmap Files (*.bmp)|*.bmp|");
        dlgFile = new CFileDialog(true,0,0,OFN_ENABLESIZING | OFN_HIDEREADONLY,lpszFilter,0,0,true);
}


FilesWorkFlow::~FilesWorkFlow(void)
{
}


CString FilesWorkFlow::GetPath()
{
    if (dlgFile->DoModal() == IDOK)
    {
        CString pathname = dlgFile->GetPathName();
        return pathname;
    }
 }

2 ответа

Решение

Специализировать CFileDialog ты обычно получаешь от этого, вместо того, чтобы сделать это членом класса. Независимо от того, что вы делаете, решение состоит в том, чтобы инициализировать CFileDialog Объект через список инициализатора. Ваш конструктор будет выглядеть так:

FilesWorkFlow::FilesWorkFlow(void) :
    dlgFile( true, 0, 0,
             OFN_ENABLESIENABLESIZING | OFN_HIDEREADONLY,
             _T("JPEG Files (*.jpg)|*.jpg|TIFF Files (*.tif)|*.tif|PNG Files (*.png)|*.png|Bitmap Files (*.bmp)|*.bmp||"),
             0, 0, true )
{
}

Попробуй это:

FilesWorkFlow::FilesWorkFlow(void)
{
    lpszFilter = _T("JPEG Files (*.jpg)|*.jpg|")
    _T("TIFF Files (*.tif)|*.tif|")_T("PNG Files (*.png)|*.png|")_T("Bitmap Files (*.bmp)|*.bmp|");

    CFileDialog *dlgFile = new CFileDialog(true,0,0,OFN_ENABLESIZING | OFN_HIDEREADONLY,lpszFilter,0,0,true);
    ...
    delete dlgfile ;
}

или же

FilesWorkFlow::FilesWorkFlow(void)
{
    lpszFilter = _T("JPEG Files (*.jpg)|*.jpg|")
    _T("TIFF Files (*.tif)|*.tif|")_T("PNG Files (*.png)|*.png|")_T("Bitmap Files (*.bmp)|*.bmp|");

    CFileDialog dlgFile(true,0,0,OFN_ENABLESIZING | OFN_HIDEREADONLY,lpszFilter,0,0,true);
    ...
}
Другие вопросы по тегам