gpt4 book ai didi

C++ 在窗口中打开文件对话框

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:17 30 4
gpt4 key购买 nike

我有 C++ 代码来显示对话框选择器文件。我希望用户只能指定选择器类型的文件。我的对话框可以显示指定的类型文件,但用户可以像我的图片一样在文件名中输入其他类型的文件

enter image description here

那么,如何让用户只输入在lpstrFilter 中指定的文件名和搜索类型文件呢?或者我可以禁用文件名框吗?

这是我的代码:

const wchar_t* ChooserFile(const char* typeFile)
{
try
{
ZeroMemory( &sfn , sizeof( sfn));
sfn.lStructSize = sizeof ( sfn );
sfn.hwndOwner = NULL ;
wchar_t w_syFile[MAX_PATH];
//mbstowcs(w_syFile, syFile, strlen(syFile)+1);//Plus null
size_t convertedChars = 0;
mbstowcs_s(&convertedChars, w_syFile, MAX_PATH, syFile, _TRUNCATE);
sfn.lpstrFile = w_syFile ;
sfn.lpstrFile[0] = _T('\0');
sfn.nMaxFile = sizeof( syFile );

//TypeFile
sfn.lpstrFilter = TEXT("Microsoft Office Word Documents (*.xlsx)\0*.XLSX\0");

sfn.nFilterIndex =1;
sfn.lpstrFileTitle = NULL ;
sfn.nMaxFileTitle = 0 ;
sfn.lpstrInitialDir=NULL;

//sfn.Flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT|OFN_EXPLORER | OFN_ENABLEHOOK ;
sfn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_NOVALIDATE|OFN_HIDEREADONLY ;
if (GetOpenFileName( &sfn ) != TRUE)
{
wstrPathFile = TEXT("");
return wstrPathFile.c_str();
}

DWORD retval=0;
//BOOL success;
TCHAR buffer[BUFSIZE]=TEXT("");
TCHAR buf[BUFSIZE]=TEXT("");
TCHAR** lppPart={NULL};

wchar_t wstrPath[BUFSIZE];
retval = GetFullPathNameW(sfn.lpstrFile,sfn.nMaxFile,wstrPath,lppPart);
if (retval==0)
{
wstrPathFile = TEXT("");
return wstrPathFile.c_str();
}
std::wstring s(wstrPath);
wstrPathFile = s;
wcout<<wstrPathFile<<endl;
return wstrPathFile.c_str();
}
catch (...)
{
PrintToFile("ChooserFile","Error");
wstrPathFile = TEXT("");
return wstrPathFile.c_str();
}
}

最佳答案

I want to the user can only chooser type file specified.

您不能通过在文件名编辑控件中键入来阻止用户选择他们喜欢的任何文件。因此,您应该让他们这样做,而不是验证文件名是否符合您的要求。

您有几个选择可以做到这一点:

  1. 让对话框返回,如果文件名不符合您的要求,则向用户显示一个错误对话框,让他们知道出了什么问题。
  2. OPENFILENAME 结构的 lpfnHook 成员中提供一个 Hook 过程。这将发送一个 CDN_FILEOK用户尝试接受文件时的通知消息。执行验证以响应该消息。如果文件名不符合要求,则显示一条消息并返回一个非零值以强制对话框保持打开状态。

关于C++ 在窗口中打开文件对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32267246/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com