comment avoir une fonction callback par fenetre ? [C/C++] - C++ - Programmation
Marsh Posté le 15-06-2003 à 23:00:01
En fait je viens de trouver un truc :
je déclare les HWND des fenêtres en global et je fait un test desus pour savoir de quelle fenêrte il s'agit et selon ca je fais les actions que je veut
Code :
|
c comme ca qu'il faut faire ?
il faut que ce soit propre pq c pour un projet
Marsh Posté le 16-06-2003 à 00:26:01
Les callback sont associés à 1 classe de fenêtre. Toutes les fenêtres de cette classe seront gérées par un même callback. Dans ton cas, il suffit simplement de créer 2 classes :
- 2 callback différents
- 2 classes = 2 RegisterClass différents
- 2 CreateWindow avec chacun un nom de classe de fenêtre différent
Tu auras 1 classe pour ta fenêtre de dessin, et une autre pour ta toolbar.
Marsh Posté le 16-06-2003 à 00:30:44
Autre remarque : faut se méfier des HWND globaux. En effet, ta callback est appelée plusieurs fois durant le CreateWindow, notament pour WM_CREATE, quelques autres, et le premier WM_PAINT (pas sûr cependant). Durant ces appels, CreateWindow n'a pas rendu la main, et donc pas renvoyé de HWND. Donc l'affectation aux HWND globaux n'a pas eu lieu. En + clair :
Code :
|
Alors que hWndMain n'est pas encore initialisé suite à l'appel de CreateWindow, ta callback WndProc est appelée ... et le test hWnd==hWndMain échoue, alors qu'il s'agit bien de (la futur) hWndMain ...
Marsh Posté le 16-06-2003 à 00:33:21
CaMarchePoa a écrit : |
on peut aussi utiliser la fct SetWindowLong(), de cette maniere :
Code :
|
http://msdn.microsoft.com/library/ [...] owlong.asp
Marsh Posté le 16-06-2003 à 00:36:28
Ca s'appelle le subclassing, ca revient à créer une deuxieme classe de fenêtre autrement. Dans son cas c'est pas top, vu que les 2 fenêtres n'ont rien à voir. La méthode propre ici, AMHA, c'est de créer 2 classes distinctes dès le départ.
Marsh Posté le 16-06-2003 à 00:54:31
waouh !
c super tout ca
mais là
alors je regarde tout ca demain soir !!
merci bcp
Marsh Posté le 17-06-2003 à 23:25:39
HelloWorld a écrit : Les callback sont associés à 1 classe de fenêtre. Toutes les fenêtres de cette classe seront gérées par un même callback. Dans ton cas, il suffit simplement de créer 2 classes : |
en fait c ca la bonne solution
c expliqué dans le fameux bouquin de Petzold :
Section III advanced topic
A sample MDI Implementation
dans cet example chaque fenetre a son CALLBACK (on peut avoir plusieurs fenetre filles )
merci !
Marsh Posté le 15-06-2003 à 22:21:24
à tous !
g un petit probleme :
je fais une appli ou il y a deux fenetres
- une pour faire un dessin
- une qui sert de barre d'outils (style photoshop ...)
le probleme c que qd je fais un dessin dans la fenetre principale, ca le fait aussi dans la fenetre d'outils.
Ca viens du fait que c'est la même fonction CALLBACK qui est appellée pour les deux fenetres ...
alors la question :
Comment associer une fonction callback à la premier fenêtre et une autre fonction callback à la fenêtre outils ?
(ou sinon comment faire un if(fenetre principale){ .....}
voilà commen g construit les 2 fenetres :
PS : je commence en prog win alors s'pa facile
Message édité par camarchepoa le 15-06-2003 à 22:22:21