begin process at 2010 02 10 17:08:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

GUI

 > 

Boite de dialogue et WM_KEYDOWN


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

Boite de dialogue et WM_KEYDOWN

jeudi 26 octobre 2006 à 21:17:53 | Boite de dialogue et WM_KEYDOWN

solidsnake88

Bonjour à tous,


juste une question a propos de l'interception de WM_KEYDOWN par une boite de dialogue qui possede des controles a l'interieur. J'ai vu l'anbondante litterature qu'il y a dessus sur ccpFrance mais pas de reponse claire. Normalement le focus va sur le premier bouton. Donc il recupere tout les evenement et je ne peux pas les trouver dans ma fenetre. Mais c'est precisement ce que je voudrais faire. Je voudrais recuperer tout les KEYDOWN qui arrive sur ma fenetre en entier. J'essaye de tout faire avec le fabuleux visual studio .NET pour faire style que je sais me servir de cette belle interface graphique mais si ca continue je retourne sous GTK. Alors si vous ave une solution... ca serais bien d'exploiter cette belle interface! Comment le faire avec les bouton de visuals, a la souris comme les jeunes. Je vous serais tres reconnaissant.

Merci encore pour votre aide.
jeudi 26 octobre 2006 à 21:27:40 | Re : Boite de dialogue et WM_KEYDOWN

solidsnake88

Et pour la route,


pensez vous gagner du temps ou de la souplesse en utilisant l'interface visual ou bien vous ecrivez encore vos creations de fenetres et de controles a la main. Parce que je viens de l'algorithmique pure et dure et j'essaye de mettre une interface graphique la dessus parce que c'est moche. Pour moi je dois coder avec les touches du clavier creer tout a la main avec des create mais est-ce que je gagnerais du temps a utiliser visual studio par exemple en creant une fenetre avec la souris. C'est quand meme cool!
jeudi 26 octobre 2006 à 21:33:18 | Re : Boite de dialogue et WM_KEYDOWN

Ombitious_Developper

Salut :

Moi je travaille avec Visual C++ 6.0.
Pour récupérer les messages WM_KEYDOWN tu dois ajouter dans ta classe une méthode "OnKeyDown".

1. Supposons que tu a appelé ton projet "Test".
2. Clic droit sur la classe "CTestDlg".
3. Choisir l'option : "Add Windows Message Handler ...".
4. Chercher le message WM_KEYDOWN dans la liste des messages qui apparaissent WM_*.
5. Finalement, clic sur "Add and Edit"

Bonne chance ...
jeudi 26 octobre 2006 à 21:57:58 | Re : Boite de dialogue et WM_KEYDOWN

solidsnake88

En fait je suis parfaitement d'accord avec toi. Mais apres le probleme c'est que comme j'ai des boutons ils recuperent automatiquement le focus et ma fenetre ne voit pas l'evenemet. Si je fais un spy++ sur ma fenetre aucun evenement arrive. Mais si je fais un spy++ sur mon bouton lui il recoit tout les message. Je cherche en fait comment recuperer les message juste au niveau de la fenetre et pas l'intercepter mais juste le lire.

Et desole c'est pas la bonne section j'ai refait le meme post sous windows.
jeudi 26 octobre 2006 à 22:14:00 | Re : Boite de dialogue et WM_KEYDOWN

Ombitious_Developper

Salut :

Mon ami qaund tu travailles avec les boutons et pour gérer le clic sur ces boutons tu as besoin du message WM_COMMAND non pas du message WM_KEYDOWN.

suivant le LOWORD (wParam) du message WM_COMMAND tu détermine le bouton cliquée.
vendredi 27 octobre 2006 à 00:36:52 | Re : Boite de dialogue et WM_KEYDOWN

racpp

Administrateur CodeS-SourceS
Salut,
Je viens de corriger la catégorie de ton message. J'ai aussi supprimé le dernier.
A propos de ta question, il y'a deux solutions:
1- Sous-classer tous tes controles. Une seule fonction de sous-classement suffit. Dans cette fonction, le message WM_KEYDOWN sera intercepté puis renvoyé à la procédure de la boite de dialogue avec SenMessage() ou PostMessage().
2- Faire un hook comme celui proposé par BruNews:
http://www.cppfrance.com/codes/HOOK-ENTER-SUR-DIALOGBOX-WIN32_11007.aspx

Pour la création des fenêtre et controles, personnellement je préfère utiliser CreateWindow(). Il est vrai que l'éditeur visuel est plus rapide mais je préfère mieux maitriser mon interface graphique avec la précision que je veux.

vendredi 27 octobre 2006 à 00:59:29 | Re : Boite de dialogue et WM_KEYDOWN

solidsnake88

