probleme avec GetOpenFileName() sous Visual C++ - Programmation
Marsh Posté le 11-04-2001 à 23:53:26
Cela devrait répondre à ta question:
BOOL FileOpen (HWND hwnd,char *filename)
{
OPENFILENAME ofn ;
char szFilter[] = "Dossiers\0..\0" \
"Tous les fichiers (*.*)\0*.*\0\0" ;
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hwnd ;
ofn.hInstance = NULL ;
ofn.lpstrFilter = szFilter ;
ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = 0 ;
ofn.nFilterIndex = 0 ;
ofn.nMaxFile = _MAX_PATH ;
ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT ;
ofn.lpstrInitialDir = NULL ;
ofn.lpstrTitle = NULL ;
ofn.nFileOffset = 0 ;
ofn.nFileExtension = 0 ;
ofn.lpstrDefExt = "txt" ;
ofn.lCustData = 0L ;
ofn.lpfnHook = NULL ;
ofn.lpTemplateName = NULL ;
ofn.lpstrFile = filename;
ofn.lpstrFileTitle = NULL;
ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
return GetOpenFileName(&ofn);
}
Avec ce bout de code normalement ça marche (enfin ça marche pour moi.
Voila
Marsh Posté le 12-04-2001 à 08:39:50
merci slashp, mais apres pour recuperer le nom et le chemin, pas facile, et est ce que tu maitrise le SHBrowseForFolder ?
Marsh Posté le 12-04-2001 à 10:03:47
Pour faire un browse folder utiliser la fct suivante:
BOOL BrowseFolder(HWND hwnd,char *directory)
{
BROWSEINFO browse;
LPITEMIDLIST itemidlist;
browse.hwndOwner=hwnd;
browse.pszDisplayName=directory;
browse.lpszTitle=NULL;
browse.ulFlags=BIF_EDITBOX;
browse.lpfn=NULL;
browse.lParam=0;
browse.pidlRoot=NULL;
if ((itemidlist=SHBrowseForFolder(&browse))==NULL)
return 0;
if (SHGetPathFromIDList(itemidlist,directory)==NULL)
return 0;
strcat(directory,"\\" ); //rajoute un slash à la fin du chemin du dossier
return 1;
}
Voila...
Marsh Posté le 12-04-2001 à 10:11:38
pouah, encore une fois merci, je vais tester ca tout de suite sans plus tarder !!!!!!!!!!
Marsh Posté le 10-04-2001 à 09:27:22
Je crée une structure OPENFILENAME test; et j'initialise les champs comme ci dessous :
test.Flags = OFN_ALLOWMULTISELECT ;
char Filtre[22] = "BITMAP FILE *.BMP ";
Filtre[11] = 0;
Filtre[17] = 0;
Filtre[18] = 0;
test.lpstrFilter = Filtre;
test.lpstrTitle = "CHARGER";
test.lStructSize = sizeof(test);
Et puis je fais à un moment donné dans mon programme un GetOpenFileName. Cela marche, je peux choisir un fichier, mais apres une fois que 'lutilisateur appuie sur OK, la chaine indiquat le chemin choisi (test.lpstrFile) et celle contenant le nom du fichier (test.lpstrFileTitle) ne sont pas initialisées.
Est ce que qqun maitrise, j'ai rien trouvé sur MSDN...