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 :

Mettre en pause le RegisterWindowMessage


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 22
    Points
    22
    Par défaut Mettre en pause le RegisterWindowMessage
    Bonjour à vous,

    Je developpe actuellement une appli sur winCe sur une machine qui possede une gachette (une grosse touche).

    J'enregistre les mouvements de cette gachette grace à la fonction :
    const UINT NEAR uiMsgWM_TRIGGER = RegisterWindowMessage(WMN_SCAN_TRIG_KEY);

    que j'affecte à une fonction lors de l'init entre les balises :

    BEGIN_MESSAGE_MAP(CAppairageEntrepotDlg, CDialog)
    ON_REGISTERED_MESSAGE(uiMsgWM_TRIGGER, &CAppairageEntrepotDlg::OnTriggerKey)
    END_MESSAGE_MAP()

    Je me retrouve face à un probleme lors d'un appui multiple sur la gachette alors que le programme est parti dans un traitement, à l'arrivé de ce traitement, la queue des messages recues est remplie et la fonction est appelée en boucle(autant de fois que d'appui sur la gachette pendant le traitement).

    J'aimerai pouvoir "unregistered" ma gachette pendant le traitement et le register a nouveau en sortie de la fonction.

    Du style :

    Ongachette()
    {
    UnregisterMaGGachette(); // on ecoute plus les appuies
    Traitement(); // traitement qui peut durer 10 secondes
    RegisterMaGachette(); // on se remet a ecouter car l'appli est prete
    }

    N'hesiter pas a me demander des précisions.
    Merci de m'avoir lu.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu ne peux.
    Mais tu peux supprimer les messages de la gachette pendant ou après le traitement avec une boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MSG msg = {0};
    while(PeekMessage(&msg, NULL, uiMsgWM_TRIGGER, uiMsgWM_TRIGGER, PM_REMOVE)) {}
    if(msg.message == WM_QUIT)
    	PostQuitMessage(msg.wParam);
    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 à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Cela correspond parfaitement à ce dont j'avais besoin, je te remercie copieusement .

    petite précision concernant la partie :

    if(msg.message == WM_QUIT)
    PostQuitMessage(msg.wParam);

    Elle signifie qu'on ignore les messages reçus, sauf si il s'agit d'un message de fin d'application ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pas exactement.
    Les messages uiMsgWM_TRIGGER sont ignorés dans la boucle while elle-même, mais le message WM_QUIT n'est jamais ignoré par PostQuitMessage(), malgré les filtres.
    --> Donc, si on reçoit WM_QUIT, il faut le remettre dans la file.

    De plus, j'ai peut-être fait un erreur dans la condition du while, qui devrait peut-être être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(PeekMessage(&msg, NULL, uiMsgWM_TRIGGER, uiMsgWM_TRIGGER, PM_REMOVE) && msg.message!=WM_QUIT) {}
    En théorie, le message WM_QUIT est supposé n'être reçu qu'en dernier, si on a bien utilisé PostQuitMessage() pour le poster. Mais comme on ne peut pas forcément le garantir, autant prendre la précaution...
    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 à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Ok très bien merci pour la précision et pour la solution qui, apres test est parfaite .

    merci encore

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

Discussions similaires

  1. Mettre une pause dans un programme
    Par PNL dans le forum Général Java
    Réponses: 12
    Dernier message: 28/01/2016, 00h54
  2. mettre une pause
    Par filax dans le forum Flash
    Réponses: 7
    Dernier message: 27/09/2006, 14h28
  3. [VB6] Mettre en pause l'execution du code
    Par ironik dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/05/2006, 10h56
  4. [FLASH MX2004] Comment mettre une pause dans un script
    Par vbcasimir dans le forum Flash
    Réponses: 3
    Dernier message: 16/02/2006, 09h47
  5. Mettre en pause le Timer !
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 14
    Dernier message: 12/09/2003, 21h32

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