Tres bien alors pour le hook je suis entierement d'accord mais pourrais tu un peu expliciter ta solution numero un. Vraiment elle me plait bien. Et enfin pour ta preference je partage entierement ton avis vraiment tu me conforte dans ma voie. Je prefere maitrise la chose que voir visual qui rajoute des tas de fichier qui a la fin, si dieu le veut, marche correctement. Mes resultats doivent etre absolument fiable et je ne peux me permettre de faire passer mon float a travers une centaine de cast.

Merci en tout cas pour ta reponse claire et concise. Du bon boulot.
vendredi 27 octobre 2006 à 02:46:05 | Re : Boite de dialogue et WM_KEYDOWN

racpp

Administrateur CodeS-SourceS
Il faut d'abord déclarer une variable globale de type WNDPROC pour y sauvegarder l'adresse de la procédure originale du controle à sous-classer:
WNDPROC OldProc;
La fonction de sous-classement doit ressembler à ceci:
LRESULT CALLBACK NotreProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{   
    if(message==WM_KEYDOWN)
    {
        SendMessage(GetParent(hwnd),message,wParam,lParam);
        return 0;
    }
   // Appeler la procédure originale:
    return CallWindowProc(OldProc, hwnd, message, wParam, lParam);
}

L'activation de notre fonction de sous-classement se fait juste après la création du controle pendant le traitement de WM_INITDIALOG ou WM_CREATE:
hwndBouton=CreateWindow(......);
OldProc=(WNDPROC)SetWindowLong(hwndBouton,GWL_WNDPROC,(long)NotreProc);
Ainsi, tous les WM_KEYDOWN seront renvoyés à la procédure de la boite ou fenêtre mère.

vendredi 27 octobre 2006 à 09:17:00 | Re : Boite de dialogue et WM_KEYDOWN

vecchio56

Administrateur CodeS-SourceS
Attention, la même WndProc ne peut pas être utilisée pas tous les controles. Il faut un WndProc par type de contrôle, car par exemple un edit et un button n'ont pas le même OldProc. Si tu as plusieurs types de controles, je pense donc que l'autre solution (le hook) est meilleure

_____________________________________
Un éditeur de ressources gratuit pour Windows

vendredi 27 octobre 2006 à 10:18:14 | Re : Boite de dialogue et WM_KEYDOWN

solidsnake88

Donc pour le hook, maintenant je vois son utilité. En effet une WndProc par type de controle ca va etre un peu long quoique...


Pour la solution de racpp. Je la testerais ce soir je dois partir au boulot.

Merci encore tout les deux pour des solutions claires et concises comme on en voit peu. Super. Chapeaux bas.

1 2 3

Cette discussion est classée dans : bouton, boite, wm, dialogue, keydown


Répondre à ce message

Sujets en rapport avec ce message

Pb communication Fenetre [ par fytlos ] Je c que cette kestion a deja été posée mais je n'y arrive toujours pasJe developpe sous Visual C++G créé mes propres messages.J'ouvre une boite de di Boite de dialogue MFC [ par julok2 ] Salut,j'écris actuellement un programme dans lequel j'ouvre des boites de dialogue. J'ai donc créé des fonctions OnBouton dans une autre classe où j'u Modifier Couleur d'un Bouton et d'une Boite de Dialogue en C++? [ par alanbraxe31 ] Bonjour tt l'monde!je cherche un script simple ( car je suis débutant en c++) pour modifier la couleur d'une boite de dialogue créée automatiquement, Insérer bitmap dans un bouton dans une boite de dialogue [ par safira ] safira:)Salut! Je suis nouvelle dans ce forum! J'aimerais savoir comment mettre un bitmap dans bouton qui se trouve dans une boite de dialogue avec MF bouton :-) [ par melaaddali ] Bjr je programme avec vc++.Je veux savoir comment associer une boite de dialogue à un bouton. cad si j'appuie sur le bouton je veux que la boite de di Boite de dialogue [ par qa1du ] Une petite question. J'ai cree une boite de dialogue, avce un CreateDialog. Mon pb c qu'elle ne reagit pas aux messge WM_CHAR, WM_KEYDOWN (tout ce qui MFC Boite de dialogue et WM_KEYDOWN [ par topic1 ] je débute en programmation MFCmon problème est le suivantje crée une boite de dialogue dans laquelle je place un bouton pour quitter et je veux que ce changer la couleur de fond d'une boite de dialogue [ par fox88 ] mon programme se compose d'une boite de dialogue dont j'ai changer la couleur de fond grace à WM_CTLCOLORDLGmais j'ouvre ensuite une seconde boite de Bouton enregisté [ par anaxode ] J'ai un petit problème , je voudrais enregisté le contenu de richEdit dans un fichier.J'arrive a le faire depuis une Boite de dialogue , mais j'arri Bouton et Boite de dialogue OpenGL [ par asmanur ] Ma question d'aujourd'hui :Est-il possible de créer des boutons et des boite de dialogue sous glut facilement (et j'insiste sur facilement)Merci d'av


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

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,936 sec (4)

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