Que contient un message Windows ?

De RAD Studio
Aller à : navigation, rechercher

Remonter à Compréhension du système de gestion des messages


Un message Windows est un enregistrement de données contenant plusieurs données membres exploitables. Le plus important est celui qui contient une valeur de la taille d'un entier identifiant le message. Windows définit de nombreux messages et l'unité Messages déclare tous leurs identificateurs. Les autres informations utiles d'un message figurent dans deux champs paramètre et un champ résultat.

Un paramètre contient 16 bits, l'autre 32 bits. Vous voyez souvent du code Windows qui fait référence à ces valeurs avec wParam et lParam, comme paramètre de type word et paramètre de type long. Souvent, chaque paramètre contient plusieurs informations, et vous voyez les références aux noms comme lParamHi, qui font référence au mot de poids fort dans le paramètre de type long.

A l'origine, un programmeur Windows devait mémoriser le contenu de chaque paramètre ou consulter les API Windows. Microsoft a désormais donné un nom aux paramètres. Ces décomposeurs de message ainsi appelés simplifient la compréhension des informations accompagnant chaque message. Par exemple, les paramètres pour le message WM_KEYDOWN maintenant appelés nVirtKey et lKeyData, donnent plus d'informations spécifiques que wParam et lParam.

Pour chaque type de message, Delphi définit un type d'enregistrement qui donne un nom mnémonique à chaque paramètre. Les messages souris transmettent par exemple les coordonnées x et y de l'événement souris dans le paramètre de type long, une dans le mot de poids fort, et l'autre dans le mot de poids faible. Avec l'utilisation de la structure souris-message, vous n'avez pas à vous soucier du mot dont il s'agit, car vous faites référence aux paramètres par les noms XPos et YPos au lieu de lParamLo et lParamHi.

void MyKeyDownHandler(  HWND hwnd, UINT nVirtKey, BOOL fDown, int CRepeat, UINT flags )
{
  .
  .
  .
}
LRESULT MyWndProc( HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam )
{
  switch(  Message )
  {
    HANDLE_MSG( hwnd, WM_KEYDOWN, MyKeyDownHandler );
    .
    .
    .
}