winNativeFileDialog/FileDialog.cpp
author Stefan Vogel <sv@exept.de>
Wed, 26 Feb 2020 14:50:44 +0100
changeset 9009 1b4dfccafd87
parent 8578 bf8920edec8a
permissions -rw-r--r--
#REFACTORING by stefan class: DisplayRootView changed: #initialize

#include <stdio.h>
#include "fileDialogWithSharedMemory.h"

using namespace std;

int main(int argc, char *argv[]) {
    HANDLE hMapFile;
	fileDialogData *pFddShared;
    BOOL hasResult;
    OPENFILENAMEW ofn;

    hMapFile = OpenFileMapping(
        FILE_MAP_ALL_ACCESS,
        FALSE,
        argv[1]);

    if (hMapFile == NULL) {
        printf("Could not open file mapping object (%d).\n", (int)GetLastError());
        return 1;
    }

    pFddShared = (fileDialogData*)MapViewOfFile(
        hMapFile,
        FILE_MAP_ALL_ACCESS,
        0,
        0,
        sizeof(fileDialogData));

    if (pFddShared == NULL) {
        printf("Could not map view of file (%d).\n", (int)GetLastError());
        CloseHandle(hMapFile);
        return 1;
    }

    pFddShared->fileDialogThreadId = GetCurrentThreadId();
    ZeroMemory(&ofn, sizeof(ofn));

    ofn.lStructSize = sizeof(OPENFILENAMEW);
    ofn.lpstrFile = pFddShared->filename;
    ofn.lpstrInitialDir = pFddShared->directory;
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrTitle = pFddShared->title;
    ofn.lpstrFilter = pFddShared->filter;
    ofn.nFilterIndex = pFddShared->filterIndex;
    ofn.hwndOwner = (HWND)pFddShared->owningWindow;

    if (pFddShared->trueForSave) {
		if (pFddShared->trueForPromptOverwrite) {
            ofn.Flags = OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST ;
		} else {
            ofn.Flags = OFN_PATHMUSTEXIST;
		}

        hasResult = GetSaveFileNameW(&ofn);
    } else {
        if (pFddShared->trueForMultiSelect) {
            ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT;
        } else {
			ofn.Flags = OFN_FILEMUSTEXIST;
        }

        hasResult = GetOpenFileNameW(&ofn);
    }

    if (hasResult) {
		pFddShared->filterIndex = ofn.nFilterIndex;
	} else {
        ZeroMemory(&pFddShared->filename, sizeof(pFddShared->filename));
    }

    pFddShared->fileDialogDidReturn = TRUE;

    UnmapViewOfFile(pFddShared);
    CloseHandle(hMapFile);

    return 0;
}