[VC++]pb de fenetre et de dessin .....

pb de fenetre et de dessin ..... [VC++] - Programmation

Marsh Posté le 04-10-2001 à 13:22:01    

voila je cree ma fenetre mere ...(celle ou ya pas de resource lui corespondant a part un menu :( )
 
par le biaiz de ce menu jouvre des dialoguebox toute mimi qui me calculent des choses ...... ce que je voudrais c'est de represneter dans la fenetre mere sous forme de grafique mes resultat de calcul de ma dialogue box..  
 
le hic c'est ke le WM_PAINT s'execute au chargement de la page ou quand on touche a la fenetre .. moi je veux que ca dessine  
-en temps reel dans ma fenetre mère
-a partir de ma fenetre fille
-le tout en direct live dans le fenetre mere
 
donc  
1)comment passer des info d'une fenetre fille a une fenetre mere
ou dessiner dans la fenetre mere a partir de la fille (en mettant le hwnd de ma fenetre mere en global ca doit passer)
 
2)comment dessiner en temps reel (surtout ca)
 
question subsidiaire:
comment assigner un .res a ma fenetre mere a fin de mettre des boutons et autres avec .

Reply

Marsh Posté le 04-10-2001 à 13:22:01   

Reply

Marsh Posté le 04-10-2001 à 13:35:41    

N'y connaissant pas grand chose (DDE, OLE ne sont pour moi que des acronymes), j'utilise les messages.
De ma feuille fille (ou mère vers la fille), je fais un PostMessage() (ou SendMessage() si on veut attendre que l'action soit terminée avant de continuer) avec le hWnd du destinataire et en prenant un message "user" WM_USER + x. x peut aller de 0 à je sais plus combien  :D (255, 32000 ?).
 
Si dans la feuille destinatrice (et/ou les deux), on prévoit un case (WM_USER + x): . Une fois qu'on a fait une liste des x et de leurs actions, ça fonctionne comme si c'était un message du système. On passe les paramètres soit par lParam et wParam, soit par variable globale.

Reply

Marsh Posté le 04-10-2001 à 14:07:57    

en gros si jai bien compris
 
dans ma fenetre mere je met
 
case WM_USER 1:
toto();
return (TRUE);
 
et dan ma fenetre fille
 
....
Psotmessage(Hwnd de ma fenerte mere, WM_USER 1)
....
 
quand jexecuterrais ma fenetre mere il skipperas la fonction toto()mais lexecuterras kan j'executerrais ma fen fille :p
 
si c'est bien ca :bounce:

Reply

Marsh Posté le 04-10-2001 à 14:09:16    

mais a part par une globalle je ne peux envoiller de param a ma fontion toto..  :(

Reply

Marsh Posté le 04-10-2001 à 14:42:50    

Tu n´as qu´à définir tes dialogues filles comme membres de ta classe fenêtre mère..
 
Du coup tu as accès aux paramêtres!! :)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 04-10-2001 à 14:50:50    

mais comme je bosse sur du code ki nest pas de moi les gus precedant on tout dvp en C mais un C crade de chez crade .... donc a pas de class fenetre mere mais une fonction fenetre mere completement  :spookie:  et vla la misere ...  
 
et comme jai opas envie de recoder env 100 000 lignes :( vais etre obligé de passer par des globales (beurkkkkkk une 36em de +) ... a moin ke

Reply

Marsh Posté le 04-10-2001 à 15:27:40    

à moins que ...j'arrive ! :sol:  
 
Bon, sérieusement, g un truc qui peut être t'aider. G pas vraiement pris le temps de lire ton problème, mais j'pense que mon truc peut t'aider:
 
en fait, au lieu d'utiliser des variables globales, saches que tu peux attribuer un long à chaque fenêtre. Je m'explique: pour tout ce qui est "Fenêtre" (CWnd en MFC, ou simple fenêtre avec un Handle en API), tu peux associer un long quelconque (qui pourrais par exemple être un pointeur vers le Handle de ta fenêtre mère ou autre)
 
pour ça, tu regardes la doc sur la fonction SetWindowLong et GetWindowLong, avec le paramètre index à GWL_USERDATA.
 
Voila, je vais pas non plus trop m'étaler la dessus, vu que je suis même pas sur que ça te sois utile ! :D

Reply

Marsh Posté le 04-10-2001 à 15:32:13    

Ne pas oublier le + entre WM_USER et le nombre.
 
dans la fenetre mere
 
case WM_USER + 1:
toto();
return (TRUE);
 
et dans ma fenetre fille
 
....
VarGlob1 = ...;
VarGlob2 = ...;
VarGlob3 = ..;
Postmessage(Hwnd de ma fenetre mere, WM_USER + 1, (WPARAM)0, 0L);
....
 
S'il y a que deux ou trois valeurs ENTIERES, on peut les envoyer via LPARAM et WPARAM (LPARAM permet de passer deux int combinés pour faire un long), sinon, ça doit être faisable mais je m'y connais pas assez (on peut passer un pointeur sur un tableau)).
 
Si la feuille mère doit télécommander la feuille fille, on peut faire de même. Faut faire une liste avant pour séparer les actions, et pas se "mélanger"  :D.
 
J'utilise cette méthode "archaïque" pour avoir des sessions monotâches de mes applications en faisant envoyer les coordonnées (avec plusieurs WM_USER + ) et l'état de la feuille suicidée à la nouvelle pour qu'elle s'affiche au même endroit. Ai rien trouvé de "mieux"  :pt1cable: .

Reply

Marsh Posté le 04-10-2001 à 15:39:32    

...ma méthode est plus simple ... non !? :)

