|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
Inscription : mai 2011 Messages : 219 ![]() |
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 |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : septembre 2008 Messages : 2 233 ![]() |
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).
|
|
|
00
|
|
|
#3 |
Inscription : mai 2011 Messages : 219 ![]() |
C'est bon ,je me suis débrouiller autrement , en passant un HEVENT et WaitForSingleObject.
|
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : septembre 2008 Messages : 2 233 ![]() |
|
|
|
00
|
|
|
#5 |
Inscription : mai 2011 Messages : 219 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com