Accelerator ...comment faire ? [VC++] - C++ - Programmation
Marsh Posté le 26-10-2001 à 15:29:10
Voir un précédent topic, y a sans doute la "clé"..
http://forum.hardware.fr/forum2.ph [...] &owntopic=
Marsh Posté le 26-10-2001 à 15:36:53
oui merci, je l'avai trouvé aussi
malheureusment 'jai pas tout saisi et c'était dans la cas d'un raccorci pour un menu .. moi c'est pour un boutton.
Marsh Posté le 26-10-2001 à 15:59:58
Sauf erreur (je suis pas tj bien réveillé), si on met une éperluette (&) dans le label du bouton, ça marche comme avec un menu. Le résultat est un soulignement du caractère qui suit le &. Si on tape ALT + la lettre qui est soulignée dasn le bouton, ça fait comme si on l'avait cliqué.
bouton "&Action" donne [s]Action. ALT + A provoque l'action....
Attention à ne pas avoir les mêmes lettres sur deux boutons/contrôles/cases à cocher/.. sinon le "premier" obéit.
Les accélérateurs menu permettent de provoquer une action SANS QUE LE MENU ne soit déroulé. CTRL+C copie (si on a prévu de copier dans le code), CTRL+.. fait ce qu'on veut (ou devrait ).
Marsh Posté le 26-10-2001 à 16:03:25
oui j'ia aussi essayé le truc du "&" mais c pas top car je voudrai avoir une touche qui n'apparaisse pas !
je vais continuer a chercher ..
Marsh Posté le 26-10-2001 à 16:15:11
Dans ce cas là, faudrait le créer en "soft" par interception du message de frappe de touche du clavier.
Le raccourci menu, on peut le charger dans un accélérateur et c'est Windows qui le gère pour nous, ou on le décode soi-même.
WM_KEYDOWN je crois. (C pur, pas ++ (<- y connais rien))
J'avais écrit deux fonctions pour CTRL et MAJ, ça vaut ce que ça vaut mais ça marche (pour moi ).
BOOL CTRL(void)
{
// retourne TRUE si touche CTRL enfoncée
// FALSE sinon
int CTRL;
CTRL = GetKeyState(VK_CONTROL); // 1 si rien, -127 ou -128 si enfoncé
return ((CTRL & 128) == 128);
}
// fin module CTRL
BOOL MAJUS(void)
{
// retourne TRUE si touche MAJUSCULE enfoncée
// FALSE sinon
int MAJ;
MAJ = GetKeyState(VK_SHIFT); // 1 si rien, -127 ou -128 si enfoncé
return ((MAJ & 128) == 128);
}
// fin module MAJUS
J'utilise, après test WM_KEYDOWN
switch (wParam)
{
case 'C': // C : Curseur Outils, + CTRL : Copier sélection
if (CTRL() == TRUE)
{
CommandeMenus(hWndMain, (WPARAM)MNEDIT_CPSL);
}
else
PostMessage(Barre.hWnd, (WM_USER + 6), 0, (long)BTO_CURS);
Suffit d'y "télécommander" l'action associée au bouton et ça roule...
break;
Marsh Posté le 26-10-2001 à 14:45:43
voila j'ai ajouté Item IDR_ACCELERATOR dans l'éditeur de ressources, spécifié la touche de racourcis .. et l'ID associé (un IDC_Button dans mon cas).
malheureusement cela ne fonctionne pas .. j'ai cherché dans l'aide et j'ai rien capté sur l'utilisation des raccourcis
ce que je voualais c'est que mon raccorucis appèle ma fonction ::OnButton1 (clic sur le bouton).
quelqu'un peut t'il m'expliké ?
merci