Neomaster951
Messages postés7Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention24 novembre 2007
-
14 sept. 2007 à 18:58
Neomaster951
Messages postés7Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention24 novembre 2007
-
17 sept. 2007 à 23:24
Bonjour, j'aimerais que lorsqu'un utilisateur écrive dans une rich edit box, que dès qu'il appuye enter, ça exécute une fonction. J'ai essayé de mettre l'événement WM_KEYDOWN dans mon MainWndProc ci-dessous, mais ça ne fonctionne que lorsque l'utilisateur n'a pas cliqué sur le contrôle :x Un peu d'aide serait vraiment apprécié, merci d'avance ^^
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 17 sept. 2007 à 14:38
La deuxième solution s'appelle le sous-classement. Elle n'est utile que lorsque tu veux capturer des touches autres que Entrée. Voici un code complet que je viens de faire pour tester:
#include <windows.h>
#include <richedit.h>
void ProcessCommand(void)
{
MessageBox(0,"La fonction est appelée.","Test",0);
}
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 14 sept. 2007 à 19:50
En fait tu peux faire ca avec le style ES_WANTRETURN : quand tu fais enter il envoie un message WM_COMMAND en provenance du bouton de commande par défaut, donc si tu as ça sur ta fenêtre...
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 14 sept. 2007 à 21:49
Salut,
Le style ES_WANTRETURN permet juste à un richedit, ayant aussi le style ES_MULTILINE, de passer à une nouvelle ligne après appui sur la touche Entrée. Sinon, cet appui sera capturé par la boite de dialogue ou la fenêtre mère. Pour appeler une fonction à l'appui sur Entrée, on défini un bouton par défaut ayant BS_DEFPUSHBUTTON comme style et IDOK comme identificateur:
hOk=CreateWindow("button","Ok",WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,10,10,60,20,hwndparent,(HMENU)IDOK,0,0);
Si le parent est une boite de dialogue, cela marchera directement. si c'est une fenêtre, la boucle des messages doit ressembler à ceci:
while (GetMessage(&Msg, 0, 0, 0))
{
if (!IsDialogMessage(hwnd, &Msg))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
L'appui sur Entré sera considéré comme un clic sur le bouton par défaut, et ce quelque soit le controle ayant le focus.
Bon... la, si je lance mon application a partir de visual studio -> Start debugging, je tape mon texte et quand j'appuye sur enter ça exécute la commande sans problème. Le prob, c'est lorsque je part mon application hors de visual studio. Elle refuse d'exécuter la fonction quand j'appuye sur enter, mais bizarrement après quelques messages envoyés en appuyant sur le bouton, ça marche quand j'appuye sur enter...
Vous n’avez pas trouvé la réponse que vous recherchez ?