IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Interception par directX du déplacement fenetre


Sujet :

DirectX

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut Interception par directX du déplacement fenetre
    Bonsoir à tous

    J'ai mis sur youtube une vidéo démo de mon probleme :
    http://www.youtube.com/watch?v=e83YxFIW2HY

    Je lance dans mon appli développée un calcul, je le visualise, je m'amuse à "rotationner" la structure, et puis enfin je fais apparaitre le probleme : quand je déplace la fenetre directX la structure rentre encore en rotation (normal, puisque j'ai programmé la rotation avec clic gauche + mouvement souris).
    Comment est-il possible de faire en sorte que la rotation ne soit pas active quand l'utilisateur ne fait que déplacer la fenetre graphique ?
    Merci

    Bonne soirée

  2. #2
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    heu j'ai testé chez moi, clic gauche + déplacement n'active pas la rotation de ma caméra, donc je sais pas pour toi ...

    haaaa si peut être, je suppose que tu récupère les coordonnées de ton curseur, comment récupère tu celles ci?

    chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    LRESULT CALLBACK MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch( uMsg )
        {
            case WM_MOUSEMOVE:
    	{
    	    int	px = GET_X_LPARAM(lParam);
    	    int	py = GET_Y_LPARAM(lParam);
                /* traitement */
    	} break;
        }
    // etc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut
    Je code en .net
    J'ai ma boucle infinie qui à chaque passage récupère les informations de géométrie, scan les périphs (souris et clavier), et procède aux affichages.

    Voici les lignes de code qui permettent de gérer la rotation à partir du clic gauche+déplacement souris :

    If clickleft = True Then
    matrice_camera = Matrix.Multiply(Matrix.RotationY(CSng(-mousex / 5 * PI / 180)), matrice_camera)
    matrice_camera = Matrix.Multiply(Matrix.RotationAxis(horiz2 - horiz1, CSng(-mousey / 5 * PI / 180)), matrice_camera)
    End If

    Les variables mousex et mousey sont récupérées lors du passage dans la boucle infinie par l'appel Gestion_periph.ScanSouris(mousex, mousey, mousez):

    Public Sub ScanSouris(ByRef X As Single, ByRef Y As Single, ByRef Z As Single)
    Souris = DirectX9_Souris.CurrentMouseState
    X = Souris.X
    Y = Souris.Y
    Z = Souris.Z
    End Sub

    Donc au final c'est logique que ma rotation soit activée quand je déplace la fenetre graphique puisque ce déplacement implique la combinaison testée clic gauche+déplacement souris. Il faut sans doute que je rajoute un test, mais j'ai du mal à cerner lequel.... (If "je suis pas en train de déplacer ma fenetre" and clickleft = True etc....)

    Merci

  4. #4
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    alors là avec ce langage tu me pose une colle, par contre tout ce que je peux dire c'est que GET_X_LPARAM(lParam) et GET_Y_LPARAM(lParam) me permettent de récupérer les coordonnées de la souris par rapport au coin supérieur gauche de ma fenêtre d'application, pas par rapport au coin supérieur gauche de mon écran.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 143
    Par défaut
    dans ta boucle de messages
    intercepte WM_MOVE qui est envoyé si la fenêtre est déplacée
    voir MSDN

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut
    J'avais pensé à intercepter move mais je l'avais mal utilisé.
    Finalement, la solution est :
    créer une variable deplacement_fenetre initialisée à false au chargement de la fenetre graphique
    Intercepter l'évenement move --> la variable devient true
    Intercepter l'evenement mousedown --> la variable devient false
    Ajouter le test sur la variable dans la gestion de la rotation

    Merci

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion d'arbres par représentation intervallaire - Déplacements et tris
    Par samche dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 18/06/2013, 16h58
  2. DirectX 2D. Programmation Fenetres
    Par Jahren dans le forum DirectX
    Réponses: 8
    Dernier message: 26/03/2009, 18h58
  3. Lien html dans texte dynamique intercepté par les bloqueurs de popups
    Par GdabZ dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 12/02/2008, 12h14
  4. Directx et les fenetres
    Par c00ler dans le forum DirectX
    Réponses: 4
    Dernier message: 31/01/2008, 16h49
  5. [DirectX][C#] Mode Fenetré / Fullscreen
    Par Congru dans le forum DirectX
    Réponses: 6
    Dernier message: 10/02/2006, 04h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo