Oppure

Loading
23/06/08 20:16
lorenzo
Salve a tutti. Ho un problema con l'apertura di una openDialog.

Inizializzo la struttura in questo modo...

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
GetOpenFileName( &openFileName );


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

Qualcuno può aiutarmi?
aaa
25/06/08 10:21
pierotofy
Secondo me il problema è nella flag OFN_EXPLORER: prova a toglierla.


Da: msdn.microsoft.com/en-us/library/…(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: piero.dev
25/06/08 10:54
lorenzo
Ho provato ma non funziona lo stesso

HELP!!:d:d:d
aaa
25/06/08 12:06
pierotofy
Hai provato a togliere anche le altre flags?
Il mio blog: piero.dev
25/06/08 13:38
lorenzo
Non funziona lo stesso.
Adesso ti faccio vedere il codice completo, magari sbagio io qualcosa prima di inizializzare la struttura...

	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;
aaa
25/06/08 16:46
pierotofy
Veramente non mi sembra che il codice sia completo...

Ad ogni modo, perchè hai commentato questa riga?

//openFileName.lpstrFile = file; 


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

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] = 'Veramente non mi sembra che il codice sia completo...


Ad ogni modo, perchè hai commentato questa riga?

//openFileName.lpstrFile = file; 


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

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] = '{parsed_message}';
            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;
'; 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;
Il mio blog: piero.dev
25/06/08 16:58
lorenzo
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 25/06/08 17:00
aaa
25/06/08 17:06
pierotofy
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?
Il mio blog: piero.dev