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

C Discussion :

j'ai besoin de l'aide pour la boite de dialogue "ouverture de fichier" par CGI


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2010
    Messages : 87
    Par défaut j'ai besoin de l'aide pour la boite de dialogue "ouverture de fichier" par CGI
    bonjeur

    je veux modifier cette boite de dialogue pour ouvrire les fichiers HEX & BIN
    et dans la boite de dialogue donnée par CGI n'ouvre que les fichier C/C++
    j'ai modifier la valeur initiale de variable "ofn.lpstrFilter"de structeur "OPENFILENAME" par "Fichier source BIN\0*.bin\0Fichier source HEX\0*.hex\0" manitenant l'application m'affiche les fichiers HEX & BIN qui se trouvent sur mon disque mais a l'ouverture le fichier BIN s'affiche comme des caractaire inconnu, je veux s'avoir pour quoi et j'ai plain d'autre problemes a vous l'encer mais je prefere un par un pour mieux comprendre


    merci a tous qui veut m'aider et merci surtout pour CGI pour la documment
    http://chgi.developpez.com/windows/dlgstd/

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    La boîte de dialogue "Ouvrir un fichier" ne fait que demander à l'utilisateur de sélectionner un fichier, mais c'est à ton programme de dire ensuite ce qu'il faut en faire du fichier alors sélectionné. Dans le cas du programme proposé par CGi par exemple, le contenu du fichier sélectionné est affiché en tant que texte, ce qui est correct dans la mesure où un fichier C ou C++ (les seuls types autorisés par le champ ofn.lpstrFilter) est censé contenir du texte. Il est par contre insensé de vouloir appliquer le même traitement sur un fichier hex ou bin qui ne contient pas forcément du texte. Tu veux peut-être afficher le contenu en hexadécimal ? Dans ce cas tu dois d'abord convertir le contenu du tableau "buffer" du code dans la représentation qui te convient avant de l'afficher. Tu peux te faire aider du code suivant (teste-le pour voir l'effet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main()
    {
        char buffer[] = {0xAA, 0x55, 0xF7}; /* 3 octets */
        int i;
     
        for(i = 0; i < 3; i++)
            printf("%x ", buffer[i]);
     
        return 0;
    }
    Et renseigne-toi un peu sur les fonctions sprintf, strcpy et strcat, car tu en auras grandement besoin.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2010
    Messages : 87
    Par défaut
    bonjour

    maintenant je vois les choses trés claire, exemple quand l'utilisateur clique sur le menu open l'app recoi un message WM_command puis on test le message if(LOWORD(wParam) == IDM_OPEN) on initial une structure OPENFILENAME
    et puis on passe au deuxieme test if (GetOpenFileName(&ofn)==TRUE) TRUE si l'utilisateur choisi sont fichier et validé ou FALSE si l'opération été annuler, au début j'ai pensé que le buffer se trouve dans un champ de la structure OPENFILENAME mais le buffer se déclare dans le if()


    merci pour votre aide

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2010
    Messages : 87
    Par défaut re --
    bonjour

    le code que tu ma donné marche bien avec le tableau qu'on le crée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
        int i;
        char buffer[] = {0xAA, 0x55, 0xF7}; /* 3 octets */
        for(i = 0; i < 3; i++)
        printf("%X ", buffer[i] & 0xFF);
        return 0;
    }
    mais quand j'essayer de récupérer les données "AA 55 E7" que je les sauvegardé dans le ficher hexadécimal il n'affiche pas normale et toute fois que j'ouvre meme fchier des donnée changera
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    #define _WIN32_WINNT 0x0500
    /* Il faut définir la version de Windows ciblée à 5.0 (Windows 2000) */
    /* car la fonction GetConsoleWindow n'existe qu'à partir de cette version. */
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
     
     
    int main()
    {
        OPENFILENAME ofn;
        HWND hwnd = GetConsoleWindow();
        char lpszFile[MAX_PATH] = "";
        char lpszFileTitle[MAX_PATH] = "";
     
        freopen("null", "w", stderr); /* Cette ligne permet de ne pas avoir
         les éventuels messages d'erreurs dans la console. */
     
        printf("Choisissez un fichier...\n\n");
     
        ZeroMemory(&ofn, sizeof(ofn));
        ofn.lStructSize     = sizeof (OPENFILENAME);
        ofn.hwndOwner       = hwnd;
        ofn.lpstrFilter     = "0Tous (*.*)\0*.*\0";
        ofn.lpstrFile       = lpszFile;
        ofn.nMaxFile        = sizeof(lpszFile) / sizeof(lpszFile[0]);
        ofn.lpstrFileTitle  = lpszFileTitle;
        ofn.nMaxFileTitle   = sizeof(lpszFileTitle) / sizeof(lpszFileTitle[0]);
        ofn.Flags           = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_CREATEPROMPT;
     
        if (GetOpenFileName(&ofn)){
             CHAR *buffer;
             int i;
             HANDLE hf;
             DWORD FileSize,nbcharRead ;
             CHAR szFile[MAX_PATH]={0};
             hf = CreateFile(szFile, GENERIC_READ, 0,NULL,OPEN_EXISTING
                             , FILE_ATTRIBUTE_NORMAL, NULL);
             FileSize = GetFileSize(hf, NULL);
             buffer = (PCHAR)LocalAlloc(LMEM_FIXED, FileSize+1);
             ReadFile(hf, buffer, FileSize, &nbcharRead, NULL) ;
             buffer[FileSize] = 0;
             for( i = 0;i <= 2;i ++)
             {
     
                 printf("code->> %2X \n",buffer[i]&0xFF);
     
             }
             LocalFree(buffer);
             CloseHandle(hf);
        }
     
        return 0;
    }
    merci d'avance pour l'aide

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/02/2007, 20h05
  2. Réponses: 16
    Dernier message: 01/02/2007, 16h04
  3. J'ai besoin de votre aide pour une requête
    Par ovdz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2005, 11h42

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