Bonjour,
j'ai mis en place 2 scrollbar autour de ma fenetre OpenGL.
Je voulais savoir comment est-ce qu'il est possible de gerer les deplacements des scrollbar via les touches directionnelles ?
Merci.
Version imprimable
Bonjour,
j'ai mis en place 2 scrollbar autour de ma fenetre OpenGL.
Je voulais savoir comment est-ce qu'il est possible de gerer les deplacements des scrollbar via les touches directionnelles ?
Merci.
salut,
la scrollbar gère les touches si elle a le focus.
tu peux aussi intercepter les touches claviers dans ta fenêtre et envoyer un message clavier à l'ascenseur concerné (vertical ou horizontal)..
Ah ok merci.
Effectivement j'ai vu que parfois les touches etaient gerees mais je ne savais pas pourquoi.
Par contre pour intercepter les touches directionnelles du clavier c'est bien avec OnKeyDown ?
Je teste le nChar avec VK_DOWN, VK_UP, etc... mais rien n'y fait.
Les lettres sont bien interceptees mais pas les fleches 8O
Personne ?
J'ai vu que les fleches etaient prevues pour les controles de l'application d'abord et qu'il faut donc changer les priorites ou inhiber les controles mais je ne trouve rien...
J'aimerai que mes fleches soient interceptees par OnKeyDown dans ma fenetre OpenGL tout comme je le fais avec les caracteres.
Merci :)
Salut,
Oui c'est bien OnKeyDown
voici un ex:
Il faut s'assurer aussi que ta fenetre a le focus (fonction SetFocus()). Si tu ne veux pas que ta fenetre a le focus, tu peux intercepter OnSysKeyDown à la place (à condition que GetFocus()==NULL)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 void CMaClasse:OnKeyDown(UINT nChar,UINT nFlags) { switch (nChar) { case VK_LEFT: { // flèche gauche OnScroll(MAKEWORD(SB_LINELEFT,0xFF),0,TRUE); break; } case VK_RIGHT: { // flèche droite OnScroll(MAKEWORD(SB_LINERIGHT,0xFF),0,TRUE); break; } case VK_UP: { // flèche haut OnScroll(MAKEWORD(0xFF,SB_LINEUP),0,TRUE); break; } case VK_DOWN: { // flèche bas OnScroll(MAKEWORD(0xFF,SB_LINEDOWN),0,TRUE); break; } default: { CScrollView::OnKeyDown(nChar,nFlags); break; } } }
@+
Oui c'est bien ce que je fait et je donne bien le focus a ma fenetre mais des que je clique sur une fleche le focus revient automatiquement a ma boite de dialogue sur le premier de mes controles.
Comment desactiver ca ?
Merci !
je vois pas trop comment ton programme est structuré au niveau des fenetres ... pourquoi tu parles de boite de dialogue ???
donnes moi plus d'infos sur le lien entre cette fenetre et ta boite de dialogue...
@+
de toute façon c'est mort ,si tu as des contrôles tu ne peux espérer contrôler la scrollbar avec les touches si il y a des contrôles actifs dans la fenêtre de traitement .
du point de vue de l'utilisateur je ne vois pas comment ça peut fonctionner ...
Alors je reprends.
J'ai une boite de dialogue avec des controles et une fenetre OpenGL.
Oublions les scrollbar.
J'aimerai effectuer des actions dans ma fenetre OpenGL quand j'appuie sur les fleches. Sauf que meme en ayant le focus dans ma fenetre, des que j'appuie sur l'une des fleches le focus revient automatiquement sur le premier controle de ma boite de dialogue.
Aucun moyen de changer cela ?
Merci.
Je pense a un WM_GETDLGCODE qui n'est pas pris en charge par ta fenetre OpenGL.
Essaye ça:
Sans oublier le ON_WM_GETDLGCODE() et le proto qui va bien ...Code:
1
2
3
4
5 UINT COpenGLCtrl::OnGetDlgCode() { return DLGC_WANTARROWS; }
Essaye d'autre variante aussi comme DLGC_WANTMESSAGE ...
C'est assez capricieux comme fonction :mrgreen:
@+
Ah super ca marche ! :D
Merci beaucoup, je ne connaissais pas du tout cette fonction...