Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : case WM_KEYDOWN marche pas quand je suis dans un contrôle. [ Windows / GUI ] (paramotdam)

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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.