Reply

Marsh Posté le 04-10-2001 à 15:40:34    

Et, vous avez vu ce topic !?  :D  
 
http://forum.hardware.fr/forum2.ph [...] &owntopic=
 
interressant, non ? :D

Reply

Marsh Posté le 04-10-2001 à 15:40:34   

Reply

Marsh Posté le 04-10-2001 à 15:42:26    

je garde un oeil sur le topic et vais apliquer tout ca si ca marche meme si c'est crade sa se verrat po :lol: care le code au point ou il en est  :( je lais propé mais bon ca suffit po les gars ki sont passé avant moi ettaient nullllll en progggg... (pas capable de faire kke chose de propre)  :cry:  :cry:  :cry: et moi jai pas d'autre choix que de continuer dans la lignée  :cry:  :cry:  mais bon ya vous tous sur le forum hfr  :hot:  :hot:  heureusement ke vous etes la  :jap:

Reply

Marsh Posté le 04-10-2001 à 15:45:37    

...et personne est là pour moi !? :sweat:

Reply

Marsh Posté le 04-10-2001 à 15:57:59    

et pour assigner un .res a ma fenetre principale comment faut faitre ca apres ca roule car japelle des dialoguebox donc le .res et en param a la fonction.  
 
sinon le truc de carbon_14 ne marche po a 1er vue mais a dut faire une connerie de mon cote donc vais chercher d'ou ca viens

Reply

Marsh Posté le 04-10-2001 à 16:00:05    

Mon SetWindowLong, ça marche et c plus simple !

Reply

Marsh Posté le 04-10-2001 à 16:06:06    

vais essayer de ce pas :) mais la metode de carbon mavais lair plus simple du moin a comprendre ;)

Reply

Marsh Posté le 04-10-2001 à 16:07:46    

Quand on est bon, ça doit être difficile de programmer "crad". :D  
 
Pour le problème C++, j'ai pas encore eu le temps de m'y mettre (au C++), donc suis avant-débutant (!).

Reply

Marsh Posté le 04-10-2001 à 16:08:55    

:lol:  :lol:  
les msdn VC++
 
--------------------------------------
CWindow::SetWindowLong
 
LONG SetWindowLong(int,LONG);
 
See Set WindowLong in the Win32 SDK
--------------------------------------
 
cool lexplication  :lol:  :lol:

Reply

Marsh Posté le 04-10-2001 à 16:10:48    

je ne suis pas bon... mais un code propre c'est si bien  
jai deja vue de codes de 15 000 lignes non comentés super comprehensible car super structuré contrairement a la bouze ke je suis en train de retappé .... (commente dans tout les sens car immonde et abject)

Reply

Marsh Posté le 04-10-2001 à 16:13:09    

Le SetWindowLong permet de gérer les infos extra-fenêtre associées. On y pense rarement (j'ai découvert que ça existe depuis qq temps). Faut voir comment gérer les évènements pour prévenir la feuille d'agir.
 
Faut essayer les différentes voies, sur petit exemple pour comparer. Ca permet peut-être d'en voir les limitations.

Reply

Marsh Posté le 04-10-2001 à 16:16:19    

CARBON_14 a écrit a écrit :

Le SetWindowLong permet de gérer les infos extra-fenêtre associées. On y pense rarement (j'ai découvert que ça existe depuis qq temps). Faut voir comment gérer les évènements pour prévenir la feuille d'agir.
 
Faut essayer les différentes voies, sur petit exemple pour comparer. Ca permet peut-être d'en voir les limitations.  




 
Moi aussi g découvert y a pas longtemps, et je trouve ça bien pratique !

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed