Question

Je l'ai regardé sur les sites et la documentation MSDN, mais je ne comprends toujours pas le dernier paramètre de PostMessage ().

Sur les forums où les gens demandent comment utiliser PostMessage, les gens répondent à l'une des deux implémentations:

  1. PostMessage (WindowHandle, WM_KEYDOWN, KeyCode, MapVirtualKey (KeyCode, 0) << 16);
  2. PostMessage (WindowHandle, WM_KEYDOWN, KeyCode, 0);

Quelle est la différence? Pourquoi le dernier paramètre est laissé à 0, dans certains cas, mais doit être « déplacé » et tout ce qui dans d'autres cas?

Juste une petite question. Ne pas besoin de réponses d'essai (bien qu'ils seraient très appréciés). Toute idée est appréciée. Merci à l'avance.

Était-ce utile?

La solution

Voir pour plus d'informations sur PostMessage. Chaque message est différent et a ses propres spécifications quant à ce que les paramètres sont nécessaires. À bien des égards, vous pouvez la voir en fonction générale avec un nom (message après) que les délégués à une autre fonction (le nom du message) et transmet ces paramètres.

Le dernier paramètre comme le reste sont un message spécifique et peut varier.

BOOL PostMessage(
  __in  HWND hWnd,
  __in  UINT Msg,
  __in  WPARAM wParam,
  __in  LPARAM lParam
);

Dans votre premier message WM_KEYDOWN a besoin du résultat de MapVirtualKey en lParam que dans les 16 bits de poids fort. Je ne suis pas familliar avec ce message plus, mais je pense que ce qui se passe est que, puisque 0 est transmis comme second paramètre, il n'y a pas de clé virtuelle code de balayage (ou vice versa) traduction requise, mais le code d'activation est toujours nécessaire dans les 16 bits supérieurs de lParam

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top