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

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Points : 5
    Points
    5
    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
    Points : 17 323
    Points
    17 323
    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
    Futur Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Points : 5
    Points
    5
    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
    Points : 17 323
    Points
    17 323
    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
    Points : 6 498
    Points
    6 498
    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
    Futur Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Points : 5
    Points
    5
    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
    Points : 17 323
    Points
    17 323
    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
    Points : 6 498
    Points
    6 498
    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 régulier
    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
    Points : 113
    Points
    113
    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
    Futur Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Points : 5
    Points
    5
    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
    Points : 17 323
    Points
    17 323
    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
    Points : 6 498
    Points
    6 498
    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
    Points : 17 323
    Points
    17 323
    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
    Points : 6 498
    Points
    6 498
    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
    Futur Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Points : 5
    Points
    5
    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
    Points : 17 323
    Points
    17 323
    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
    Points : 6 498
    Points
    6 498
    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
    Points : 17 323
    Points
    17 323
    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
    Points : 6 498
    Points
    6 498
    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
    Futur Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Points : 5
    Points
    5
    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