Merci de m'avoir aider j'ai ressolue mon souci de boucle qui bloque la reception des messages (GetMessage)
J'ai en revanche d'autres problèmes, c'est par ici --> http://www.developpez.net/forums/vie...297342#2297342
Ou alors c'est juste quelques post plus bas comme vous voulez
------------------------------------------------------------
Bonjour, je suis debutant en C++ et je nage complet, j'arrive a ne pas couler mais bon c'est pas evident je comprend pas tout, alors je bidouille pour essayer de comprendre.
Mais là je bloque, je vais essayer d'exposé mon probleme
Tout d'abord precision important, j'utilise Dev-C++
Le but est simple, je veux faire une fenetre avec une checkbox, quand elle est coché, le programme lance en boucle une fonction (While), une fois decoché, la boucle s'arrete... de plus je donne la possibilité aussi de pouvoir coché/décoché avec un raccourci clavier (F9).
Jusque là tout va bien, mon probleme est que lorsque je coche ma checkbox, la fonction se lance en boucle, et je n'arrive plus a l'arreter, ma fenetre se fige, la checkbox et le raccourci clavier ne servent plus a rien.
Alors peut etre que l'utilisation d'une boucle while n'est pas la bonne solution ?
Je vais essayer de montrer les bouts de code important, ca se divise en trois partie
Premiere partie, les variables global ainsi que le code de creation de la fenetre par default legerement bidouiller avec une checkbox rajouter
Ensuite une fonction qui apparemment recoit les evenements de la fenetre et permet de les analyses puis d'agir en consequence, ici aussi j'ai bidouille pour essayer seulement de comprendre comment ca marche et voir si j'arrivais a faire un raccourci clavier, ca avait marcher
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 #include <windows.h> #include <iostream.h> #define ID_BUTTON 100 /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); /* Make the class name into a global variable */ char szClassName[ ] = "WindowsApp"; int mult (); HWND hwnd; MSG messages; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { /*HWND hwnd; This is the handle for our window */ WNDCLASSEX wincl; /* Data structure for the windowclass */ /* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX); /* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; /* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0; /* The class is registered, let's create the program*/ hwnd = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Gaia Fishing :: Bot", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 350, /* The programs width */ 275, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); HWND cmdhWnd = CreateWindowEx( 0, "BUTTON", "", WS_VISIBLE|WS_CHILD|BS_CHECKBOX|BS_AUTOCHECKBOX|BS_NOTIFY|BS_TEXT, 30, 30, 150, 80, hwnd, (HMENU)ID_BUTTON, hThisInstance, NULL ); ShowWindow (hwnd, nFunsterStil); SetWindowText(cmdhWnd, "Checkbox!"); //-------------- while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam; }
Et pour finir ma fonction, et je ne voyais pas d'autres endroit pour mettre ma boucle while, pour pouvoir l'appeller en fonction de la checkbox ou du F9
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 LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_KEYDOWN: switch (wParam) { case VK_F9: cout<< "Ta toucher au F9 ducon?" << endl; if (IsDlgButtonChecked(hwnd,100)==1) { CheckDlgButton(hwnd,100,BST_UNCHECKED); } else { CheckDlgButton(hwnd,100,BST_CHECKED); mult (); } break; } case WM_COMMAND: if (IsDlgButtonChecked(hwnd,100)==1) { cout<< "Checkbox activé" << endl; } else { cout<< "Checkbox désactivé" << endl; } break; case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int mult () { while (IsDlgButtonChecked(hwnd,100)==1) { cout<< "Test de la boucle" << endl; Sleep(1000) } }
Donc mon souci est qu'une fois la boucle lancer, j'ai l'impression que je n'arrive plus a capter les events sur la fenetre (Checkbox/F9) et que donc je n'arrive plus a l'arreter.
J'aimerai savoir comment faire pour que dans ma boucle, il puisse analysé les messages recus un peu comme :
J'ai essayer de l'integrer a ma fonction mult() avec de l'espoir mais ensuite la boucle while ne marche plus, elle marche uniquement pendant le deplacement de la souris ou pendant que j'appuie sur des touches, enfin elle fonctionne uniquement quand il y a un event sur la fenetre sinon elle reste bloqué.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam;
Si quelqu'un pouvait m'expliquer a peu pres pourquoi ca m'interesserait de comprendre :
Et ne cherchez pas a comprendre a quoi ca sert pour l'instant ca ne sert a rien j'essaye d'apprendre tout simplement a faire certaines choses.
Merci d'avance
Partager