Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - OPENFILENAME
Forum - C/C++ - OPENFILENAME

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 22:16
Lunedì, 23/06/2008
Salve a tutti. Ho un problema con l'apertura di una openDialog.

Inizializzo la struttura in questo modo...

Codice sorgente - presumibilmente Plain Text

  1. openFileName.lStructSize = sizeof(OPENFILENAME);
  2. openFileName.hwndOwner = hwnd;
  3.         openFileName.hInstance = hInstance;
  4.         openFileName.lpstrFilter = "*.txt";
  5.         openFileName.lpstrCustomFilter = NULL;
  6.         openFileName.nMaxCustFilter = NULL;
  7.         openFileName.nFilterIndex = 1L;
  8.         openFileName.lpstrFile = file;
  9.         openFileName.lpstrFileTitle = fileTitle;
  10.         openFileName.nMaxFileTitle = sizeof( fileTitle );
  11.         openFileName.lpstrInitialDir = "C:\\";
  12.         openFileName.lpstrTitle = title;
  13.         openFileName.nFileOffset = 0;
  14.         openFileName.nFileExtension = 0;
  15.         openFileName.lpstrDefExt = "*.txt";
  16.         openFileName.lCustData = NULL;
  17.  
  18.         openFileName.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_EXTENSIONDIFFERENT |
  19.                 OFN_OVERWRITEPROMPT;



ma quando richiamo la
Codice sorgente - presumibilmente Plain Text

  1. GetOpenFileName( &openFileName );



e stampo a video openFileName.lpstrFile mi restituisce una stringa vuota.

Qualcuno può aiutarmi?

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 12:21
Mercoledì, 25/06/2008
Secondo me il problema è nella flag OFN_EXPLORER: prova a toglierla.


Testo quotato


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.




Il mio blog: https://piero.dev
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 12:54
Mercoledì, 25/06/2008
Ho provato ma non funziona lo stesso

HELP!!:d:d:d

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 14:06
Mercoledì, 25/06/2008
Hai provato a togliere anche le altre flags?


Il mio blog: https://piero.dev
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 15:38
Mercoledì, 25/06/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++

  1. case ID_FILE_APRI:
  2.  
  3.                         ZeroMemory( &openFileName, sizeof( OPENFILENAME ) );
  4.  
  5.                         openFileName.lStructSize = sizeof(OPENFILENAME);
  6.                         openFileName.hwndOwner = NULL;
  7.                         openFileName.hInstance = NULL;
  8.                         openFileName.lpstrFilter = openDialogFilter;
  9.                         openFileName.lpstrCustomFilter = NULL;
  10.                         openFileName.nMaxCustFilter = sizeof(openDialogFilter);
  11.                         openFileName.nFilterIndex = 1L;
  12.                         //openFileName.lpstrFile = file;
  13.                         openFileName.lpstrFileTitle = NULL;
  14.                         openFileName.nMaxFileTitle = 0;
  15.                         openFileName.lpstrInitialDir = "C:\\";
  16.                         openFileName.lpstrTitle = "Apri...";
  17.                         openFileName.nFileOffset = 0;
  18.                         openFileName.nFileExtension = 0;
  19.                         openFileName.lpstrDefExt = "*.txt";
  20.                         openFileName.lCustData = 0;
  21.  
  22.                         openFileName.Flags = OFN_FILEMUSTEXIST | OFN_EXTENSIONDIFFERENT |
  23.                                 OFN_OVERWRITEPROMPT;
  24.  
  25.                         GetOpenFileName( &openFileName );
  26.                        
  27.                         MessageBox(NULL,openFileName.lpstrFile,NULL,0);
  28.                         break;


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 18:46
Mercoledì, 25/06/2008
Veramente non mi sembra che il codice sia completo...

Ad ogni modo, perchè hai commentato questa riga?

Codice sorgente - presumibilmente Plain Text

  1. //openFileName.lpstrFile = file;



