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

Windows Discussion :

Visualisateur hexadécimal avec L'API windows


Sujet :

Windows

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1
    Par défaut Visualisateur hexadécimal avec L'API windows
    Bien le bonjour à tous. Voila je dois faire pour les cours un visualisateur hexadécimal avec l'aide de l'api windows et du langage C.
    Mais la je commence à secher sérieusement.Voila mon problème. Je n'arrive pas à ouvrir un fichier et appliquer la visualisation précédemment développer en mode console.

    J'ai basé ma fenetre windows sur le tutorial présent sur ce site.
    J'ai été voir le tutorial pour ouvrir un fichier et j'ai copier le code source mais il me met une erreur de lien apparament. Donc je vous joint la dernière copie fonctionnel de mon programme car la je merde tellement pour essayer d'intégrer l'ouverture d'un fichier que s'en ai plein d'erreur.

    J'espèce que vous pourrez m'aider et me conseiller.

    Voici le détail du mon programme:
    fichier win.c:
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    #include <windows.h>
    #include "win.h"
    
    HINSTANCE hinst;
    
    LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
    
    /*ajout message box*/
    BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
    {   int nN1,nN2,nRes;
        BOOL bSuccess;
        
    	switch(Message)
    	{   case WM_CLOSE:
    			EndDialog(hwnd, 0);
    		case WM_COMMAND:
    			switch(LOWORD(wParam))
    			{   case IDC_ADD:
                        nN1 = GetDlgItemInt(hwnd, IDC_N1, &bSuccess, FALSE);
                        nN2 = GetDlgItemInt(hwnd, IDC_N2, &bSuccess, FALSE);
                        nRes = nN1 + nN2;
                        SetDlgItemInt(hwnd, IDC_RES, nRes, FALSE);				
    				break; 
    				case IDC_QUIT:
    					PostMessage(hwnd, WM_CLOSE, 0, 0);
    				break;
    			}
    		break;
    		default:
    			return FALSE;
    	}
    	return TRUE;
    }
    /*fin ajout*/ 
    
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
                                                    LPSTR lpCmdLine, int nCmdShow)
    {
        HWND hwnd;
        MSG msg;
        WNDCLASS wc;
        HMENU hMenu, hSousMenu;
    
        hinst = hinstance;
    
        wc.style = 0 ;
        wc.lpfnWndProc = MainWndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = NULL;
        wc.hIcon = NULL;
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = NULL;
        wc.lpszMenuName =  NULL;
        wc.lpszClassName = "MaWinClass";
    
        if(!RegisterClass(&wc)) return FALSE;
        hMenu  = CreateMenu();
        
        hSousMenu = CreateMenu();
        AppendMenu(hSousMenu, MF_STRING, IDM_OPEN, "Ouvrir...");
        AppendMenu(hSousMenu, MF_STRING, IDM_CLOSE, "Fermer");
        AppendMenu(hSousMenu, MF_SEPARATOR, 0, NULL);
        AppendMenu(hSousMenu, MF_STRING, IDM_QUIT, "Quitter");
        AppendMenu(hMenu,MF_POPUP,(UINT)hSousMenu,"Fichier");
        
        hSousMenu = CreateMenu();
        AppendMenu(hSousMenu, MF_STRING, IDM_CONV, "Additionneur");
        AppendMenu(hSousMenu, MF_SEPARATOR, 0, NULL);
        AppendMenu(hSousMenu, MF_STRING, IDM_MAJ, "Mise a jour");
        AppendMenu(hMenu,MF_POPUP,(UINT)hSousMenu,"Outils");
        
        hSousMenu = CreateMenu();
        AppendMenu(hSousMenu, MF_STRING, IDM_AIDE, "Aide");
        AppendMenu(hSousMenu, MF_SEPARATOR, 0, NULL);
        AppendMenu(hSousMenu, MF_STRING, IDM_PROPOS, "A propos...");
        AppendMenu(hMenu,MF_POPUP,(UINT)hSousMenu,"?");
    
    
    
    
    
        hwnd = CreateWindow("MaWinClass", "Hexavisu", WS_OVERLAPPEDWINDOW,
                                       CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
                                                       NULL, hMenu, hinstance, NULL);
        if (!hwnd)  return FALSE;
    
        ShowWindow(hwnd, nCmdShow);
    
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    /******************************************************************************/
    
    LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        static HWND hEdit;
        static BOOL EditNotChg = TRUE;
        switch (uMsg)
        {
            case WM_CREATE:
                {
                 HFONT hFont;
                 hEdit = CreateWindow("edit", "Pas de fichier d'ouvert",
                   WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL,
                                                0, 0, 0, 0, hwnd, NULL, hinst, NULL);
                 hFont = (HFONT)GetStockObject(ANSI_FIXED_FONT);
                 SendMessage(hEdit,WM_SETFONT,(UINT)hFont,TRUE);
                 SendMessage(hEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN,
                                                                    MAKELONG(5, 5));
                 return 0;
                }
    
            case WM_CLOSE:
                if(EditNotChg ||
                   MessageBox(hwnd,"Le texte a été modifié.\r\nEtes vous sûr de \
    vouloir fermer l'application ?"
                                ,"Question ?",MB_YESNO | MB_ICONQUESTION ) == IDYES)
                                                                DestroyWindow(hwnd);
                return 0;
    
            case WM_COMMAND:
                if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);
                if(LOWORD(wParam) == IDM_CONV) DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_MAIN), hwnd, DlgProc);
                if(HIWORD(wParam) == EN_CHANGE) EditNotChg = FALSE;
    
                return 0;
    
            case WM_SIZE:
                MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
                 return 0;            
    
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
    
            default:
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    }
    Voici le fichier ressource:
    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
    #include <windows.h>
    #include "win.h"
    
    IDD_MAIN DIALOG DISCARDABLE 0, 0, 206, 111
    STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
    CAPTION "Somme de deux nombres"
    FONT 8, "MS Shell Dlg"
    BEGIN
       LTEXT "NB1", IDC_STATIC, 14, 25, 17, 17 
       EDITTEXT IDC_N1, 37, 25, 25, 14, ES_NUMBER 
       LTEXT "+ NB2", IDC_STATIC, 71, 25, 24, 17 
       EDITTEXT IDC_N2, 99, 25, 25, 15, ES_NUMBER 
       LTEXT "=", IDC_STATIC, 129, 25, 8, 16 
       EDITTEXT  IDC_RES, 141, 25, 25, 14, ES_NUMBER 
       DEFPUSHBUTTON   "&Ajouter",IDC_ADD, 110, 54, 48, 15 
       PUSHBUTTON   "&Quitter",IDC_QUIT, 110, 74, 50, 15 
    END
    Le fichier win.h
    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
    #define IDM_QUIT 1
    #define IDM_OPEN 2
    #define IDM_CLOSE 3
    #define IDM_MAJ 4
    #define IDM_AIDE 5
    #define IDM_PROPOS 6
    #define IDM_CONV 7
    
    #define IDD_MAIN    101
    
    #define IDC_STATIC  1010
    
    #define IDC_N1  1001
    #define IDC_N2  1002
    #define IDC_RES 1003
    
    #define IDC_TEXT 1004
    #define IDC_ADD  1005
    #define IDC_QUIT 1006
    Et voila le visualisateur en mode console:
    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
    /*Déclaration des bibliothèques*/
    #include <stdio.h>
    #include <conio.h>
    
    
    
    int main (void) {
    /*Déclaration des variables*/
    FILE *f;
    char nomfic[30];
    char c;
    unsigned char tab[17];
    int cpt,i ;
    
        /*Saisie du nom du fichier*/
        puts("Entrer le nom du fichier avec son extension: ");
        scanf("%s",nomfic);
        f = fopen(nomfic,"r");
    
        /*Test de réussite d'ouverture du fichier*/
        if (f == NULL)
           puts("erreur d'ouverture de fichier\n");
    
        else{
              while (cpt>=16){
              cpt=fread(tab,sizeof(unsigned char),16,f);
              tab[cpt]='\0';
    
              for (i=0;i<cpt;i++){
                  printf ("%02X ",(unsigned char) tab[i]);
                  if (i==7) printf("  ");
                  }
              
                  printf("      ");
              
              for (i=0;i<cpt;i++){ 
                  if (tab[i]>=0 && 32>=tab[i]) printf (".");
                  else printf("%c",tab[i]);
              }
              printf("\n");
              }
         }
    
        /*Test de fermeture du fichier*/
        if (fclose(f)==0) printf("\nficher referme");
        else printf("erreur de fermeture de fichier\n");
           getch();
    
    }
    Je dois finir cela pour lundi . Bon je retourne bosser dessus j'espèce que je vais m'en sortir. Merci de m'avoir lu. Bonne journée à tous.

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f = fopen(nomfic,"r");
    je n'ai pas regardé en détail, mais si le fichier est binaire alors il faut un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f = fopen(nomfic,"rb");

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/12/2005, 11h37
  2. Tutorial d'initiation a la programmation avec l'API Windows
    Par mcdonald dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 16/09/2005, 17h20
  3. Stocker un imprim ecran sous bmp avec l'api windows
    Par Tofalu dans le forum Windows
    Réponses: 7
    Dernier message: 04/05/2005, 11h32
  4. Réponses: 3
    Dernier message: 09/11/2004, 10h44

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