Accueil > Forum > > > > Boite de dialogue et WM_KEYDOWN
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
|
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.aspxPour 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
|
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
|
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.
|
|
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
Livres en rapport
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Forum
ARBRE BINAIREARBRE BINAIRE par pacotheking
Cliquez pour lire la suite par pacotheking
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|