acryline
Messages postés33Date d'inscriptiondimanche 14 mai 2006StatutMembreDernière intervention16 décembre 2006
-
22 août 2006 à 19:32
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
23 août 2006 à 15:24
Bonjour déjà
Bon voilà mon problème et je seche depuis quelques heures dessus. Ce serait sympa de m'aider .
Je fais un petit programme en API windows . J'ai dessiné une fenêtre, une image de fond, quelques boutons... J'aimerais pouvoir redessiner cette fenêtre quand je presse sur un bouton.
Les notifications des boutons sont testées dans "case WM_COMMAND" par une fonction de mon cru dans laquelle une structure de deux termes( BOOL) est mise à jour et qui est retournée par cette fonction..... ok ? ( En fait leurs valeurs sont inversée. )
J'ai vérifié, sous WM_COMMAND la structure est bien modifiée en passant pas la fonction en question.
Alors j' utilise la fonction InvalidateRect comme ceci pour forcer le message WM_PAINT.
if (temoins.liste) InvalidateRect(hwnd, 0, TRUE);
Passons au code de case WM_PAINT :
case WM_PAINT:
{
HDC hdc =NULL;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd,&ps);
if(temoins.couv) dessinerCouverture (hwnd,hdc,ps, "Carnet d'adresses",hBouton); // la fonction
if(temoins.liste) exit(0); //pour voir si ça passe ...et non ! :(
EndPaint(hwnd, &ps);
return 0;
}
return 0;
Comme vous l'avez compris, ma fenêtre ne se ferme pas quand temoins.liste =TRUE. Pourquoi ??
J'aimerais bien pouvoir dessiner ma fenêtre avec une autre fonction quand temoins.liste =TRUE.
acryline
Messages postés33Date d'inscriptiondimanche 14 mai 2006StatutMembreDernière intervention16 décembre 2006 22 août 2006 à 21:19
Ok alors super c'est vrai mon problème est résolu. C'est vraiment très sympa de ta part d'y avoir passé autant de temps.
J'avais une idée sur une sujet :je j'ai rien trouvé de bien clair pour une débutant concernant la création de messages sur internet... peut être que tu sais où je pourrais trouver ça, où alors c'estune idée de tuto ?
acryline
Messages postés33Date d'inscriptiondimanche 14 mai 2006StatutMembreDernière intervention16 décembre 2006 22 août 2006 à 21:25
Nan , je me suis mal exprimée lol
Je voulais dire que je n'ai rien trouvé sur internet sur la création de messages perso style (à ce que j'ai pu comprendre) WM_USER+x
La déclaration : où , comment ?
L'histoire de la place prise par d'autres application et registerMessageWindow etc...
A quoi ça sert, comment les utiliser.
J'ai lu pas mal de choses mais ça reste très flou.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 22 août 2006 à 21:30
Quand j'ai besoin de définir un message perso, je fais juste un #define WM_MESSAGEPERSO (WM_USER + X)
RegisterWindowMessage: jamais utilisé, je connais pas
Tu cherches à faire quoi?
acryline
Messages postés33Date d'inscriptiondimanche 14 mai 2006StatutMembreDernière intervention16 décembre 2006 22 août 2006 à 21:36
Je voulais envoyer un message d'une fenêtre fille vers la fenêtre parent pour lui dire de se redessiner et ouvrir une autre fenêtre fille après la destruction de cette fenetre fille... une histoire de fenêtres quoi lol
Alors comme je n'arrivais pas à faire passer ni WM-PAINT ni WM_CREATE je voulais créer un nouveau message....j'ai vraiment tout essayé.
A la fin j'ai décidé de n'utiliser qu'une seule fenêtre comme tu l'as vu , d'où le problème qui m'a amenée ici...
acryline
Messages postés33Date d'inscriptiondimanche 14 mai 2006StatutMembreDernière intervention16 décembre 2006 22 août 2006 à 22:43
Merci
Mais je n'ai pas vraiment saisi l'utilité de ce message WM_USER ou APP. Je sais que c'est utile pour passer d'un thread à un autre mais comme un thread pour moi c'est une sujet de forum ça ne m'avance pas !
Est ce qu'on peut l'utiliser pour passer d'une fenêtre fille à une fenêtre parent ? Est ce que tu as un exemple simple qui me ferait comprendre son utilité et me rendre accro au messages perso ?
Dernière petite question : si on veut faire passer une valeur dans ce message est ce qu'on peut utiliser lParam et wParam ?
C'est génial de trouver des personnes qui répondent vite et bien ! J'abuse peut être ??
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 22 août 2006 à 23:00
Bien sûr tu peux envoyer ce message de n'importe quel endroit de ton code. wParam et lParam sont là pour passer des valeurs, des pointeurs ou tout ce que tu veux.
Je vais regarder certaines de mes sources où j'utilise ce genre de messages.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 23 août 2006 à 04:40
Je ne saisis pas bien la différence entre WM_USER et WM_APP:
WM_USER through 0x7FFF Integer messages for use by private window classes.
WM_APP through 0xBFFF Messages available for use by applications.
En gros si c'est une classe de fenêtre que tu as créée (avec RegisterClassEx), tu peux lui envoyer WM_USER sans souci. Par contre on ne doit pas l'envoyer à une DialogBox par exemple?
<link href="../../../../../css/ie4.css" type="text/css" rel="stylesheet" /><!-- @ --><link href="../../../../../css/inetsdk.css" type="text/css" rel="stylesheet" /><!-- @ --><style type="text/css"><![CDATA[
PRE.clsCode { font-size:110%; }
PRE.clsSyntax { font-size:100%; }
TD DIV.clsBeta { display:none;}
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 23 août 2006 à 05:31
Dans une de mes applications, j'avais remarqué des comportements bizarres. J'ai longtemps cherché l'erreur dans le code sans y parvenir. C'est en soupçonant l'utilisation de WM_USER que j'ai réussi à résoudre le problème. J'ai commencé par changer les valeurs de mes messages et là j'ai découvert que tout devient normal. En cherchant à comprendre, j'ai appris que la plage de valeurs de WM_USER à 0x7FFF pourraient être utilisées par des contôles comme les EDIT, LISTBOX, COMBOBOX etc. Ce problème ne se pose pas avec l'utilisation des valeurs WM_APP (0x8000-0x8FFF). Les messages définies dans cette plage ne sont valides que dans l'application. Depuis que j'ai commencé à les utiliser, plus aucun problème.