begin process at 2010 02 10 12:19:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

GUI

 > 

case WM_KEYDOWN marche pas quand je suis dans un contrôle.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

case WM_KEYDOWN marche pas quand je suis dans un contrôle.

samedi 18 août 2007 à 17:49:40 | case WM_KEYDOWN marche pas quand je suis dans un contrôle.

paramotdam

Bonjour,
Quand je lance mon programme et que j'appuie sur la touche Entrer, le programme va bien dans VK_RETURN et exécute "SendMessage(MaFenetre, WM_COMMAND, ID_B_ENVOYER, 0);".
Si je met mon curseur dans un contrôle (par exemple editbox), quand j'appuie sur Entrer, rien ne se passe :S.
Comment puis-je faire ?
Voici mon code :
/************************************/
        case WM_KEYDOWN:
            switch(wParam)
            {
                case VK_RETURN:
                    SendMessage(MaFenetre, WM_COMMAND, ID_B_ENVOYER, 0);
                    break;
                default:
                    break;
            }
            return 0;
/************************************/
J'ai une autre question :
J'aimerais savoir si c'est possible de donner le focus à mon editbox en cliquant sur un bouton.
Du genre :
case "clique bouton" :
setfocus(editbox);         // c'est cette ligne qu'il me faudrait, si c'est possible.

Merci,
Damien
samedi 18 août 2007 à 19:13:17 | Re : case WM_KEYDOWN marche pas quand je suis dans un contrôle.

juju12

Réponse acceptée !
SetFocus(hButtonWnd) tout simplement.
Pour ton problème y a une source déposée récemment traitant d'un truc similaire (MOUSEMOVE sur un contrôle).
samedi 18 août 2007 à 21:29:15 | Re : case WM_KEYDOWN marche pas quand je suis dans un contrôle.

paramotdam

pour ma première question, c'est ok, merci.
Mais pour la deuxième, je n'ai pas trouvé le post correspondant à MOUSEMOVE. Si tu as le lien, se m'aiderait...
Damien
dimanche 19 août 2007 à 11:36:18 | Re : case WM_KEYDOWN marche pas quand je suis dans un contrôle.

juju12

C'est la source de rt15 encore dans la liste du sommaire, "savoir quand la souris est sur un contrôle".
dimanche 19 août 2007 à 14:16:30 | Re : case WM_KEYDOWN marche pas quand je suis dans un contrôle.

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,
Tu crées un bouton , visible ou non, ayant comme style BS_DEFPUSHBUTTON et comme identificateur IDOK comme ceci:
hBouton=CreateWindowEx(0, "Button", "Ok", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON  , 20, 20, 60, 20, hwndparent, (HMENU)IDOK, 0, 0);
A l'appui sur la touche Entrée, et ce quelque soit le controle ayant le focus, ta fenêtre mère recevra WM_COMMAND avec le hwnd du bouton et son identificateur. A toi de choisir lequel des deux utiliser.
Si le parent est une boite de dialogue tout marchera directement. Si c'est une fenêtre normale, la boucle des messages devrait ressembler à ceci:
MSG Msg;
while (GetMessage(&Msg, NULL, 0, 0))
{
    if (!IsDialogMessage(hwnd, &Msg))
    {
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
    }
}

lundi 20 août 2007 à 10:48:32 | Re : case WM_KEYDOWN marche pas quand je suis dans un contrôle.

paramotdam

merci beaucoup, sa marche au top !
Saurait tu me dire ce qu'est exactement IsDialogMessage(hwnd, &Msg), histoire de comprendre un peu .
Je ne même pas eu besoin de mettre un "case" pour l'appui sur "Enter".
On dirait que sa quand on appui sur entré, sa actionne le bouton ayant l'identifiant le plus petit :
#define ID_M_ENVOYER      1
Quand je met "#define ID_B_EFFACER" à 1 et "#define ID_M_ENVOYER" à 2 alors quand j'appui sur entré, sa actionne effacer.
lundi 20 août 2007 à 15:29:14 | Re : case WM_KEYDOWN marche pas quand je suis dans un contrôle.

racpp

Administrateur CodeS-SourceS
Une boite de dialogue a sa propore boucle des messages. Cette dernière traite les messages du clavier comme l'appui sur les touches TAB, Enter, les flèches etc. Ce n'est pas le cas avec les fenêtres normales. IsDialogMessage() permet de vérifier si ces messages sont traités. Si oui elle retourne 1, sinon elle retourne 0. Elle retournera donc 0 pour une  fenêtre. Dans ce cas, on appelle TranslateMessage() et DispatchMessage() afin de les transmettre à la procédure de la fenêtre.
Le comportement que tu as remarqué est tout à fait normal car 1 correspond à l'identificateur IDOK comme défini dans winuser.h:

#define IDOK                1
#define IDCANCEL            2
#define IDABORT             3
#define IDRETRY             4
#define IDIGNORE            5
#define IDYES               6
#define IDNO                7
Evite donc de réutiliser les valeurs d'identificateurs déjà utilisées. Tu peux prendre des valeurs supérieures à 100 par exemple.



Cette discussion est classée dans : contrôle, case, wm, return, keydown


Répondre à ce message

Sujets en rapport avec ce message

Question sur les WM_* [ par guitoulefoux ] Bonjour,J'ai une petite question.J'ai un code de se type:(en super simplifié)[...]switch(mssg) { case WM_KEYDOWN: if(Param == VK_UP) { mes Problème avec WM_KEYDOWN: [ par cognac ] Pourquoi est-ce que "j" est toujours égal à 2 lorsque je presse F1(même la première fois). Je pensais qu'à chaque fois que je presse F1 "j" augmente d Problème menu [ par LordBob ] Bonjour a tous,voila j'ai ecrit le tout début d'un programme... celui ci pour l'instant, ne fait que se ranger dans la systray... j'ai commencé a fair WM_MOUSELEAVE [ par JackosKing ] Pkoi j'ai l'erreur suivante:E:\tmp\TinyShell\Twiny.cpp(89) : error C2065: 'WM_MOUSELEAVE' : undeclared identifierquabnd je fais: case WM_MOUSEMOVE : petite question sur les message [ par LordBob ] bonjour a tous,voila mon code est structuré comme ca:BOOL CALLBACK Dialog(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){switch(msg){case WM_INI probleme.. wm_syscommand [ par Gizmoz ] J'ai un problème lorsque je crée une fenetre windows, normal sans mfc, et que je traite le msg wm_syscommand de la facon suivante:case WM_SYSCOMMAND : C/API Win32 - Problème avec System Try.... [ par JimyRyan ] Bonjour.J'ai un programme d'on j'ai créé une interface graphique en C/API Win32.Mon derrnier problème avant de cloturer le developpement de mon prog e CreateWindowEx [ par Galmiza ] Salut,J'ai fait une application en plein ecran en utilisant la fonction CreateWindowEx et directX. (pour l'instant j'ai desactivé les textures)L'appui Pb de changement de curseur (SetClassLong) [ par AlexMAN ] Voila, J'essaye de changer le curseur lorsk l'utilisateur survole un controle static, j'utilise (a linstar de BruNews) la fonction SetClassLong mais c WM_KEYDOWN et dialog box [ par AlexMAN ] Bonjour, Je me demande sil est possible d'utiliser le message WM_KEYDOWN dans une dialog box, paske j'essaie depuis une bonne heure, mais ca n'a pas l


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales