Accelerator (raccourcis) [Visual C++] - C++ - Programmation
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... 
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). 
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 !
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. 
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 
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   
   .
. 
 
Bon courage.  
 
Marsh Posté le 01-09-2001 à 13:06:49
visual C++ ne s'occupe pas de ca. MFC oui mais faut pas caufondre  
  
Visual C++ est un editeur 
 
sinon desoler j'utilise pas les MFC j'aime pas 
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 !