[C/C++] [Win32] Eviter le beep lors d'un Entrée

Eviter le beep lors d'un Entrée [C/C++] [Win32] - C++ - Programmation

Marsh Posté le 23-02-2003 à 11:34:47    

Salut,
Je crée une dialog en win32 sans MFC. Je place un controle Edit dedans (d'ailleurs je le fait en faisant un CreateWindow("EDIT",...) c'est la bonne méthode ? pas de fichier ressources...) et donc quand je presse la touche entrée (lorsque que ce control a le focus, ou même s'il l'a pas) on entend un beep. La raison est que je n'ai pas de bouton dans ma dialog (bouton par "Default" ) et donc entrée normalement appel l'évènement associé à ce bouton mais vu qu'il n'y a pas de bouton, et bien beep....
si qqn a une idée...
merci
    ANT

Reply

Marsh Posté le 23-02-2003 à 11:34:47   

Reply

Marsh Posté le 23-02-2003 à 15:46:08    

:bounce:

Reply

Marsh Posté le 24-02-2003 à 10:27:05    

:bounce:

Reply

Marsh Posté le 24-02-2003 à 11:19:00    

Une première question : Pourquoi n'utilise pas de fichier de ressource ? Tu ajoutes simplement ta boîte de dialogue et tu la crée dans ton programme avec la fonction CreateDialog(/i] ou [i]DialogBox.
 
Et sinon, pourquoi veux-tu modifier le comportement par défaut de Windows ? Il vaut mieux ajouter un bouton par défaut ("OK" normalement). Si tu ne mets pas de bouton par défaut, il est normal que l'appui sur la touche entrée provoque un avertissement (qui indique à l'utilisateur : "Pas d'évenement associé avec cette action" ). Tu peux peut être t'intéresser au style ES_WANTRETURN pour ton edit.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 24-02-2003 à 11:34:24    

En MFC il me semblait qu'il y avait moyen d'intercepter ça et d'empêcher que le message soit "translated", en win32 pas possible ?
En tout cas le ES_WANTRETURN c'était une très bonne idée mais je ne vois pas comment le faire marcher car mon controle est "monoligne" donc ben ce style n'a pas d'effet...

Reply

Marsh Posté le 24-02-2003 à 12:23:46    

gatorette a écrit :

Une première question : Pourquoi n'utilise pas de fichier de ressource ?


En passant (j'ai aussi une appli qui fait "pouète" sans que je le veuille), dans le fichier RC, on peut mettre la feuille principale ? Je l'utilise pour les feuilles "secondaires".
 
Je fais comme lui et dessine "au vol" zones texte, combobox et boutons sur ma feuille ppale. Les autres feuilles, pas de pb, ça roule.

Reply

Marsh Posté le 24-02-2003 à 13:13:53    

Je me suis décidé à insérer un button avec le style BS_DEFPUSHBUTTON mais ça fait pareil !!!! J'ai un beep et il fait pas ce qui est dans
WM_COMMAND, BN_CLICKED, etc
 
pourquoi ??

Reply

Marsh Posté le 24-02-2003 à 15:23:46    

CARBON_14 a écrit :


En passant, ..., on peut mettre la feuille principale ? Je l'utilise pour les feuilles "secondaires".
 
Je fais comme lui et dessine "au vol" zones texte, combobox et boutons sur ma feuille ppale. Les autres feuilles, pas de pb, ça roule.


 
Ben normalement, il y a pas de problèmes. Si je comprend bien tu crées une application où ta feuille principale est une boîte de dialogue ? Si tu veux l'équivalent d'un projet boîte de dialogue dans les MFCs, la solution la plus simple est dans ton WinMain de créer ta boîte de dialogue de façon modale (sans créer de fenêtre). Si tu veux recréer l'équivalent d'une CFormView dans les MFCs, le mieux est encore de créer une boîte de dialogue non modale qui fait exactement la taille de ta fenêtre principale.
 

ANTSite a écrit a écrit :

En tout cas le ES_WANTRETURN c'était une très bonne idée mais je ne vois pas comment le faire marcher car mon controle est "monoligne" donc ben ce style n'a pas d'effet...



Effectivement... mais je pensais que ton souçi était peut être lié à l'utilisation d'un contrôle multi-lignes dans lequel tu voulait pouvoir mettre des entrées.
 

ANTSite a écrit a écrit :

Je me suis décidé à insérer un button avec le style BS_DEFPUSHBUTTON mais ça fait pareil !!!!



Je crois avoir compris pourquoi ça fait ça ! En fait, il me semble que quand tu appuie sur Entrée, l'action effectuée est celle du contrôle qui a le focus. Je ne serais pas surpris que dans ton WM_INITDIALOG de ta boîte de dialogue, tu renvoie 0 (FALSE). Ceci indique à Windows que tu as déjà attribué le focus a un contrôle. Comme tu ne le fais pas, le focus n'est attribué a aucun contrôle et quand tu appuie sur Entrée, il y a un problème.

MSDN - WM_INITDIALOG a écrit a écrit :

An application can return FALSE only if it has set the keyboard focus to one of the controls of the dialog box.



---------------
each day I don't die is cheating
Reply

Marsh Posté le 24-02-2003 à 15:37:26    

dans la VCL de Borland il suffit de mettre à 0 la valeur de Char dans le OnKeyPress mais en observant leur code j'arrive pas à piger comment ça marche au niveau de l'API Windows :/


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-02-2003 à 16:08:17    

Ma boucle des messages ne contenait pas de WM_INITDIALOG.
j'ai jouté ce code, mais ça fait pareil:
case WM_INITDIALOG:
return TRUE;

Reply

Marsh Posté le 24-02-2003 à 16:08:17   

Reply

Marsh Posté le 24-02-2003 à 16:12:43    

Bon, je vois pas trop alors... Tu peux poster une partie de ton code ? Et sinon, tu crée comment ton dialogue ? Tu as essayé avec un fichier de ressource ?


---------------
each day I don't die is cheating
Reply

Marsh Posté le 24-02-2003 à 18:37:07    

Mon code est assez classique:
un windowProc
un winMain qui contient un CreateWindow pour créer la fenêtre principale et 2 ou 3 CreateWindow suivent pour créer les controles (edit, list)
J'ai donc ajouter un button avec le style par default et malgrès ça l'appui sur entrée n'y fait pas "appel"

Reply

Marsh Posté le 24-02-2003 à 18:48:47    

Je t'avais expliqué pourquoi dans un autre post ...
C'est ton edit qui est responsable, ceci indiférement d'un push button ...
Elle est seule, elle a le focus.
Elle n'est pas multiline, le gars veut aller à la ligne (appui sur entrée), alors le controle émet un beep pour signaler qu'on peut pas aller à la ligne.
Faut subclasser ton edit, et quand tu traites WM_CHAR, faut pas appeler OldProc, car sinon OldProc va émettre le beep (faut donc appeler OldProc tout le temps sauf en cas d'appui sur entrée).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-02-2003 à 18:52:23    

ah ok j'avais pas fait le lien entre les 2, je vais tester ça

Reply

Marsh Posté le 24-02-2003 à 19:00:30    

Ok ben voila ça marche:
 
dans le proc associé à l'edit
WM_CHAR:
if(wParam == VK_RETURN)
return 0;
break;
 
nickel, merci, et excuse moi j'ai été long à la détente sur ce coup là pourtant c'était vraiment bien expliqué ici:
 
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
et pour éclaircir ton "doute", le entrée du pad nom marche  :)


Message édité par antsite le 24-02-2003 à 19:01:19
Reply

Sujets relatifs:

Leave a Replay

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