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

Windows Discussion :

[Fenêtre avec skin perso] Drag pas assez rapide à effectuer


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut [Fenêtre avec skin perso] Drag pas assez rapide à effectuer
    Bonjour,

    J'ai toujours eu dans mes fenêtres possédant un skin perso (application d'une région sur une fenêtre à partir d'un bitmap, puis affichage du bitmap dessus) un problème de drag de celles-ci : quand on bougeait la fenête, un geste rapide et le curseur sortait de la fenêtre, ne pouvant y re-rentrer que de la même manière.

    J'explique ma méthode :
    • Déclaration de variables RECT et POINT, ainsi que BOOL
    • Enclenchement d'un timer pseudo-permanent (intervalle = 0ms)
    • Si un évènement WM_LBUTTONDOWN est reçu, le booléen passe à TRUE
      [le curseur en croix est chargé]
    • Par inversement, si WM_LBUTTONUP est reçu, il passe à FALSE
      [le curseur normal est chargé]
    • A chaque timer, si le booléen est à TRUE, on récupère la position de la souris dans le POINT, on lui ajoute les coordonnées de la fenêtre (récupérées dans le RECT), et enfin, on change la position de la fenêtre avec ces coordonnées.


    Auriez-vous une autre méthode, ou une précision pour pouvoir effectuer le drag plus rapidement ? Par exemple, MSN ou WMP restent "collés" à la souris, sans le moindre écart de pixel... comment "font-ils" ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Je pense que WinAmp colle naturellement à la souris en traitant les messages de "Zone non-client" :
    WM_NCCALCSIZE qui définit le rectangle client,
    WM_NCPAINT pour dessiner le reste,
    Et surtout WM_NCHITTEST qui devrait te permettre ce que tu veux: dire à Windows: "Ça c'est la barre de titre, tu peux l'utiliser pour déplacer la fenêtre".
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Et donc, que dois-je faire niveau code ? (donne moi s'il te plaît la méthode, tout du moins)

    Edit : en effet, traduire l'anglais de msdn ne pose pas de problème, mais je ne comprends pas très bien à quoi sert WM_NCHITEST, et quand l'envoyer (je n'ai pas regardé les autres encore)

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    J'ai parlé de TRAITER le message WM_NCHITTEST, pas l'envoyer...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    D'accord. WM_NCHITTEST suffit, ou je dois utiliser le reste ?

    Je ne vois pas en quoi il va m'aider : ce message est envoyé à la fenêtre sous le curseur lors d'un évènement souris, qu'il soit de type 'motion', ou 'click". Or, apparemment il n'y a pas moyen de récupérer le type d'évènement. Donc je suppose que je devrais l'utiliser seulement pour récupérer les coordonnées du curseur.

    Donc, il a le même rôle que la combinaison GetCursorPos() + GetWindowRect(), non ?

    Peux-tu alors m'expliquer ce que tu ferais à ce sujet ?

    Merci d'avance.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Ce que je ferais, c'est assez simple:
    je retournerais HTCAPTION pour les parties de ma fenêtre dont je veux qu'elle servent à la déplacer (il faudra peut-être aussi intercepter le bouton droit (WM_NCRBUTTONDOWN) pour empêcher qu'un clic-droit sur ta fenêtre t'affiche son menu système... (ou lui retirer carrément le style WS_SYSMENU)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre très actif Avatar de Issam
    Inscrit en
    Mars 2002
    Messages
    582
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2002
    Messages : 582
    Par défaut
    en delphi dans l'évenement OnMouseMove

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if shift=[ssleft] then
    begin
     ReleaseCapture;
     Perform(WM_sysCommand,$F012,0);
    end;

  8. #8
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    C'était en C/C++, et j'ai pu utiliser tout simplement la notif' WM_NCHITTEST.

    Merci quand même

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/07/2011, 21h01
  2. [Batch] Ouvrir une fenêtre DOS avec taille perso ET petit ascenseur
    Par Azerty32 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/08/2010, 14h51
  3. Double boucle imbriquée pas assez rapide.
    Par Bruno13 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/06/2008, 21h01
  4. Réponses: 5
    Dernier message: 14/05/2008, 18h14
  5. JVCL 3.3 pas encore compatible avec édition perso
    Par Okaryn dans le forum Delphi
    Réponses: 2
    Dernier message: 28/01/2007, 14h02

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