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
TECHDAYS PARIS 2010 : ADMINISTRATION SHAREPOINT 2010TECHDAYS PARIS 2010 : ADMINISTRATION SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Patrick Guimonet et Benoit Hamet Cette session traitera des différents points exigés durant les taches d'administration : Planification (architecture, hébergement, authentification, .) Opération e...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [TECHDAYS 2010] #03 - WEB CONTENT MANAGEMENT SOUS SHAREPOINT 2010[TECHDAYS 2010] #03 - WEB CONTENT MANAGEMENT SOUS SHAREPOINT 2010 par pierre
Stephane Cordonnier de MCNext nous présente les fonctionnalités Web Content Management (WCM) sous SharePoint 2010. Qu'est-ce que le WCM ECM, GED, RM, WCM c'est quoi Plateforme SharePoint Versions SharePoint 2010 SharePoint Fondation...
Cliquez pour lire la suite de l'article par pierre [DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE par tja
C'est le dernier principe des principes du Design Orienté Objet (The Principles of Object Oriented Design) fondés par Robert C. Martin plus connu sous le pseudonyme d'Uncle Bob.
l'image empruntée de LosTechies.
Je ne traite pas les principes dans...
Cliquez pour lire la suite de l'article par tja TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CAST DE POINTEURSCAST DE POINTEURS par zaraki21
Cliquez pour lire la suite par zaraki21 CARTE GOOGLECARTE GOOGLE par ja92
Cliquez pour lire la suite par ja92 RE : WIN APIRE : WIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
Comparez les prix

HTC Hero
Entre 550€ et 550€
|