首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调用CFileDialog类构造函数

如何调用CFileDialog类构造函数
EN

Stack Overflow用户
提问于 2013-07-29 07:37:38
回答 2查看 2.5K关注 0票数 0

我需要在类的所有成员函数中使用一个CFileDialog对象。因此,我将类的头写为:

代码语言:javascript
复制
#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;
};  

并以以下形式实现了类的构造函数:

代码语言:javascript
复制
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);
}  

但是在构造函数中,我得到了错误:

代码语言:javascript
复制
no default constructor exists for class CFileDialog  

有什么问题吗?

问题解决了。我用这种方式实现了这门课。

FilesWorkFlow.h

代码语言:javascript
复制
class FilesWorkFlow
{
public:
    FilesWorkFlow(void);
    virtual ~FilesWorkFlow(void);
    CString GetPath();
    GDALDataset* OpenTiff(CString);
private:
    wchar_t* lpszFilter;
    CFileDialog* dlgFile;
};  

FilesWorkFlow.cpp

代码语言:javascript
复制
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;
    }
 }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-29 10:36:36

要专门化CFileDialog,通常要从它派生,而不是使它成为类成员。但是,不管您做什么,解决方案都是通过初始化程序列表初始化CFileDialog对象。您的构造函数应该如下所示:

代码语言:javascript
复制
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 )
{
}
票数 1
EN

Stack Overflow用户

发布于 2013-07-29 08:38:44

试试这个:

代码语言:javascript
复制
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 ;
}

代码语言:javascript
复制
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);
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17918423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档