Bonjour à tous,
je suis attristé d'être le dernier à avoir demandé de l'aide et me sent un peu nul, mais je vous souhaite à tous mes meilleurs voeux, quand même!
Soit, venons en au fait.
J'ai voulu travailler autours d'un programme fenêtré, jusque là tout va bien, et créer une classe pour se faire, un peu dans le style de Qt, pour avoir un main quasi vide, et une classe CTRLWindows qui est un peu l'équivalent de MainWindows chez Qt. (l'intérêt est de pouvoir exporter la classe plus aisément dans de futurs projets)
Cependant, j'ai constaté, en debug, que lorsque je fermais la fenêtre, le programme ne s'arrêtais pas, je devais en plus cliquer sur le carré rouge du mode debug pour réellement stopper le programme. Cela se confirme logiquement en exécutant celui ci via l'exe, dans le gestionnaire des tâches, le programme lancé ne s’interrompt pas automatiquement, peut être est-ce là l'origine du problème.
Lorsque je passe en Release, j'ai une erreur LNK2001 sur le fichier "MSVCRT.lib"(exe_main.obj)
J'ai également eu une erreur C28251, qui semble s'être corrigée avec l'ajout des "_In_" et "In_opt_" dans le main.
Voici le main en question:
Et en effet, je ne retourne rien en sortie de main, et quand j'ajoute un return 0, ça ne change rien. Et pour le coup, j'ai pas trop d'idées en tête!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int WinMain(_In_ HINSTANCE hInst, _In_opt_ HINSTANCE hPrevInst, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) { WNDCLASSEX Window; CTRLWindows CTRLWindows(hInst, hPrevInst, lpCmdLine, nShowCmd, &Window); }
Je vous remercie,
Bonne journée!
EDIT:
J'ai compris une partie du problème, lorsque je lance le programme, il passe automatiquement par W_DESTROY (0x0002) alors que la valeur de message est 0x0111 (eq. WM_INITIADLOG) dans la callback de gestion des évent fenêtre!
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 LRESULT CALLBACK CTRLWindows::MainWindowsProcess(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, CTRLWindows* Object) { static INITCOMMONCONTROLSEX iccx; LPNMHDR pnmhdr = (LPNMHDR)lParam; switch (message) { case WM_CREATE: break; case WM_NOTIFY: // Change of tab -- detect clics and switch tab break; case WM_COMMAND: //Detect clics on button switch LOWORD(wParam) { // différentes commandes } case WM_DESTROY: break; } return DefWindowProc(hwnd, message, wParam, lParam); }
Partager