Hai bisogno di un buffer dove memorizzare il nome del file, quindi quella riga serve eccome.

Codice sorgente - presumibilmente C/C++

  1. case ID_FILE_APRI:
  2.             char file[256];
  3.             ZeroMemory( &openFileName, sizeof( OPENFILENAME ) );
  4.  
  5.             openFileName.lStructSize = sizeof(OPENFILENAME);
  6.             openFileName.hwndOwner = NULL;
  7.             openFileName.hInstance = NULL;
  8.             openFileName.lpstrFilter = openDialogFilter;
  9.             openFileName.lpstrCustomFilter = NULL;
  10.             openFileName.nMaxCustFilter = sizeof(openDialogFilter);
  11.             openFileName.nFilterIndex = 1L;
  12.             openFileName.lpstrFile = file;
  13.             openFilename.lpstrFile[0] = '\0';
  14.             openFileName.lpstrFileTitle = NULL;
  15.             openFileName.nMaxFileTitle = 0;
  16.             openFileName.lpstrInitialDir = "C:\\";
  17.             openFileName.lpstrTitle = "Apri...";
  18.             openFileName.nFileOffset = 0;
  19.             openFileName.nFileExtension = 0;
  20.             openFileName.lpstrDefExt = "*.txt";
  21.             openFileName.lCustData = 0;
  22.  
  23.             openFileName.Flags = OFN_FILEMUSTEXIST | OFN_EXTENSIONDIFFERENT |
  24.                 OFN_OVERWRITEPROMPT;
  25.  
  26.             GetOpenFileName( &openFileName );
  27.            
  28.             MessageBox(NULL,openFileName.lpstrFile,NULL,0);
  29.             break;



Il mio blog: https://piero.dev
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 18:58
Mercoledì, 25/06/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
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:06
Mercoledì, 25/06/2008
Testo quotato

Postato originariamente da lorenzo:
Il "case" completo basta.



In questo caso non bastava, ad esempio manca la parte dove sono dichiarate le variabili.

Testo quotato


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.

Testo quotato


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?


Il mio blog: https://piero.dev
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 9:45
Giovedì, 26/06/2008
Codice sorgente - presumibilmente C/C++

  1. OPENFILENAME OpenFileName;
  2.   char szFile[MAX_PATH];
  3.   char CurrentDir[MAX_PATH];
  4.  
  5.   szFile[0] = 0;
  6.   GetCurrentDirectory( MAX_PATH, CurrentDir );
  7.  
  8.   OpenFileName.lStructSize = sizeof( OPENFILENAME );
  9.   OpenFileName.hwndOwner = NULL;
  10.   OpenFileName.lpstrFilter = "All Files\0*.*\0\0";
  11.   OpenFileName.lpstrCustomFilter = NULL;
  12.   OpenFileName.nMaxCustFilter = 0;
  13.   OpenFileName.nFilterIndex = 0;
  14.   OpenFileName.lpstrFile = szFile;
  15.   OpenFileName.nMaxFile = sizeof( szFile );
  16.   OpenFileName.lpstrFileTitle = NULL;
  17.   OpenFileName.nMaxFileTitle = 0;
  18.   OpenFileName.lpstrInitialDir = CurrentDir;
  19.   OpenFileName.lpstrTitle = "Open a file";
  20.   OpenFileName.nFileOffset = 0;
  21.   OpenFileName.nFileExtension = 0;
  22.   OpenFileName.lpstrDefExt = NULL;
  23.   OpenFileName.lCustData = 0;
  24.   OpenFileName.lpfnHook = NULL;
  25.   OpenFileName.lpTemplateName = NULL;
  26.   OpenFileName.Flags = OFN_EXPLORER;
  27.  
  28.   GetOpenFileName( &OpenFileName );
  29.  
  30.   MessageBox(NULL, OpenFileName.lpstrFile, NULL, 0);


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo