8578
|
1 |
#include <stdio.h>
|
|
2 |
#include "fileDialogWithSharedMemory.h"
|
|
3 |
|
|
4 |
using namespace std;
|
|
5 |
|
|
6 |
int main(int argc, char *argv[]) {
|
|
7 |
HANDLE hMapFile;
|
|
8 |
fileDialogData *pFddShared;
|
|
9 |
BOOL hasResult;
|
|
10 |
OPENFILENAMEW ofn;
|
|
11 |
|
|
12 |
hMapFile = OpenFileMapping(
|
|
13 |
FILE_MAP_ALL_ACCESS,
|
|
14 |
FALSE,
|
|
15 |
argv[1]);
|
|
16 |
|
|
17 |
if (hMapFile == NULL) {
|
|
18 |
printf("Could not open file mapping object (%d).\n", (int)GetLastError());
|
|
19 |
return 1;
|
|
20 |
}
|
|
21 |
|
|
22 |
pFddShared = (fileDialogData*)MapViewOfFile(
|
|
23 |
hMapFile,
|
|
24 |
FILE_MAP_ALL_ACCESS,
|
|
25 |
0,
|
|
26 |
0,
|
|
27 |
sizeof(fileDialogData));
|
|
28 |
|
|
29 |
if (pFddShared == NULL) {
|
|
30 |
printf("Could not map view of file (%d).\n", (int)GetLastError());
|
|
31 |
CloseHandle(hMapFile);
|
|
32 |
return 1;
|
|
33 |
}
|
|
34 |
|
|
35 |
pFddShared->fileDialogThreadId = GetCurrentThreadId();
|
|
36 |
ZeroMemory(&ofn, sizeof(ofn));
|
|
37 |
|
|
38 |
ofn.lStructSize = sizeof(OPENFILENAMEW);
|
|
39 |
ofn.lpstrFile = pFddShared->filename;
|
|
40 |
ofn.lpstrInitialDir = pFddShared->directory;
|
|
41 |
ofn.nMaxFile = MAX_PATH;
|
|
42 |
ofn.lpstrTitle = pFddShared->title;
|
|
43 |
ofn.lpstrFilter = pFddShared->filter;
|
|
44 |
ofn.nFilterIndex = pFddShared->filterIndex;
|
|
45 |
ofn.hwndOwner = (HWND)pFddShared->owningWindow;
|
|
46 |
|
|
47 |
if (pFddShared->trueForSave) {
|
|
48 |
if (pFddShared->trueForPromptOverwrite) {
|
|
49 |
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST ;
|
|
50 |
} else {
|
|
51 |
ofn.Flags = OFN_PATHMUSTEXIST;
|
|
52 |
}
|
|
53 |
|
|
54 |
hasResult = GetSaveFileNameW(&ofn);
|
|
55 |
} else {
|
|
56 |
if (pFddShared->trueForMultiSelect) {
|
|
57 |
ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT;
|
|
58 |
} else {
|
|
59 |
ofn.Flags = OFN_FILEMUSTEXIST;
|
|
60 |
}
|
|
61 |
|
|
62 |
hasResult = GetOpenFileNameW(&ofn);
|
|
63 |
}
|
|
64 |
|
|
65 |
if (hasResult) {
|
|
66 |
pFddShared->filterIndex = ofn.nFilterIndex;
|
|
67 |
} else {
|
|
68 |
ZeroMemory(&pFddShared->filename, sizeof(pFddShared->filename));
|
|
69 |
}
|
|
70 |
|
|
71 |
pFddShared->fileDialogDidReturn = TRUE;
|
|
72 |
|
|
73 |
UnmapViewOfFile(pFddShared);
|
|
74 |
CloseHandle(hMapFile);
|
|
75 |
|
|
76 |
return 0;
|
|
77 |
}
|