Précédent   Forum des professionnels en informatique > Général Développement > Programmation système > Windows
Windows Forum d'entraide sur la programmation Windows. Tutoriel API Windows
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2012, 21h42   #1
 
Inscription : mai 2011
Messages : 219
Détails du profil
Informations personnelles :
Localisation : France, Vienne (Poitou Charente)

Informations forums :
Inscription : mai 2011
Messages : 219
Points : -3
Points : -3
Par défaut Canceliser l'appel API sendmessage

Bonjour,

Je pense que jevais avoir du mal à expliquer.
L'api SendMessage permet d'envoyer un message à un controle HWND et reste bloquant jusqu'a la fin de traitement de la fonction WndProc, bref

J'aurais besoin de votre aide ,
Dans mon WndProc j'aurais besoin à moment donnée d'annuler tous les appels sendmessages à destination de mon WndProc.

Je pense que je n'aurais pas de réponse.

J'ai developper une console virtuel (HWND), et developper une fonction équivalent à scanf pour ma console virtuel.

Dés la reception de l'évenement WM_READKEY (fonction à moi WM_USER+4) , SendMessage est bloquant jusqu'a l'appuie d'une touche, jusque là c'est normal , (dependant evidemment des événément WM_CHAR et WM_KEYDOWN).

Le probléme : quand je m'amuse à resizer sans arrêt l'OS envoie un évenement WM_SIZE jusque là c'est normal, mais l'envoie de l'évenement WM_SIZE peux se bloquer car ma fonction WndProc est déjà occuper pour mon evenement WM_READKEY (qui est une fonction à moi) , du coup Windows se bloque.
Et je ne sais pas comment faire ,
la solution c'est d'annuler tous les appels WM_SIZE au moment ou le message WM_READKEY est reçu.

Dés l'appuie d'une touche , l'évenement WM_SIZE s'achéve.

et je n'ai pas de solution , et j'ai du mal à expliquer.

Donc comment annuler les sendmessages (WM_SIZE) ? est ce possible ?
Dans mon évenement WM_READKEY Si j'arrive à annuler les WM_SIZE , je pourais tripoter la fenêtre contenant ma console virtuel sans à ce que Windows se bloque.

J'envoie donc un évenement WM_READKEY pour signaler à ma console virtuelle d'attendre l'appuie d'une touche.

Bien sure le message WM_READKEY fait office de ProcessMessages (en delphi application.processmessages) utilisant l'api GetMessage TranslateMessage etc ..... logiquement il y a donc un petit recursif de l'appel à WndProc.

Pour info WM_READKEY n'existe pas dans les API Windows , mais c'est mon propre événement de message.

Merci
yann458 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 22h00   #2
Modérateur
 
Avatar de Andnotor
 
Inscription : septembre 2008
Messages : 2 233
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 2 233
Points : 2 905
Points : 2 905
Soit tu gères un deuxième thread qui se charge des tâches synchrones (ton WM_READKEY), soit tu remplaces le SendMessage par un SendMessageTimeOut et tu t'arranges pour vider la pile de messages sur le TimeOut (Application.ProcessMessages).
Andnotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 18h04   #3
 
Inscription : mai 2011
Messages : 219
Détails du profil
Informations personnelles :
Localisation : France, Vienne (Poitou Charente)

Informations forums :
Inscription : mai 2011
Messages : 219
Points : -3
Points : -3
C'est bon ,je me suis débrouiller autrement , en passant un HEVENT et WaitForSingleObject.
yann458 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 21h19   #4
Modérateur
 
Avatar de Andnotor
 
Inscription : septembre 2008
Messages : 2 233
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 2 233
Points : 2 905
Points : 2 905
Citation:
Envoyé par yann458 Voir le message
C'est bon ,je me suis débrouiller autrement , en passant un HEVENT et WaitForSingleObject.
Sans multithread, WaitForSingleObject sans timeOut sera bloquant comme SendMessage !
Andnotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 18h05   #5
 
Inscription : mai 2011
Messages : 219
Détails du profil
Informations personnelles :
Localisation : France, Vienne (Poitou Charente)

Informations forums :
Inscription : mai 2011
Messages : 219
Points : -3
Points : -3
Citation:
Envoyé par Andnotor Voir le message
Sans multithread, WaitForSingleObject sans timeOut sera bloquant comme SendMessage !
Je suis d'accord , mais mon Readln est dans un autre thread.
yann458 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h51.


 
 
 
 
Partenaires

Hébergement Web