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 :

focus de l'application


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut focus de l'application
    Bonjour.

    J'ai une application, qui lorsqu'elle retrouve le focus, c'est-à-dire lorsque je la remet en avant-plan, ne possède pas le focus clavier.

    Je m'explique. Pour remettre le programme en avant-plan, je fais un SetWindowPos, sans utiliser le paramètre SWP_NOACTIVATE.

    Normalement cette fonction réactive la fenêtre et redonne le focus.
    En effet, il le fait puisque lorsque je teste quelle est la fenêtre qui possède ces deux propriétés, c'est bien la mienne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    if(!IsWindowEnabled(MaFenetre))
      return ERROR;
    
    if(mMaFenetre != GetActiveWindow())
      return ERROR;
    
    if(mMaFenetre != GetFocus())
      return ERROR;
    
    return NOERROR;
    ...
    Ben malgré tout ça ma fenêtre n'intercepte pas les messages du clavier.
    Je suis obligé de cliquer avec la souris sur la fenêtre pour qu'elle retrouve le focus clavier.

    Bref, j'aimerais savoir comment retrouver le focus clavier, sans avoir à faire un clic de souris sur la fenêtre.

    PS: La perte de focus que je teste, fais suite à une action avec le ALT+TAB. (Mon programme reprends le focus après un certain délai, qui peut-être de plusieurs secondes à quelques minutes).

  2. #2
    Membre confirmé Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Par défaut
    SetFocus ne fonctionne pas? Je n'ai jamais utilisé cette fonction mais avec un nom pareil...

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut Re: focus de l'application
    Citation Envoyé par moldavi
    J'ai une application, qui lorsqu'elle retrouve le focus, c'est-à-dire lorsque je la remet en avant-plan,
    Peut-être y a-t-il une différence entre "être en avant plan" et "avoir le focus" ? (selon les définitions de Microsoft, votre interprétation de ces termes n'ayant que très peu de valeur quand il s'agit de leur système)

    Vous voulez donc que votre application reçoive le focus ?
    Un nom de fonction qui semblerait logique serait SetFocus() : qu'en pensez-vous ?
    Citation Envoyé par http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/setfocus.asp
    The SetFocus function sets the keyboard focus to the specified window.
    Mais vous avez déjà regardé, n'est-ce pas ?

  4. #4
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Citation Envoyé par Crisanar
    SetFocus ne fonctionne pas? Je n'ai jamais utilisé cette fonction mais avec un nom pareil...
    Je n'utilise pas cette fonction parce que "SetWindowPos" le fait pour moi. Et puis même si je l'utilise ça ne marche pas en effet. Comme je l'ai dit lorsque je teste que mon application a bien le focus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(mMaFenetre != GetFocus())
      return ERROR;
    
    return NOERROR;
    Et bien un appel à SetFocus échouera... puisque j'ai le focus.

    Citation Envoyé par David.Schris
    Peut-être y a-t-il une différence entre "être en avant plan" et "avoir le focus" ?
    Il y a une différence:

    Etre en avant-plan ça veut dire se trouver devant toutes les fenêtres du desktop.
    Avoir le focus, ça veut dire recevoir un message lorsque une touche du clavier est pressée.

    Voilà, ce qui ne va pas c'est que ma fenêtre à le focus, est en avant-plan c'est même la fenêtre active, enfin bref je ne reçoit pas les messages du clavier pour autant, seul le clic de souris sur ma fenêtre me le rends.

    Je précise aussi que mon application n'est pas multi-fenêtre (MDI).

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 413
    Par défaut
    La question que personne n'a posée: Tu as des contrôles dans la fenêtre? (Des EditBox par exemple)
    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.

  6. #6
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Citation Envoyé par Médinoc
    La question que personne n'a posée: Tu as des contrôles dans la fenêtre? (Des EditBox par exemple)
    Arf non pas un seul contrôle à l'horizon... ni de barre de menu ni autre, rien qu'une fenêtre de base.

    Je vais faire un code minimal, pour voir ce que ça donne et que vous puissiez tester.

  7. #7
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    La réponse était du côté de "AttachThreadInput".

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 413
    Par défaut
    Euh, ça, c'est quand il y a plusieurs thread et que des fenêtres appartiennent à plusieurs threads différents...

    Je ne vois pas comment on aurait pu le deviner, tu n'en avais pas parlé jusqu'à ce post...
    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.

  9. #9
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Citation Envoyé par Médinoc
    Euh, ça, c'est quand il y a plusieurs thread et que des fenêtres appartiennent à plusieurs threads différents...

    Je ne vois pas comment on aurait pu le deviner, tu n'en avais pas parlé jusqu'à ce post...
    Désolé, j'essaie toujours d'être le plus clair possible.

    Attention, je fais la différence entre un thread et un processus. En l'occurence ma fenêtre n'appartient qu'à un seul processus qui ne contient qu'un seul thread (lui-même).

    La perte de focus se fait lorsqu'un autre processus prens le focus, lors d'un clic de souris sur une fenêtre autre que la fenêtre de notre processus.

    La fonction ci-dessus peut prêter à confusion (elle emploie le mot thread), car elle permet de reprendre le focus d'une fenêtre appartenant à un autre processus (qui n'a rien à voir avec notre application: par exemple un explorateur, un navigateur, etc...).

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 413
    Par défaut
    Donc, à présent ton programme confisque le focus à d'autres processus ou threads ?
    Je croyais que ce que tu voulais faire au départ, c'était juste t'assurer que tu avais bien le focus...

    Tu as essayé en faisant simplement SetForegroundWindow?
    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.

  11. #11
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Citation Envoyé par Médinoc
    Donc, à présent ton programme confisque le focus à d'autres processus ou threads ?
    Oui c'est exactement le comportement que je souhaite. Lorsque l'on a une application qui est diffusée en simultané sur plusieurs écrans géants, on a pas trop envie qu'une fenêtre window d'une autre application, vienne troubler la chose. D'ailleurs je vais bientôt m'intéresser à l'API CreateDesktop.

    Citation Envoyé par Médinoc
    Je croyais que ce que tu voulais faire au départ, c'était juste t'assurer que tu avais bien le focus...
    Citation Envoyé par moldavi
    j'aimerais savoir comment retrouver le focus clavier
    Je ne peux pas être plus clair...

    Citation Envoyé par Médinoc
    Tu as essayé en faisant simplement SetForegroundWindow?
    Oui bien sur. Tu tapes "setwindowpos focus" dans google groupe, tu seras impressionné du nombre de personne qui se pose la même question mais dont la bonne réponse n'est pas donnée dans 90% des cas.

    C'est le comportement par défaut de windows. Permettre à l'utilisateur de choisir avec quelle application il veut travailler (c'est du multitâche).

    Mon cas ne correspond pas à ce type d'utilisation.

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

Discussions similaires

  1. garder le focus sur mon application
    Par allanibu dans le forum Langage
    Réponses: 5
    Dernier message: 10/03/2009, 10h45
  2. Perte de focus d'une application
    Par dus dans le forum Visual C++
    Réponses: 12
    Dernier message: 20/10/2008, 09h08
  3. Donner le focus a une application
    Par HopeLeaves dans le forum Delphi
    Réponses: 12
    Dernier message: 22/06/2006, 09h43
  4. Mettre le focus sur une application
    Par Raylemon dans le forum Langage
    Réponses: 17
    Dernier message: 10/05/2006, 17h52
  5. Focus sur une application Windows
    Par mixi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/10/2004, 19h57

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