OpenGL - MFC - Evènement clavier (flèches)

Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
-
Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
-
Bonjour à tous!
J'aimerais vous soumettre un problème d'évènement clavier. Des petits bouts de code sont disponibles en fin de message

Description: J'ai une boite de dialogue MFC contenant un menu, 3 onglets, 2 toolbars (une spécifique à chaque onglet et une globale)...et une zone OpenGL permettant d'afficher une scène 3D. Mon objectif est de me déplacer dans cette scène (jusque là, classique).
Etat actuel: J'ai donc redéfinit la méthode OnKeyDown() de ma bbd principale, ce qui me permet de modifier la vitesse de déplacement grâce à des touches, classique. J'arrive également à me déplacer avec les touches du pavé numérique (2,4,6,8).
Problème: Quand j'appuie sur les flèches du clavier, je ne me déplace plus dans ma scène 3D mais dans la toolbar globale! Ensuite, les touches du clavier ne fonctionnent plus
Investigations: En mettant un point d'arrêt dans la méthode OnKeyDown(), je me rend compte qu'en appuyant sur les flèches du clavier, je ne rentre pas dedans. En redéfinissant cette méthode pour ma zone OpenGL (qui hérite de CWnd), même constat: je ne passe pas dedans. Par contre, je me déplace dans ma toolbar. Je suis quasi-certain que ce n'est pas un problème de focus.
Environnement de travail: Windows XP, VC++6

Je suis preneur de toute piste me permettant de corriger ce bug. Voici qques bouts de code permettant de mettre sur la voie:

// Création de la Toolbar
m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndToolBar.LoadToolBar(IDR_TOOLBAR_MAIN);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);   
m_wndToolBar.GetToolBarCtrl().SetState(ID_BUTTON_XY,TBSTATE_CHECKED | TBSTATE_ENABLED );
m_wndToolBar.GetToolBarCtrl().SetState(ID_BUTTON_XZ,TBSTATE_ENABLED );
...

// Redéfinition de la méthode OnKeyDown()
void CTruc::OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags )
{
    switch (nChar)
    {
        case VK_NUMPAD8 :
          m_PosX-=m_TranslationSpeed*(float)sin((m_AngleZ/180.0)*3.14)*(float)sin((m_AngleX/180.0)*3.14);
          m_PosY-=m_TranslationSpeed*(float)cos((m_AngleZ/180.0)*3.14)*(float)sin((m_AngleX/180.0)*3.14);
          m_PosZ-=m_TranslationSpeed*(float)cos((m_AngleX/180.0)*3.14);
          break;
...
}

Merci de m'avoir lu jusqu'au bout...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

1 réponse

Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
101
Bon, bah... j'aurais essayé...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...