Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
595 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°315763
antsite
Je me souviens
Posté le 23-02-2003 à 11:34:47  profilanswer
 

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

mood
Publicité
Posté le 23-02-2003 à 11:34:47  profilanswer
 

n°315864
antsite
Je me souviens
Posté le 23-02-2003 à 15:46:08  profilanswer
 

:bounce:

n°316213
antsite
Je me souviens
Posté le 24-02-2003 à 10:27:05  profilanswer
 

:bounce:

n°316275
gatorette
Posté le 24-02-2003 à 11:19:00  profilanswer
 

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
n°316312
antsite
Je me souviens
Posté le 24-02-2003 à 11:34:24  profilanswer
 

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...

n°316387
Carbon_14
Posté le 24-02-2003 à 12:23:46  profilanswer
 

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.

n°316424
antsite
Je me souviens
Posté le 24-02-2003 à 13:13:53  profilanswer
 

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 ??

n°316588
gatorette
Posté le 24-02-2003 à 15:23:46  profilanswer
 

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
n°316595
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-02-2003 à 15:37:26  profilanswer
 

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
n°316604
antsite
Je me souviens
Posté le 24-02-2003 à 16:08:17  profilanswer
 

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

mood
Publicité
Posté le 24-02-2003 à 16:08:17  profilanswer
 

n°316607
gatorette
Posté le 24-02-2003 à 16:12:43  profilanswer
 

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
n°316763
antsite
Je me souviens
Posté le 24-02-2003 à 18:37:07  profilanswer
 

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"

n°316777
HelloWorld
Salut tout le monde!
Posté le 24-02-2003 à 18:48:47  profilanswer
 

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
n°316782
antsite
Je me souviens
Posté le 24-02-2003 à 18:52:23  profilanswer
 

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

n°316793
antsite
Je me souviens
Posté le 24-02-2003 à 19:00:30  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
[C/C++] [Win32 API] Récupérer le nom du dossier contenant ce programmeen Win32, comment déterminer si un contrôle est "enabled" ou non ?
[Win32] Forcer l'ecriture sur un fichier utilisé par un autre process[win32 vs6] application console vs service
[Win32] Wininet : savoir si un fichier existe ?[VC++ WIN32] Comment recuperer l adresse IP d'une interface reseau ?
[Win32] Solutions simples pour lire des fichiers sons.formulaire : action submit qd on appuis sur entree
Tester le type d'une variable entrée dans scanffixer un Graphics pour eviter kil ne s'efface, c possible ?
Plus de sujets relatifs à : [C/C++] [Win32] Eviter le beep lors d'un Entrée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR