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.