Это для IFileDialog
В соответствии с
https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ifiledialog-getfiletypeindex При успешном выборе имени файла, надо вручную получить индекс типа файла
uint32_t fti = 0;
fileSaveDialog->GetFileTypeIndex(&fti);
void Save_data(const char* path) {
MultiByteToWideChar(CP_ACP, 0, path, -1, unicodePath, 256);
HANDLE fileToSave = CreateFileW(unicodePath, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (fileToSave == INVALID_HANDLE_VALUE) {
...
// файл имеет коддировку UTF-16LE
....
}
void SetOpenFileParams(HWND hWnd, bool bOpenFileDialog)
{
ZeroMemory(&wfile, sizeof(wfile));
wfile.lStructSize = sizeof(wfile);
wfile.hwndOwner = hWnd;
wfile.lpstrFile = path_wfile;
wfile.nMaxFile = sizeof(path_wfile);
static wchar_t filters[] =
L"Текстовые файлы (*.txt)\0*.txt\0"
L"Документы Word (*.doc; *.docx)\0*.doc;*.docx\0"
L"Все файлы (*.*)\0*.*\0\0";
wfile.lpstrFilter = filters;
wfile.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_EXPLORER;
if (bOpenFileDialog) {
// Диалоговое окно открытия файла
wfile.Flags |= OFN_FILEMUSTEXIST;
}
else {
// Диалоговое окно сохранения файла
wfile.Flags |= OFN_OVERWRITEPROMPT;
wfile.lpstrDefExt = L""; // Не указывать расширение по умолчанию
wfile.Flags |= OFN_EXTENSIONDIFFERENT;
}
}