lorenzo (Normal User)
Guru
Messaggi: 1178
Iscritto: 15/04/2008
|
Salve a tutti. Ho un problema con l'apertura di una openDialog.
Inizializzo la struttura in questo modo...
Codice sorgente - presumibilmente Plain Text |
openFileName.lStructSize = sizeof(OPENFILENAME);
openFileName.hwndOwner = hwnd;
openFileName.hInstance = hInstance;
openFileName.lpstrFilter = "*.txt";
openFileName.lpstrCustomFilter = NULL;
openFileName.nMaxCustFilter = NULL;
openFileName.nFilterIndex = 1L;
openFileName.lpstrFile = file;
openFileName.lpstrFileTitle = fileTitle;
openFileName.nMaxFileTitle = sizeof( fileTitle );
openFileName.lpstrInitialDir = "C:\\";
openFileName.lpstrTitle = title;
openFileName.nFileOffset = 0;
openFileName.nFileExtension = 0;
openFileName.lpstrDefExt = "*.txt";
openFileName.lCustData = NULL;
openFileName.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_EXTENSIONDIFFERENT |
OFN_OVERWRITEPROMPT;
|
ma quando richiamo la
Codice sorgente - presumibilmente Plain Text |
GetOpenFileName( &openFileName );
|
e stampo a video openFileName.lpstrFile mi restituisce una stringa vuota.
Qualcuno può aiutarmi? |
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Secondo me il problema è nella flag OFN_EXPLORER: prova a toglierla.
Da: http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx
OFN_EXPLORER
Indicates that any customizations made to the Open or Save As dialog box use the new Explorer-style customization methods. For more information, see Explorer-Style Hook Procedures and Explorer-Style Custom Templates.
By default, the Open and Save As dialog boxes use the Explorer-style user interface regardless of whether this flag is set. This flag is necessary only if you provide a hook procedure or custom template, or set the OFN_ALLOWMULTISELECT flag.
|
|
|
lorenzo (Normal User)
Guru
Messaggi: 1178
Iscritto: 15/04/2008
|
Ho provato ma non funziona lo stesso
HELP!!
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Hai provato a togliere anche le altre flags?
|
|
lorenzo (Normal User)
Guru
Messaggi: 1178
Iscritto: 15/04/2008
|
Non funziona lo stesso.
Adesso ti faccio vedere il codice completo, magari sbagio io qualcosa prima di inizializzare la struttura...
Codice sorgente - presumibilmente C/C++ |
case ID_FILE_APRI:
ZeroMemory( &openFileName, sizeof( OPENFILENAME ) );
openFileName.lStructSize = sizeof(OPENFILENAME);
openFileName.hwndOwner = NULL;
openFileName.hInstance = NULL;
openFileName.lpstrFilter = openDialogFilter;
openFileName.lpstrCustomFilter = NULL;
openFileName.nMaxCustFilter = sizeof(openDialogFilter);
openFileName.nFilterIndex = 1L;
//openFileName.lpstrFile = file;
openFileName.lpstrFileTitle = NULL;
openFileName.nMaxFileTitle = 0;
openFileName.lpstrInitialDir = "C:\\";
openFileName.lpstrTitle = "Apri...";
openFileName.nFileOffset = 0;
openFileName.nFileExtension = 0;
openFileName.lpstrDefExt = "*.txt";
openFileName.lCustData = 0;
openFileName.Flags = OFN_FILEMUSTEXIST | OFN_EXTENSIONDIFFERENT |
OFN_OVERWRITEPROMPT;
GetOpenFileName( &openFileName );
MessageBox(NULL,openFileName.lpstrFile,NULL,0);
break;
|
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Veramente non mi sembra che il codice sia completo...
Ad ogni modo, perchè hai commentato questa riga?
Codice sorgente - presumibilmente Plain Text |
//openFileName.lpstrFile = file;
|
Hai bisogno di un buffer dove memorizzare il nome del file, quindi quella riga serve eccome.
Codice sorgente - presumibilmente C/C++ |
case ID_FILE_APRI:
char file[256];
ZeroMemory( &openFileName, sizeof( OPENFILENAME ) );
openFileName.lStructSize = sizeof(OPENFILENAME);
openFileName.hwndOwner = NULL;
openFileName.hInstance = NULL;
openFileName.lpstrFilter = openDialogFilter;
openFileName.lpstrCustomFilter = NULL;
openFileName.nMaxCustFilter = sizeof(openDialogFilter);
openFileName.nFilterIndex = 1L;
openFileName.lpstrFile = file;
openFilename.lpstrFile[0] = '\0';
openFileName.lpstrFileTitle = NULL;
openFileName.nMaxFileTitle = 0;
openFileName.lpstrInitialDir = "C:\\";
openFileName.lpstrTitle = "Apri...";
openFileName.nFileOffset = 0;
openFileName.nFileExtension = 0;
openFileName.lpstrDefExt = "*.txt";
openFileName.lCustData = 0;
openFileName.Flags = OFN_FILEMUSTEXIST | OFN_EXTENSIONDIFFERENT |
OFN_OVERWRITEPROMPT;
GetOpenFileName( &openFileName );
MessageBox(NULL,openFileName.lpstrFile,NULL,0);
break;
|
|
|
lorenzo (Normal User)
Guru
Messaggi: 1178
Iscritto: 15/04/2008
|
Sarebbe stato inutile postare tutto il codice del programma, dato che sono un migliaio di righe di codice. Il "case" completo basta.
Ho commentato la riga di codice perché in quel modo assegnavo al campo della struttura un array di char vuoto.
Se ho capito bene come funziona la GetOpenFileName, deve essere lei a riempirmi quel campo con il nome del file selezionato.
Assegnare qualsiasi altro valore non servirebbe, tanto sarebbe sovrascritto.
Ultima modifica effettuata da lorenzo il 25/06/2008 alle 19:00 |
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Postato originariamente da lorenzo:
Il "case" completo basta.
|
In questo caso non bastava, ad esempio manca la parte dove sono dichiarate le variabili.
Ho commentato la riga di codice perché in quel modo assegnavo al campo della struttura un array di char vuoto.
|
Invece non andava commentato, perchè in questo modo la funzione non ha spazio dove salvare il nome del file che selezioni.
Se ho capito bene come funziona la GetOpenFileName, deve essere lei a riempirmi quel campo con il nome del file selezionato.
|
Si, ma come ti dicevo prima la funzione deve poter avere uno spazio da riempire con il nome del file.
Ma hai provato a fare come ti ho suggerito?
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Codice sorgente - presumibilmente C/C++ |
OPENFILENAME OpenFileName;
char szFile[MAX_PATH];
char CurrentDir[MAX_PATH];
szFile[0] = 0;
GetCurrentDirectory( MAX_PATH, CurrentDir );
OpenFileName.lStructSize = sizeof( OPENFILENAME );
OpenFileName.hwndOwner = NULL;
OpenFileName.lpstrFilter = "All Files\0*.*\0\0";
OpenFileName.lpstrCustomFilter = NULL;
OpenFileName.nMaxCustFilter = 0;
OpenFileName.nFilterIndex = 0;
OpenFileName.lpstrFile = szFile;
OpenFileName.nMaxFile = sizeof( szFile );
OpenFileName.lpstrFileTitle = NULL;
OpenFileName.nMaxFileTitle = 0;
OpenFileName.lpstrInitialDir = CurrentDir;
OpenFileName.lpstrTitle = "Open a file";
OpenFileName.nFileOffset = 0;
OpenFileName.nFileExtension = 0;
OpenFileName.lpstrDefExt = NULL;
OpenFileName.lCustData = 0;
OpenFileName.lpfnHook = NULL;
OpenFileName.lpTemplateName = NULL;
OpenFileName.Flags = OFN_EXPLORER;
GetOpenFileName( &OpenFileName );
MessageBox(NULL, OpenFileName.lpstrFile, NULL, 0);
|
|
|