IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

pb avec GetOpenFileName()


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut pb avec GetOpenFileName()
    bonjour,

    j'ai un pb avec GetOpenFileName(), l'exemple de Bob n'affiche pa de fenetre pour browser.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    OPENFILENAME st;
    char buffer[MAX_PATH];
     
    // Pas de fichier par défaut
    buf[0]='';
    // On met tous les champs inutilisés à 0
    memset(&st,0,sizeof(OPENFILENAME));
    st.lStructSize=sizeof(OPENFILENAME);
    // hDlg est le HWND de la boite de dialogue qui demande l'ouverture
    // Ou NULL si la boite de dialogue n'a pas de fenêtre parent
    st.hwndOwner=hDlg;
    // La syntaxe est : Description1Filtre1Description2Filtre2
    st.lpstrFilter="Executables - Fichiers de commandes*.exe;*.bat";
    st.lpstrFile=buffer;
    st.nMaxFile=MAX_PATH;
    st.lpstrTitle="Recherche de l'exécutable";
    st.Flags=NULL;
    // Contient le répertoire initial ou NULL
    st.lpstrInitialDir=NULL;
    if(GetOpenFileName(&st))
        // buffer contient notre chemin
    j'ai mis st.hwndOwner=NULL;
    Savez vous pourquoi?

  2. #2
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut j'ai donne un bout de code complet sur ce sujet:
    http://www.developpez.net/forums/vie...hlight=#782731

  3. #3
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut
    Ce code est tres simple , je voudrais juste savoir pourquoi il ne marche pas svp. Ton code fait intervenir des choses qui n'ont pas lieu d'etre au vu des exemples de la MSDN. En gros sans les MFC....
    Voila l'exemple int�gral

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include "stdafx.h"
    #include<commdlg.h>
     
     
     
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
     	// TODO: Place code here.
     
     
    OPENFILENAME ofn;       // common dialog box structure 
    char szFile[260];       // buffer for file name 
    HWND hwnd;              // owner window 
    HANDLE hf;              // file handle 
     
    // Initialize OPENFILENAME 
    ZeroMemory(&ofn, sizeof(OPENFILENAME)); 
    ofn.lStructSize = sizeof(OPENFILENAME); 
    ofn.hwndOwner = hwnd; 
    ofn.lpstrFile = szFile; 
    ofn.nMaxFile = sizeof(szFile); 
    ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0"; 
    ofn.nFilterIndex = 1; 
    ofn.lpstrFileTitle = NULL; 
    ofn.nMaxFileTitle = 0; 
    ofn.lpstrInitialDir = NULL; 
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 
     
    // Display the Open dialog box. 
     
    if (GetOpenFileName(&ofn)==TRUE) 
        hf = CreateFile(ofn.lpstrFile, GENERIC_READ, 
            0, (LPSECURITY_ATTRIBUTES) NULL, 
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 
            (HANDLE) NULL); 
     
    	return 0;
    }
    Merci bien

  4. #4
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    c'est ton handle de fenetre qui est pas bon (pas initialise)
    sinon c'est le handle de la fenetre parent
    met 0 dedans

  5. #5
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut
    Salut

    Effectivement mets hwnd � NULL mais aussi le premier caract�re de szFile � 0 : *szFile = 0
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

  6. #6
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut
    Merci les gars c'etait bien ca.
    Mais pourquoi les initialiser a zero forc�ment???

  7. #7
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    parce que si tu n 'a pas de handle de fenetre parent � fournir on met null.
    voir la doc

    hwndOwner
    Handle to the window that owns the dialog box. This member can be any valid window handle, or it can be NULL if the dialog box has no owner

  8. #8
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut
    Peux pas te dire, mais j'ai regard� le code d'erreur et il correspondait � une erreur d'initialisation et voici ce qui est dit pour cet argument :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Pointer to a buffer that contains a file name used to initialize the File Name edit control. The first character of this buffer must be NULL if initialization is not necessary....
    PS Chacun son petit bout de correction
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

  9. #9
    Membre confirm�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2002
    Messages
    106
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 106
    Par d�faut
    Et parce que tout simplement sans se poser de question compliqu�e, il faut TOUJOURS initialiser les variables (tu devais d'ailleurs avoir des warning du style "variable used without having been initialized"(mon anglais est pas top c'est peut-�tre pas tout � fait �a mais tout francais aura compris)).
    Dans ce cas, soit tu connais la valeur � laquelle tu veux fixer ta variable, soit tu mets 0 ou NULL suivant son type.

  10. #10
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut
    Merci bien. Encore une autre question svp qui peut me faire eviter de poser trop de questions....
    Le code se compilait et s'ex�cutait sans probl�me.
    Est ce que ce code correspond a GetLastError()???
    Si oui comment lire ce code de une et comment voir l'erreur correspondante , cad le texte que TrapD a affich�
    Merci

  11. #11
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    c'est encore moi !
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    LPVOID lpMsgBuf;
    FormatMessage( 
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM | 
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
        (LPTSTR) &lpMsgBuf,
        0,
        NULL 
    );
    // Process any inserts in lpMsgBuf.
    // ...
    // Display the string.
    MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
    // Free the buffer.
    LocalFree( lpMsgBuf );

  12. #12
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut
    Le code d'erreur s'obtient avec CommDlgExtendedError(), puis, moi j'ai regard� dans le fichier CDERR.H pour voir l'erreur correspondante (on doit pouvoir faire mieux !).

    PS1 : le texte que j'ai affich� est un extrait de MSDN sur la structure OPENFILENAME

    PS2 : le code donn� au-dessus fonctionne-t-il pour GetLastError() ? V�rification faite : NON
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

  13. #13
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    oui ta raison ca ne fonctionne qu'avec CommDlgExtendedError()

  14. #14
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut
    A mon avis on doit intervertir les deux fonctions non ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

  15. #15
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut
    je me demande comment tu visualise ce code d'erreur en fait. moi je fait du bricolage. Tu peux me dire comment tu fait. et comment tu ouvre ce fichier .H stp.

    Voila mon code

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    sprintf(buff,"%d",CommDlgExtendedError());
    MessageBox(NULL,buff,NULL,0);
    Ce qui affiche 2.

  16. #16
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    re ,
    comme apparement on peux pas recuperer le libelle directement faut le faire a la mimine on regarde la doc on recupere les codes d'errreurs et on fait:


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CString strError;
    switch( CommDlgExtendedError())
    {
    case CDERR_DIALOGFAILURE:strError="handle de fenetre Incorrecte consultez la doc !";
    break;
    case CDERR_FINDRESFAILURE://etc...
    }

  17. #17
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut
    Oh ben c'est du bricolage : sur la doc MSDN, les codes d'erreurs sont inscrits.
    J'ai fait une recherche textuelle avec la fonction "rechercher" (CDERR_ dans les fichiers *.h*) et il m'a trouv� CDERR.H.
    J'ai regard� et j'ai vu qu'� la valeur 2 correspondait CDERR_INITIALIZATION.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

  18. #18
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    note a trap d ,
    si on continue on va ouvrir un salon...

  19. #19
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut
    Citation Envoy� par farscape
    note a trap d ,
    si on continue on va ouvrir un salon...
    Oui c'est exactement ce que j' envisageais
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

  20. #20
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut
    un salon juste pour moi.....
    trop flatt�e...
    cderr.h je l 'ai trouv� sans pb et le code aussi. Comment sait on que faut utiliser CommDlgExtendedError()?
    CString est une classe MFC. Peut on les utiliser ds ce cas avec un projet API Win32?
    Si oui quel header faut il inclure???
    Desol�e je d�bute...

Discussions similaires

  1. Probleme avec GetOpenFilename
    Par Bonero dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 31/03/2010, 14h19
  2. nomfichier avec GetOpenFileName
    Par abitaf dans le forum Qt
    R�ponses: 2
    Dernier message: 24/11/2008, 13h14
  3. Erreur avec GetOpenFilename
    Par Neuromancien2 dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 11/09/2007, 15h38
  4. [VBA-E] d�sactiver "Annuler" avec .GetOpenFilename
    Par repi� dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 17/05/2006, 17h15
  5. [VBA-E] & probl�me avec GetOpenFileName
    Par sat478 dans le forum Macros et VBA Excel
    R�ponses: 1
    Dernier message: 31/03/2006, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo