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 !