SendMessage a deux editbox

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 - 12 oct. 2004 à 23:26
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 13 oct. 2004 à 23:13
salut a tous.
j'essaie d'nevoyer a l'affilée de message WM_SETTEXT a deux EditBox distincts, et apparement le premier EditBox recoit bien son message mais pas le second.....au depart il recevait ce message, et apres avoir effectué une modification qui n'a, a priori, aucune influence la dessus, ce second message n'est plus recu.....je pense que c'est pas assez précis et qu'il faudrait le code, mais y'en a tellement pr que ca puisse etre un minimum clair que je post pas pr l'instant, et si qqun a une idée, et qu'en fait c'est juste un fonctionnement du SendMessage que j'ai pas capté, ca m'evitera de poster tt ca. si vraiment c'est necessaire et que c'est pas un bug du au SendMessage parce que qqch ma echappé, dites le jessaierais de poster le plus concis et malgré tt complet possible. merci d'avance

9 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 oct. 2004 à 23:49
Aucun bug sur SendMessage, tu as surement un prob de handle.

ciao...
BruNews, MVP VC++
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
13 oct. 2004 à 08:51
je parlais pas d'un bug sur sendmessage, mais de dire que mon sendmessage provoque un bug parce qu'il a un comportement que je n'avais pas controlé. qu'est ce que tu entend par pb de handle? au pire je post mon code. le plus bizarre est que quand je regarde les données que je dois envoyer a ma seconde edtibox, le message est correct, mais ma editbox la recoit pas. j'ai testé de faire une messagebox qui me fait afficher le message a envoyer, ce message est correct. d'ailleurs quand je fais cette messagebox de test, aucuns de mes 2 messages n'est envoyé....j'avoue que j'y perd mon c++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
13 oct. 2004 à 10:05
Au lieu de perdre ton temps avec des SendMessage() pour afficher du texte, utilises l'API SetWindowText() ou SetDlgItemText(), ca sera plus rapide et ca rendra ton code plus lisible.

ex :
SetDlgItemText(hWnd, IDC_EDIT1, "Bonjour");
ou
SetWindowText(hEdit1,"Bonjour");

hEdit1 correspond au handle de ton EditBox. C'est ce dont BruNews te parle plus haut.
Pour la récupérer, utilises l'API GetDlgItem.
Exemple:
/*Déclaration du handle de l'EditBox*/
HWND hEdit1;

/*On affiche le texte dans l'EditBox*/
SetWindowText(hEdit1, "Bonjour");


Voila, rien de très compliqué.

Shell
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
13 oct. 2004 à 10:11
bah mes handles sont en globaux....donc je connais mes handles, ya pas de pb de ce coté. la jai pas VC sous la main, mais des que j'ai ce qu'il faut, je teste ca, je reposterais pr dire si ca marche. merci pour le setwindowtexte et setdlgitem, chui pas en api depuis tres longtps, jai pas encore bcp de fonctions en tete, je fais avec ce que je connais, dc ca me fait ca en plus, merci.
il n'empeche que j'aimerais comprendre pk ca marche pas, et pk comme j'ai fait on dirais que mon deuxieme message n'est pas recu....bon pas grave pr linstant, mais si je pouvais avoir une explication, ca maiderais, jaime bien capter comment fonctionnent les choses en profondeur....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 oct. 2004 à 10:56
SetWindowText, SetDlgItemText, SendMessage(WM_SETTEXT), c'est pareil :

"The SetWindowText function causes a WM_SETTEXT message to be sent to the specified window or control."

"The SetDlgItemText function sends a WM_SETTEXT message to the specified control."

Donc c'est pas plus rapide, mais plus lisible oui.
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
13 oct. 2004 à 11:23
et a part ca, qqun a une explication a mon pb?
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 oct. 2004 à 13:55
si tu es sous visual C++, il y a un outils appelé Spy++ qui permet de connaître le handle des contrôles (et ainsi vérifier que tu as le bon) et de voir les messages qu'il traite.

