【问题标题】:Problems with CFileDialog instantiationCFileDialog 实例化的问题
【发布时间】:2015-01-18 21:32:41
【问题描述】:

我遵循CFileDialog 的定义,但 VS2013 仍然告诉我没有可用于我传入的参数的构造函数。

我的代码:

CFile theFile;
char strFilter[] = { "TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||" };
CFileDialog fDlg = CFileDialog(TRUE, ".txt", NULL, 0, strFilter);

产生的错误:

1 IntelliSense:没有构造函数“CFileDialog::CFileDialog”的实例与参数列表匹配 参数类型为: (int, const char [5], int, int, char [46]) c:\Users\Jonathan\Documents\Visual Studio 2013\Projects\SDI\SDI\MainFrm.cpp 131 21 SDI

还有CFileDialog构造函数供参考:

explicit CFileDialog(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs
    LPCTSTR lpszDefExt = NULL,
    LPCTSTR lpszFileName = NULL,
    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
    LPCTSTR lpszFilter = NULL,
    CWnd* pParentWnd = NULL,
    DWORD dwSize = 0,
    BOOL bVistaStyle = TRUE);

有什么问题?

【问题讨论】:

  • 这是 UNICODE 版本还是 MBCS?
  • @PaulMcKenzie 我不知道如何回答这个问题。这是一个空白的 MFC 程序,这是我在文件中输入的第一段代码->打开事件处理程序
  • @user134788 在您的字符串文字前加上 L 并重试。您必须将strFilter 的类型更改为WCHAR。如果您同意使用 T 宏的想法,请将您的文字用_T() 括起来,并使用TCHAR 作为strFilter[] 的类型

标签: c++ mfc cfiledialog


【解决方案1】:

问题似乎是您使用了不正确的字符串类型。

快速解决方案是使用TCHAR 而不是char。更好的解决方案是只使用宽字符串并确保构建是 Unicode。

在 Visual Studio 中创建项目时,使用的默认字符集类型是 Unicode,而不是 MBCS,也不是“未设置”。这意味着采用字符数组和指针的 Windows API 和 MFC 函数将使用宽字符。因此,在需要宽字符串的 Windows API 函数上使用 charchar *const char* 将无法编译。

即使您对 Unicode 或 MBCS 一无所知,您的代码错误的迹象是您调用的函数采用 LPCTSTR 的类型——这 不是 @987654327 @,就是这样,即指向TCHAR 的常量指针。如果您坚持知道使用指定的类型,那么您会很高兴。

所以教训是,如果一个函数需要一个类型,请提供该类型的变量或表达式,而不是您认为该类型等价的内容。

【讨论】:

    【解决方案2】:

    好的。因此,我将代码更改为以下内容:

    CFile theFile;
    TCHAR strFilter[] = { _T("TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||") };
    CFileDialog fDlg = CFileDialog(TRUE, _T(".txt"), NULL, 0, strFilter);
    

    而且,现在没有问题了。感谢您的回复!

    【讨论】:

    • TCHAR 的另一件事是您不应该将L"..." 用于字符串,甚至不应该使用"..." 您应该使用_T("...")。这是因为 TCHAR 可以是 charWCHAR
    猜你喜欢
    • 2014-01-25
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    相关资源
    最近更新 更多