[Visual C++] Accelerator (raccourcis)

Accelerator (raccourcis) [Visual C++] - C++ - Programmation

Marsh Posté le 28-08-2001 à 16:45:33    

Je crée une nouvelle ressource 'Accelerator'.
Je met une touche et un ID d'un élément d'un menu.
Quand je tappe sur la touche (Ctrl+x), rien ne se passe, sauf un beep !

Reply

Marsh Posté le 28-08-2001 à 16:45:33   

Reply

Marsh Posté le 29-08-2001 à 09:26:22    

En C, dans le WinMain, on met
{
   HANDLE hAccel;
....
   hAccel = LoadAccelerators (hInstance, MAKEINTRESOURCE(ACCEL_ID)); // la ressource des accélérateurs
...
 
et dans la grande boucle des messages  
 // Message Loop
 while(GetMessage(&msg, NULL, 0, 0))
 {
     if (! TranslateAccelerator(hWndMain, hAccel, &msg))
     {
 TranslateMessage(&msg);
 DispatchMessage(&msg);
      }
 }
 return msg.wParam;
}
// End WinMain
 
 
Dans le fichier RC, j'avais mis
//
// Accélérateurs
//
 
ACCEL_ID ACCELERATORS
BEGIN
  "^O", ID_FILE_OPEN                         // CTRL + O
  "^X", ID_EDIT_CUT                          // CTRL + X
  "^C", ID_EDIT_COPY                         // CTRL + C
  "^V", ID_EDIT_PASTE                        // CTRL + V
  VK_DELETE, ID_EDIT_CUT, SHIFT, VIRTKEY     // SHIFT + DEL
  VK_INSERT, ID_EDIT_COPY, CONTROL, VIRTKEY  // CTRL + INSER
  VK_INSERT, ID_EDIT_PASTE, SHIFT, VIRTKEY   // SHIFT + INSER
END
 
et des trucs comme cela dans la définition des menus
 POPUP "&Edition"
 {
  MENUITEM "&Copie Ctrl+C (Ctrl+Inser)", ID_EDIT_COPY
  MENUITEM "C&olle Ctrl+V (Shift+Inser)", ID_EDIT_PASTE
  MENUITEM "Cou&pe Ctrl+X (Shift+Del)", ID_EDIT_CUT
  MENUITEM SEPARATOR
etc...

Reply

Marsh Posté le 31-08-2001 à 10:15:54    

Je pense que c Visual C++ qui s'occupe des fonctions LoadAccelerators();
J'utilise les MFC et mon application est une dialog. Ca beep que je fais une combinaison de touche (raccourci défini).

Reply

Marsh Posté le 31-08-2001 à 11:15:11    

en fait la question est : est-ce ques les accelerators marche avec les dialog, car avec un single base document (assistant vc++), ça marche !

Reply

Marsh Posté le 31-08-2001 à 12:49:04    

Ze sais pas trop, car le LoadAccelerator est (en C) utilisé dans le MAIN, et déclaré dans les ressources "générales" (si je puis dire).
 
Il y a un menu dans le dialog ? Si ce sont des boutons, le &OK, ou &Abandon devraient fonctionner directement.

Reply

Marsh Posté le 31-08-2001 à 13:02:22    

J'ai mis un menu, il y a ok et cancel : mon .rc
IDR_MAINFRAME ACCELERATORS DISCARDABLE  
BEGIN
    "A",            ID_APP_ABOUT,           VIRTKEY, CONTROL, NOINVERT
    "S",            ID_TOOLS_IPSCAN,        VIRTKEY, CONTROL, NOINVERT
    VK_DELETE,      ID_EDIT_CLEAR,          VIRTKEY, CONTROL, NOINVERT
    VK_RETURN,      ID_EDIT_SEND,           VIRTKEY, CONTROL, NOINVERT
END

Reply

Marsh Posté le 31-08-2001 à 16:22:03    

Je ne suis pas assez "spécialiste" pour pouvoir trancher.. Si ça marche pour la feuille main, et pas pour un dialog, y a peut-être des restrictions (?).
 
Faudrait que je fasse des essais à l'occase, pendant mes congés d'été qui commencent ce soir  :D  :D.
 
Bon courage. ;)

Reply

Marsh Posté le 31-08-2001 à 17:23:34    

Merci et bonnes vacances  ;)

Reply

Marsh Posté le 01-09-2001 à 12:24:08    

up ! :)

Reply

Marsh Posté le 01-09-2001 à 13:06:49    

visual C++ ne s'occupe pas de ca. MFC oui mais faut pas caufondre :hot:  
Visual C++ est un editeur
 
sinon desoler j'utilise pas les MFC j'aime pas

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed