Bonjour
Pour un futur boulot, je vais programmer des interfaces grahiques en C sous Windows. Je n'ai pas encore d'expérience sur cette plateforme (je programme beaucoup sous Linux et Mac) et j'ai vraiment besoin d'un petit coup de pouce pour démarrer .
Pour commencer à me familiariser avec l'API, j'ai été voir les tutoriels et tenté de compiler le premier code que j'ai trouvé :
Il y a d'abord beaucoup d'elements que je ne pige pas : certains mots en majuscules qui me paraissent être des macros.
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 #include <windows.h> LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASS wc; wc.style = 0; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hinstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE); wc.lpszMenuName = NULL; wc.lpszClassName = "MaWinClass"; if(!RegisterClass(&wc)) return FALSE; hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hinstance, NULL); if (!hwnd) return FALSE; ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } /******************************************************************************/ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } }
J'ai quand même essayé de le compiler sous Linux avec Wine (c'est sensé fonctionner). le code compile, mais l'edition des liens foire :Je pense que c'est parce qu'il ne trouve pas la fonction main, cependant le tutoriel dit que la fonction WinMain est l'équivalent de main avec l'API Windows. Merci de m'eclaircir si possible sur ce point.
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 /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o: In function `_start': (.text+0x18): undefined reference to `main' ./main.o: In function `WinMain': /home/remi/dev/wintest/Debug/../main.c:25: undefined reference to `LoadIconA' /home/remi/dev/wintest/Debug/../main.c:26: undefined reference to `LoadCursorA' /home/remi/dev/wintest/Debug/../main.c:31: undefined reference to `RegisterClassA' /home/remi/dev/wintest/Debug/../main.c:33: undefined reference to `CreateWindowExA' /home/remi/dev/wintest/Debug/../main.c:38: undefined reference to `ShowWindow' /home/remi/dev/wintest/Debug/../main.c:39: undefined reference to `UpdateWindow' /home/remi/dev/wintest/Debug/../main.c:44: undefined reference to `TranslateMessage' /home/remi/dev/wintest/Debug/../main.c:45: undefined reference to `DispatchMessageA' /home/remi/dev/wintest/Debug/../main.c:42: undefined reference to `GetMessageA' ./main.o: In function `MainWndProc': /home/remi/dev/wintest/Debug/../main.c:60: undefined reference to `PostQuitMessage' /home/remi/dev/wintest/Debug/../main.c:64: undefined reference to `DefWindowProcA' /usr/bin/ld: wintest: hidden symbol `PostQuitMessage' isn't defined /usr/bin/ld: final link failed: Nonrepresentable section on output collect2: ld returned 1 exit status make: *** [wintest] Error 1
Ensuite j'ai installé VisualC++ Express (ne possedant pas windows, j'ai détourné le PC de mon taf actuel !) afin de le faire avec un outil à priori adapté. cependant, je ne connais pas du tout le logiciel, et je n'arrive pas à creer autre chose que des fichiers C++. Est-ce qu'on peux faire du C sous VC++ ?
Merci de m'éclairer sur ce point de départ (avec la fonction main) , et si nécessaire me réorienter vers des outils adaptés.
Merci
Rémi
Partager