France Hardware : Forums de discussion
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
23 592 membres enregistrés - 1 913 478 posts - 99 188 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           [C++] [Windows] [RESOLU] Raccourcis clavier
14 connectés(record : 272 le 28 octobre 2008 - 04 h 23)

Vous devez vous connecter pour répondre au topic.
[C++] [Windows] [RESOLU] Raccourcis clavier

alitokmen
Think ®

Messages : 3 687
Inscrit le 19/09/02
Ville : Grenoble, France || Ankara, Turquie
Non connecté
  Posté le 24 mars 2005 - 15 h 57 m 45 s
Bonjour

Alors je suis en train de dévolopper un programme avec une interface Windows classique ... ce que je voudrais faire c'est que certains raccourcis clavier lancent certains actions; par exemple comme quand vous faites CTRL + P ça lance l'impression de la page... Donc, niveau technique, que Windows m'envoie un message quand certaines combinaisons de touches sont activés

Comment faire ceci?

Merci


Message édité 1 fois, la dernière par alitokmen le 31 mars 2005 - 18 h 59.

S. Ali Tokmen
http://ali.tokmen.com
http://contact.ali.tokmen.com


bernie38
Waldorf (le pote à Statler)

Messages : 11 427
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 24 mars 2005 - 16 h 24 m 40 s


Le 24 mars 2005 - 15 h 57, alitokmen a écrit :
Bonjour

Alors je suis en train de dévolopper un programme avec une interface Windows classique ... ce que je voudrais faire c'est que certains raccourcis clavier lancent certains actions; par exemple comme quand vous faites CTRL + P ça lance l'impression de la page... Donc, niveau technique, que Windows m'envoie un message quand certaines combinaisons de touches sont activés

Comment faire ceci?

Merci

là, c'est exclusivement une histoire d'api windows (et pas du langage C++ ou autre)
Peut-être avec les MFC ?



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


alitokmen
Think ®

Messages : 3 687
Inscrit le 19/09/02
Ville : Grenoble, France || Ankara, Turquie
Non connecté
  Posté le 24 mars 2005 - 17 h 46 m 50 s
En effet, t'as raison... La question est bien sûr comment dire à Windows: "quand on appuie CTRL + A, dis-le moi" (car j'ai pas accès à cela ... du moins ... c'est ce que je crois)



S. Ali Tokmen
http://ali.tokmen.com
http://contact.ali.tokmen.com


bernie38
Waldorf (le pote à Statler)

Messages : 11 427
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 24 mars 2005 - 17 h 59 m 22 s
en gros, tu as besoin d'une gestion d'événements, quoi. Je crois qu'il faut "dire" à windows quels sont les événements pour lesquels tu désires recevoir des messages.
Il me semble bien que les MFC permettent ça, mais faudrait voir avec quelqu'un de bien à l'aise là dedans... Pas moi hélas :(

Sinon, VB permet en natif toute une gestion de ces événements (KeyDown, KeyUp etc) mais ça répond pas à ton besoin actuel.



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


alitokmen
Think ®

Messages : 3 687
Inscrit le 19/09/02
Ville : Grenoble, France || Ankara, Turquie
Non connecté
  Posté le 24 mars 2005 - 22 h 26 m 54 s


Le 24 mars 2005 - 17 h 59, bernie38 a écrit :
en gros, tu as besoin d'une gestion d'événements, quoi. Je crois qu'il faut "dire" à windows quels sont les événements pour lesquels tu désires recevoir des messages.


C'est exactement ça dont j'ai besoin :)



S. Ali Tokmen
http://ali.tokmen.com
http://contact.ali.tokmen.com


Petit_PimoOosE
rsqrtps & pshufb

Messages : 4 617
Inscrit le 15/06/03
Ville : Montréal
Non connecté
  Posté le 25 mars 2005 - 01 h 56 m 57 s

[Première partie que tu peux sauter si tu sais déjà ce que sont et font les messages]


Si ton code exclut les MFC, la procédure va être la suivante :

chaque fois que quelque chose arrive à ta fenêtre (un clic, un appui de touche, un message d'une autre appli ou du système) et que Windows ne sait pas quoi faire avec (ou que tu lui as demandé de ne rien faire), un message qui décrit l'action est mis dans une queue ; il te revient ensuite de ramasser les messages pour savoir ce qui s'est passé et de prendre les actions nécessaires. C'est comme un événement VB ou MFC, mais en plus rudimentaire.

tu as une fonction de callback de prototype (le nom est libre) :
    Code c    
1. LRESULT CALLBACK WindowProc(      
2. 
3.     HWND hwnd,
4.     UINT uMsg,
5.     WPARAM wParam,
6.     LPARAM lParam
7. );
qui va traiter les messages par un switch ou un if/else if sur le message uMsg, qui a été envoyé à la fenêtre hwnd avec pour paramètres les deux autres variables. Au moment où tu crées ta classe de fenêtre (avec RegisterClass( const WNDCLASS *) ), il faut informer windows que tu souhaites que les messages reçus soient traités par cette fonction. Pour ça, mets un pointeur vers ta fonction dans le membre lpfnWndProc du WNDCLASS que tu passes à RegisterClass(). [Là, ça devient intéressant !] Pour les combinaisons de touches (raccourcis), il faut que tu crées des "accelerator keys", qui sont stockées dans une table que tu crées avec
    Code c    
1. HACCEL CreateAcceleratorTable(      
2. 
3.     LPACCEL lpaccl,
4.     int cEntries
5. );
6. // LPACCEL est un tableau de structures ACCEL qui contiennent la (les) touche(s) de contrôle et le caractère du raccourci
7. // cEntries est la taille du tableau
8. // cette fonction renvoie un handle vers la table
à l'ouverture de l'appli et détruis (avec DestroyAcceleratorTable(HACCEL) à sa fermeture. enfin, ton programme doit contenir la boucle de traitement de la queue des messages :
    Code c    
 1.     // récup du message
 2.     while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
 3.     { 
 4.         if (bRet == -1)
 5.         {
 6.             // pas cool
 7.         }
 8.         else
 9.         {
10.             // si le message est un raccourci clavier, le traduire en WM_COMMAND (hWnd : handle de ta fenêtre, hAccTable : la table que tu as créée plus tôt) et appeler la callback
11.             if( !TranslateAccelerator( hWnd, hAccTable, &msg)
12.             {
13.                 // sinon, traduire les codes Virtual Key en code ASCII (facultatif)
14.                 TranslateMessage(&msg); 
15.                 // et appelle la callback
16.                 DispatchMessage(&msg); 
17.             }
18.         }
19.     } 


J'espère ne pas avoir dit trop de bêtises ni n'en avoir oublié...

Je t'invite à consulter la MSDN pour plus de précisions !



Huile de fraise.

alitokmen
Think ®

Messages : 3 687
Inscrit le 19/09/02
Ville : Grenoble, France || Ankara, Turquie
Non connecté
  Posté le 28 mars 2005 - 13 h 59 m 27 s
Merci :jap:



S. Ali Tokmen
http://ali.tokmen.com
http://contact.ali.tokmen.com


alitokmen
Think ®

Messages : 3 687
Inscrit le 19/09/02
Ville : Grenoble, France || Ankara, Turquie
Non connecté
  Posté le 31 mars 2005 - 18 h 59 m 49 s



S. Ali Tokmen
http://ali.tokmen.com
http://contact.ali.tokmen.com


Page genérée en 4.9681 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL |Actualité ADSL | e-commerce | Commande Au Volant
Creative Commons
Message Boards and Forums Directory