Newsgroup: it.comp.programmare.win32
Titolo: Open file dialog

Ciao a tutti, avrei bisogno di gestire una finestra di quelle classiche per
il caricamento di un file (ci saranno quindi un listbox con i volumi [C:, D:
E:, F:] e una delle dir dalla quale l'utente sceglierà il file, oltre -
logicamente - a OK e CANCEL), e mi servirebbe informazioni su come rilevare
le directory e farle comparire nel listbox, insomma uno sguardo generale sul
problema, come posso fare ?
Grazie


non puoi usare una finestra di dialogo già fatta (vedi API GetOpenFileName)?

 ha scritto nel messaggio
news:anbc7.140459$Qf6.9...@news2.tin.it...


 ha scritto nel messaggio
news:anbc7.140459$Qf6.9...@news2.tin.it...



per l'errore non lo so, l'id non serve darglielo credo

 devo fornire io, e se sì dove devo comunicare qual'è l'id del dialogo ??
La funzione crea una sua FileDialog di default, ma se proprio non ti dovesse
bastare mi pare che sia possibile fargli utilizzare un template
personalizzato modificando un paio di membri della struttura OPENFILENAME
( sempre se non ricordo male...).
Bye By Mau : )

 terminata con successo"...
Prova a chiamare, dopo aver letto la documentazione relativa,
DWORD CommDlgExtendedError(VOID)
Una nota su
BOOL GetOpenFileName(
    LPOPENFILENAME lpofn  // address of structure with initialization data
   );
quando mi e' capitato di usarla ho notato che bisognava assegnare a
    lpofn->lStructSize
il valore OPENFILENAME_SIZE_VERSION_400 e non sizeof(OPENFILENAME)
see anche il file commdlg.h
ciao
Massimo

 see anche il file commdlg.h
Bho... a me funziona anche con 'sizeof( OPENFILENAME )', per quello che ho
pututo notare gli unici membri di OPENFILENAME da settare obbligatoriamente
(pena il fallimento della chiamata a GetOpenFileName ) sono, oltre alla già
citata lStructSize, lpstrfile che contiene il puntatore al buffer di
caratteri che  la funziona andrà a riempire con il Path selzionato
dall'utente e nMaxFile che indica la dimensione del suddetto Buffer.
Bye
Mau : )

 ha scritto nel messaggio
news:Z1Rc7.160566$Qf6.9...@news2.tin.it...


 UNICI ERRORI DELLA COMPILAZIONE !!!
// Begin ////////////////////////////////////////////
#include <windows.h>
char filtro[256];
OPENFILENAME ofn = { sizeof(OPENFILENAME), NULL, NULL, "Any file\*.*", NULL,
         0, 1, filtro, 256, NULL, 0, NULL,
       "Open a file", OFN_FILEMUSTEXIST, 0,
       1,"", NULL,NULL, NULL };
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpCmdLine, int nCmdShow)
{
   if ( !GetOpenFileName( &ofn ) )
      if ( CDERR_STRUCTSIZE ==  CommDlgExtendedError() )
         MessageBox( NULL, "Errore sizeof", NULL, MB_OK );
   ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
   if ( !GetOpenFileName( &ofn ) )
      if ( CDERR_STRUCTSIZE ==  CommDlgExtendedError() )
         MessageBox( NULL, "Errore OPENFILENAME_SIZE_VERSION_400", NULL,
MB_OK );
   return 0;
}
// End /////////
Appena compilato con BCB5 su Win98 con le relative impostazioni file.cpp
Nessun errore in compilazione e MessageBox con Errore sizeof
seguito da visualizzazione della dialog Open a file con Folder iniziale
Documenti.
Per il resto l'SDK mi dice che la import library di CommDlgExtendedError e'
la comdlg32.lib ma non devo specificarla. Non so se con VC++ debba
aggiungerla tu.
Per quanto riguarda il sizeof temo che siano gli header che accompagnano il
BCB in conflitto con le dll che ho sul computer. Se risolvi fammi sapere.
ciao
Massimo

 ha scritto nel messaggio
news:b8Uc7.181$2L....@news.infostrada.it...
[...]
Questa è la funzione che uso io... (VC++ 6.0) e sembra funzionare...
----------------------------------------------------------------------------
----------------------------------
void OnFileOpen()
{
     OPENFILENAME OpnFileName;
     ZeroMemory( &OpnFileName, sizeof( OpnFileName ) );
     static char FileName[ 128 ];       // * N.B. Se FileName non è STATIC,
GetOpenFileName fallisce! * //
     OpnFileName.lStructSize      =  sizeof( OPENFILENAME );
     OpnFileName.hInstance        =  NULL;
     OpnFileName.hwndOwner   =  NULL;
     OpnFileName.lpstrFile          =  FileName;
     OpnFileName.nMaxFile        =  sizeof( FileName );
     OpnFileName.lpstrFilter        =  "All Files (*.*)\0*.*\0Dat files
(*.DAT)\0*.DAT\0";
     OpnFileName.nFilterIndex    =  1;
     OpnFileName.lpstrFileTitle    =  NULL;
     OpnFileName.nMaxFileTitle  =  0;
     OpnFileName.lpstrInitialDir    =  NULL;
     OpnFileName.Flags               =  OFN_PATHMUSTEXIST |
OFN_FILEMUSTEXIST;
     if( GetOpenFileName( &OpnFileName ) == TRUE )
     {
          DatFile = fopen( OpnFileName.lpstrFile, "rb" );
          if( DatFile == NULL )  MessageBox( NULL, "Impossibile aprire il
file", "FILE ERROR", MB_OK );
     }
}
----------------------------------------------------------------------------
----------------------------------

 news:b8Uc7.181$2L....@news.infostrada.it...

Allora il tuo codice va bene se lo eseguo nella sezione delle variabili
globali.
Se la sposto, per quanto sintatticamente esatta, mi impedisce la
compilzione. Per ora va bene cosě. Torno ai miei vertex buffer..... ;(
Grzie di tutto !