Как используя winapi сделать диалог сохранения файла?

Для создания диалога сохранения файла в WinAPI вы можете использовать функцию GetSaveFileName из библиотеки Comdlg32. Вот пример кода на языке C для создания диалога сохранения файла:

#include <windows.h>
#include <commdlg.h>

int main()
{
    OPENFILENAME ofn;       // Структура для хранения информации о диалоге сохранения файла
    TCHAR szFile[MAX_PATH]; // Массив для хранения выбранного пути и имени файла

    // Инициализация структуры OPENFILENAME
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = NULL;
    ofn.lpstrFile = szFile;
    ofn.lpstrFile[0] = '';
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = TEXT("Text Files (*.txt)*.txtAll Files (*.*)*.*"); // Фильтр файлов для диалога
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_OVERWRITEPROMPT; // Опция для включения диалога подтверждения перезаписи файла

    // Открытие диалога сохранения файла
    if (GetSaveFileName(&ofn) == TRUE)
    {
        // Здесь вы можете использовать выбранный путь и имя файла, например, для сохранения данных
        // ...
    }
    else
    {
        // Обработка ошибки или отмены диалога сохранения файла
        // ...
    }

    return 0;
}

В данном примере мы создаем структуру OPENFILENAME, которая инициализируется с помощью функции ZeroMemory. Затем мы задаем необходимые параметры для диалога сохранения файла, такие как фильтр файлов, опции и размеры массива для хранения пути и имени файла. Затем вызываем функцию GetSaveFileName, которая открывает диалог сохранения файла.

Если пользователь выбирает путь и имя файла и нажимает кнопку "Сохранить", то функция GetSaveFileName возвращает TRUE, и вы можете использовать выбранный путь и имя файла для дальнейших действий, например, для сохранения данных в файл.

Если пользователь отменил диалог сохранения файла или произошла ошибка, функция GetSaveFileName возвращает FALSE, и вы можете обработать эту ситуацию соответствующим образом.

Обратите внимание, что для использования функций WinAPI и библиотеки Comdlg32 вам может потребоваться включить соответствующие заголовочные файлы и связанные библиотеки в проект вашего приложения. Это можно сделать, установив необходимые пути к заголовочным файлам и библиотекам в свойствах проекта или добавив их непосредственно в ваш код с помощью директив препроцессора.