【问题标题】:CFileDialog truncates offered file nameCFileDialog 截断提供的文件名
【发布时间】:2014-10-02 07:39:21
【问题描述】:

一旦打开 CFileDialog,我就会有奇怪的行为。提供的文件名看起来好像被截断了,所以只有最后 n 个字符可见:

image http://ves.fijmovi.com/cpp/CFileDialog_1.jpg

只要我点击名字的空格,我就可以看到整个文件名:

image http://ves.fijmovi.com/cpp/CFileDialog_2.jpg

所以它并没有真正被截断,只是显示的字符串的开始位置不是从头开始的。 在这种情况下,完整的文件名是 36 个字符长,我在打开对话框时得到的部分字符串是从第 21 个字符到最后一个字符。我用其他一些更长的文件进行了测试,它们也出现了截断,但不是从第 21 个字符开始,而是从其他一些字符开始。我认为这没有任何意义。

这段代码已经有好几年了:

// Ask user for name and location of the ZIP
CString  OfferName = DEFAULT_ZIPFILE_NAME;
CString  File_Mask = GetString (IDS_ZIP_SELECT);

CFileDialog fileDlg (TRUE, _T("zip"), OfferName,
                     OFN_EXPLORER | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ENABLESIZING,
                     File_Mask, pStateThread->GetThreadWindow());

CString strTitleName     = GetString (IDS_ARCHIVE_CAPTION);
fileDlg.m_ofn.lpstrTitle = strTitleName;

CString  Default_Dir = pConfig->GetTricUserKey (_T("TricSupportDir"));
fileDlg.m_ofn.lpstrInitialDir = Default_Dir;

if (fileDlg.DoModal () != IDOK) {
        //..
}

我应该为 m_ofn 使用一些特殊的标志吗?我已经阅读了关于 OPENFILENAME 结构的 MSN 文章,但我认为没有任何值得添加到现有标志的内容。

对可能发生的事情有什么想法吗?

【问题讨论】:

  • 看起来输入字段在显示长名称时只是向右滚动,然后当您单击它时,它会向左滚动。这与截断数据无关。
  • 如果可以,请尝试禁用“Vista 风格”文件对话框(将FALSE 作为可选的最终参数传递给构造函数)。听起来旧版本可能没有这个问题。
  • 或者尝试将初始对话框大小设置为较大而不是未指定。步骤的顺序可能是: 创建一个窄对话框。填充初始文件名。文本框对于完整的文件名来说太窄了,所以向右滚动。哦;我们应该自动调整这个东西的大小,所以我们现在就这样做。现在文本框已经足够宽了,但它已经被滚动了。
  • 糟糕;我误解了 dwSize 参数的含义(它不是窗口大小)。我看不到直接设置初始窗口大小的方法(不派生你自己的类?),但我仍然怀疑我所描述的事情正在发生。
  • @dlf 谢谢。我已经尝试禁用 Vista 风格,但没有帮助。我看到你的其他想法..嗯,在我看来,初始对话框已经足​​够大了,但也许我会尝试按照你说的做,派生出我自己的类并找出一些东西

标签: c++ mfc cfiledialog


【解决方案1】:

它发生在我使用打开文件对话框的所有软件中。我认为这只是该对话的近期化身的一个特点。

【讨论】:

猜你喜欢
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
相关资源
最近更新 更多