Default filename appears truncated in Windows IFileDialog
使用Windows
文件名似乎被截断了,尽管它只是被包裹起来了,所以我们只能看到最后几个字符。看来问题出在Windows文件浏览器对话框。每当提供的默认文件名超过12-13个字符时,它就会被换行。
有人遇到过这样的问题吗?有什么解决方法吗?
操作系统详细信息:
Windows 10版本1709(操作系统内部版本16299.1625)
对话框快照:
以下共享的代码段:
当单击按钮" BrowseFile"时,这是从MFC应用程序调用的函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | void CCustomFileBrowserNewDlg::OnBnClickedBrowseFile() { IFileDialog* pfd = nullptr; IID id = CLSID_FileSaveDialog; const COMDLG_FILTERSPEC c_rgSaveTypes[] = { {L"Word Document (*.doc)", L"*.doc"}, {L"Web Page (*.htm; *.html)", L"*.htm;*.html"}, {L"Text Document (*.txt)", L"*.txt"}, }; HRESULT hr = CoCreateInstance(id, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd)); if (SUCCEEDED(hr)) { hr = pfd->SetFileTypes(ARRAYSIZE(c_rgSaveTypes), c_rgSaveTypes); if (SUCCEEDED(hr)) { hr = pfd->SetFileTypeIndex(1); if (SUCCEEDED(hr)) { //pfd->SetFileName(L"Filename.txt"); // This is okay pfd->SetFileName(L"SomeLongFilename.txt"); // This name gets wrapped around pfd->Show(::GetActiveWindow()); } } pfd->Release(); } } |
通过将焦点设置到另一个控件上并返回到文件名编辑框,我找到了解决此问题的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | STDMETHODIMP MyFileDialogEventsImplementation::OnSelectionChange(IFileDialog* pfd) { if (!m_bInitialized) { m_bInitialized = true; IOleWindow* pOleWindow; if (SUCCEEDED(pfd->QueryInterface(IID_PPV_ARGS(&pOleWindow)))) { HWND hwnd; if (SUCCEEDED(pOleWindow->GetWindow(&hwnd))) { CWnd* pDialog = CWnd::FromHandle(hwnd); if (pDialog != nullptr) { CWnd* pCtrlWithFocus = pDialog->GetFocus(); if (pCtrlWithFocus != nullptr) { CWnd* pNextDlgTabItem = pDialog->GetNextDlgTabItem(pCtrlWithFocus); if (pNextDlgTabItem != nullptr) { pNextDlgTabItem->SetFocus(); pCtrlWithFocus->SetFocus(); } } } } pOleWindow->Release(); } } return S_OK; } |
您的示例中出现的错误很少。您提供的一个示例是"保存"对话框,而屏幕截图是"打开"对话框。
您要谈论的问题将永远不会在"保存"对话框中重现,因为过滤器组合框和"保存"按钮位于默认文本编辑控件的下一行。
现在,您的问题特定于打开对话框,并且由于同一行中的可用空间较少,默认文本不会向左截断。即,由于文件名静态文本,默认文本编辑控件和过滤器组合框在同一行,因此Windows将此解释为默认文本的可用空间较少,并将文本向左换行。如果将文本光标滚动到文件名静态控件,则将获得完整的文本。您可以向MSDN提出此问题。
现在,解决此问题的方法是以最大化模式显示打开文件对话框。一种方法是打开一个对话框,然后将其最大化。接下来的对话框将以最大化模式打开。