PDA

View Full Version : [C++ & API Win32] Il dialog Apri (e quello salva)


djpeppe
28-06-2007, 14:12
ho studiato un bel pò di API WIN32. vorrei mettere nel mio programma un dialog quasi identoco a quello del blocco note. uno semplicissimo ma che mi permette di visualizzare i file.
avevo visto la funzione GetOpenFileName() e una simile per salvare ... nel mio programma avevo

FILE *fe; //file
char* filePath; //percorso del file fe

come faccio?

andbin
28-06-2007, 14:33
avevo visto la funzione GetOpenFileName()Appunto: crei una variabile di tipo struttura OPENFILENAME, la valorizzi con tutti i dati necessari (e qui basta solo leggere la documentazione), quindi chiami GetOpenFileName/GetSaveFileName. Se la funzione ha successo, nel campo lpstrFile hai il nome del file selezionato.

Usi poi quel nome di file per aprire il file con fopen, ecc....

djpeppe
28-06-2007, 16:23
OPENFILENAME ofn; // common dialog box structure
HANDLE hf; // file handle
FILE *fe; //file
char* filePath; //percorso del file fe

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwn;
ofn.lpstrFile = filePath;
ofn.lpstrFile[0] = '\0';**********************
ofn.nMaxFile = sizeof(filePath);
ofn.lpstrFilter = "All\0*.*\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

if (GetOpenFileName(&ofn)==TRUE)
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);

questo codice si blocca dove ci sono gli asterischi.

andbin
28-06-2007, 16:33
ofn.lpstrFile[0] = '\0';**********************
Se vai a vedere la documentazione, il campo lpstrFile è solo un LPTSTR, un puntatore ad una stringa.
Devi farlo puntare ad un buffer di almeno 256 caratteri (che definisci tu a parte) e inizialmente devi mettere '\0' nel primo carattere.