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

Visual C++ Discussion :

Afficher une fenêtre OUVRIR DOCUMENT


Sujet :

Visual C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut Afficher une fenêtre OUVRIR DOCUMENT
    Bonsoir à toutes et à tous,
    je travaille sur projet, qui nécessite de programmer via une Interface Graphique un microcontrôleur, pour effectuer diverses tâches. Cela va de l'acivation ou non d'Entrée/sorties numériques, ou analogiques, pour activer ou non l'alimentation d'un projecteur, d'une caméra, ...
    Toute cette partie est faite, et march parfaitement. Aujourd'hui, on m'a demandé depouvoir charger ou d'enregistrer le/les programmes, pour avoir des modèles tout prêt, plus qu'à charger. Cela évitera des erreurs de syntaxes, pour la programmation d'une mission.
    Je voudrais utiliser le même principe que les boutons Ouvrir, et Enregistrer Sous, de Windows, pour aller chercher un programme, ou sauvegarder un programme.
    Le principe est bien, mais les seuls infos que je trouve, c'est comment naviguer dans les répertoires, comment ouvrir sauvegarder un fichier, alors que moi, je voudrais avoir une fenêtre montrant l'arborescence des fichiers, pouvoir naviguer dedans, et sauvegarder les modèles par exemple.

    Est ce que quelqu'un pourrait m'aider sur ce sujet. Me donner des pistes.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je ne sais pas si j'ai très bien compris la question, mais sous Windows, on utilise les fonctions GetOpenFileName() et GetSaveFileName().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    En effet tu ne fournis pas assez de détails.
    Quel est ton environnement de dev (systeme d'exploitation, lib graphique, etc.) ?
    Quel est ton problème (problème de chargement/sauvegarde de fichiers, d'interprétation de fichier, IHM, ...) ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    Bonjour à toutes et à tous,
    j'y ai pensé hier soir après parti du boulot, que j'avais oublié de dire sur quel système je travaillé.
    Je programme mon IHM avec le logiciel Microsoft Visual C++ 6.0, en WinAPI.
    Je suis sous Windows 2000 pro et xp, pour faire tourner mon application.

    Dans mon IHM, sur la page de programmation d'une mission, j'ai rajouté 2 boutons, un pour ouvrir un fichier, et le second pour sauvegarder un fichier.
    L'extension du fichier n'est pas important, j'en ferais un spécifique, car il ne sera lu qu'avec mon programme.
    Je voulais afficher, lorsque je clique sur ces boutons, une autre fenêtre avec l'arborescence des fichiers (tous les noms de documents de C:, D:, D:\toto, ...), à gauche de ma fenêtre, et à droite, les noms de fichiers contenus dans le répertoire.
    C'est en fait le même principe que pour windows avec word, excel, ...

    Je vais creuser du côté de GetOpenFileName() et GetSaveFileName().
    Merci bien

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    Bonsoir à toutes et à tous,

    Pour mon projet, je dois faire évoluer une IHM déjà existante. Je l'ai déjà pas mal étoffé, mais là je bute sur une fonction. Je dois programmer un système, pour effectuer une mission. Sur cette fenêtre, je dois pouvoir enregistrer et charger un programme.
    J'ai rajouté 2 boutons pour cela, sur mon IHM. J'ai réussi aujourd'hui, à enregistrer mon programme dans un répertoire, au format *.csv, en donnant un nom à ce programme via mon IHM.
    Maintenant il me faut pouvoir ouvrir les fichiers crées, pour exploiter son contenu. J'ai utilisé GetOpenFileName, pour ouvrir une fenêtre windows permettant de choisir le programme à ouvrir, et lorsque j'ouvre mon fichier, je retrouve dans le titre de ma fenêtre tout le code de mon fichier.

    Voici le code utilisé :
    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
    case WM_COMMAND:
                if(LOWORD(wParam) == IDM_OPEN)
                  {
     
                    OPENFILENAME ofn;
                    CHAR szFile[MAX_PATH]={0};
                    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    #ifdef OPENFILENAME_SIZE_VERSION_400
                    ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
    #else
                    ofn.lStructSize = sizeof(OPENFILENAME);
    #endif
                    ofn.hwndOwner = hwnd;
                    ofn.lpstrFile = szFile;
                    ofn.nMaxFile = sizeof(szFile);
                    ofn.lpstrFilter =
                               "Fichier source Programmes\0*.csv\0";
                    ofn.nFilterIndex = 1;
                    ofn.Flags =
                           OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
                    if (GetOpenFileName(&ofn)==TRUE)
                     {
                        HANDLE hf;
                        DWORD FileSize,nbcharRead ;
                        char *buffer;
     
                        hf = CreateFile(szFile, GENERIC_READ, 0,NULL,
                                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
                        FileSize = GetFileSize(hf, NULL);
                        buffer = (char*)LocalAlloc(LMEM_FIXED, FileSize+1);
                        ReadFile(hf, buffer, FileSize, &nbcharRead, NULL) ;
                        buffer[FileSize] = 0;
                        SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)buffer);
                        LocalFree(buffer);
                        CloseHandle(hf);
                     }
    En mettant en commentaire la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)buffer);
    je ne retrouve plus mon code dans l'entête de la fenêtre.

    Voyant cela, j'en conclue que la valeur (LPARAM)buffer contient le programme de mon fichier. Je voudrais récupérer ce code, le mettre dans un fichier texte, et l'exploiter par la suite.
    Pour cela, j'ai créé un fichier "C:\\Prog.txt", dans lequel je viens mettre le contenu de (LPARAM)buffer. C'est la seule variable, qui pour moi, contient le code du programme, d'après les constatations de tout à l'heure.

    Par conséquent, j'ai rajouté le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ReadFile(hf, buffer, FileSize, &nbcharRead, NULL) ;
    fprintf(f,"%s", (LPARAM)buffer);
    Le problème de cette méthode, c'est que (LPARAM)buffer est un long, et que je lui demande d'écrire une chaîne de caractères.
    J'ai voulu transformer ce long en chaîne de caractères avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sprintf(tempo, (LPARAM)buffer);
    fprintf(f, "%s", tempo);
    avec tempo déclaré comme un chaîne de caractères ayant une taille de 1000.
    Mais il n'y a aucun résultat dans le fichier, malgrès toutes ces manipulations.

    Est ce que quelqu'un pourrait m'aider à récupérer ce programme, pour que je puisse l'exploiter, s'il vous plait.

    Je travaille sous Microsoft Visual C++ 6.0, sous Windows 2000 et xp. Je programme en Win API.

    Merci d'avance

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Avec la fin de ton message, on dirait que tu programmes au hasard et que tu ne sais même pas ce que fait le code que tu as posté.
    buffer est un char*, pointant sur une zone mémoire allouée avec LocalAlloc(), et renfermant tout le contenu du fichier...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    Bonjour à toutes et à tous,
    Je te l'accorde. En utilisant la fonction GetOpenFileName, je ne m'attendais pas à récupérer tout le contenu du fichier dans l'entête de ma fenêtre. Voyant cela, j'ai cherché le fautif, et j'ai vu que c'était la ligne SendMessage.
    Je voulais juste ouvrir ce fichier, et l'exploiter pour mon projet.
    Sachant que buffer contenait le code, j'ai taté, pour voir si je pouvais récupérer son contenu dans un fichier.

    Je constate, et j'improvise, en fonction du résultat obtenu.
    Merci

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    GetOpenFileName() ne récupère que le nom du fichier.

    Ce sont les fonctions suivantes CreateFile()-ReadFile()-CloseHandle() qui récupèrent le contenu...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    Bonjour à toutes et à tous,
    merci pour cette indication, je vais creuser de ce côté.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2011, 10h51
  2. afficher une fenêtre dans le thread
    Par LN(a) dans le forum Langage
    Réponses: 8
    Dernier message: 21/12/2005, 13h21
  3. Afficher une Fenêtre MDI à partir d'une DLL
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/12/2005, 16h58
  4. Afficher une fenêtre d'informations qui donne l'impression de se détâcher
    Par jean_bobi dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 25/09/2005, 15h31
  5. Réponses: 1
    Dernier message: 16/02/2005, 12h04

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