Sinon tu parle d'une modification apportée qui fait que ça ne marche plus, qu'elle est elle ? elle a peut être un effet caché.
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
13 oct. 2004 à 18:58
bon je vais essayer de mettre un code relativement explicite avec explications.
j'ai une fenetre avec 12 boutons (pour l'instant), et deux editbox. (juste pour la partie qui pose probleme). lorsque je click sur un bouton, je veux sauvegarder les parametres entrées dans les editbox dans un objet contenant toutes les données relatives a ce bouton, puis afficher les données concernant le bouton sur lequel j'ai clické(en gros...) j'ai donc codé ca:

case WM_COMMAND:
if (IndCurrentNode != 999 && IndCurrentButton != 999)
{
char Buf [64];
char Buf2 [2];
GetWindowText (Zone_Texte, Buf, 64);
GetWindowText (Zone_Racc, Buf2, 2);
VNodes[IndCurrentNode].ModifButton (IndCurrentButton,string (Buf),Buf2[0]);
break;

}

if (HIWORD(wParam) == BN_CLICKED) switch (wParam)
{
case ID_BUTTON_1:
FindButton (0,0);
goto Lbl;
case ID_BUTTON_2:
FindButton (1,0);
goto Lbl;
case ID_BUTTON_3:
FindButton (2,0);
goto Lbl;
case ID_BUTTON_4:
FindButton (3,0);
goto Lbl;
case ID_BUTTON_5:
FindButton (0,1);
goto Lbl;
case ID_BUTTON_6:
FindButton (1,1);
goto Lbl;
case ID_BUTTON_7:
FindButton (2,1);
goto Lbl;
case ID_BUTTON_8:
FindButton (3,1);
goto Lbl;
case ID_BUTTON_9:
FindButton (0,2);
goto Lbl;
case ID_BUTTON_10:
FindButton (1,2);
goto Lbl;
case ID_BUTTON_11:
FindButton (2,2);
goto Lbl;
case ID_BUTTON_12:
FindButton (3,2);
Lbl:
SendMessage  (Zone_Texte, WM_SETTEXT, 0,(LPARAM) string (VNodes[IndCurrentNode].GetButtons()[IndCurrentButton].GetTexte()).c_str());

SendMessage (Zone_Racc, WM_SETTEXT, 0,(LPARAM) string (1, VNodes[IndCurrentNode].GetButtons()[IndCurrentButton] .GetRaccourci()).c_str());


pour essayer d'eclaircir tout ca, j'ai un vecteur qui contient les différents boutons a afficher dans tel ou tel cas, et chaque element de ce vector contient un vector avec les informations relatives a chaque bouton. les valeurs 999 sont pour au vas ou on aurait eut une selection invalide du noeud pour ne pas fausser les informations, puisque dans aucun cas on n'aura 999 valeurs dans un des 2 vecteurs.

les variables IndCurrentXX sont declarées en globales de meme que mes handles. FindButton permet de trouver a quel bouton du vecteur correspond le bouton sur lequel on a cliqué.
voila pour le résumé.
le probleme ne se pose pas si j'enleve

if (IndCurrentNode != 999 && IndCurrentButton != 999)
{
char Buf [64];
char Buf2 [2];
GetWindowText (Zone_Texte, Buf, 64);
GetWindowText (Zone_Racc, Buf2, 2);
VNodes[IndCurrentNode].ModifButton (IndCurrentButton,string (Buf),Buf2[0]);
break;
}

et ne se pose plus si je sort les declarations de mes buffers du bloc "if" et que j'appelle modifbutton apres avoir fait mes deux sendmessage (..., WM_SETTEXT, ...);

en bref mon pb est résolu, mais je n'ai pas la moidre idée de ce qui se passe et j'aimerais sincerement comprendre......
merci d'avance a ceux qui passeront du tps sur ce code pour essayer de m'expliquer
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
13 oct. 2004 à 23:13
Bababababa, c'est quoi ce truc dégeulasse!!!!
Pour commencer tu peux virer tout ces goto et mettre en mettant a la suite tout les ID de controles qui appellent le meme bloc d'instruction, et tu ne mets pas de break entre.
Comme ce des que tu as un événements qui est généré, ca ira directement au bloc d'instruction sans appeller de goto.

Sinon je vois pas dans ton code ou tu récupère le handle de tes editbox.

ymca2003> j'entendais par plus rapide, non pas le temps d'execution, mais la taille de la ligne a écrire entre un SendMessage et SetDlgItemText ou SetWindowText.
Autant pour moi.

Shell
0
Rejoignez-nous