WM_POINTERUPDATE, message
Publié pour fournir une mise à jour sur un pointeur qui a effectué un contact sur la zone cliente d’une fenêtre ou lorsqu’un pointeur non capturé se déplace au-dessus de la zone cliente d’une fenêtre. Pendant que le pointeur pointe, le message cible la fenêtre sur laquelle le pointeur se trouve. Lorsque le pointeur est en contact avec la surface, il est implicitement capturé dans la fenêtre sur laquelle il est entré en contact et cette fenêtre continue à recevoir des données pour le pointeur jusqu’à ce qu’il rompe le contact.
![Important]
Les applications de bureau doivent prendre en charge les points par pouce (ppp). Si votre application ne prend pas en charge les ppp, les coordonnées d’écran contenues dans les messages de pointeur et les structures associées peuvent sembler inexactes en raison de la virtualisation ppp. La virtualisation ppp fournit une prise en charge de la mise à l’échelle automatique pour les applications qui ne prennent pas en charge les ppp et est active par défaut (les utilisateurs peuvent la désactiver). Pour plus d’informations, consultez Écriture d’applications Win32 haute résolution.
#define WM_POINTERUPDATE 0x0245
Paramètres
-
wParam
-
Contient des informations sur le pointeur. Utilisez les macros suivantes pour récupérer les informations à partir du paramètre wParam.
GET_POINTERID_WPARAM(wParam) : l’identificateur du pointeur.
IS_POINTER_NEW_WPARAM(wParam) : indique si ce message représente la première entrée générée par un nouveau pointeur.
IS_POINTER_INRANGE_WPARAM(wParam) : indique si ce message a été généré par un pointeur pendant sa durée de vie. Cet indicateur n’est pas défini sur les messages qui indiquent que le pointeur a quitté la plage de détection
IS_POINTER_INCONTACT_WPARAM(wParam) : indique si ce message a été généré par un pointeur qui est en contact avec la surface de la fenêtre. Cet indicateur n’est pas défini sur les messages qui indiquent un pointeur qui survole.
IS_POINTER_PRIMARY_WPARAM(wParam) : indique que ce pointeur a été désigné comme principal.
IS_POINTER_FIRSTBUTTON_WPARAM(wParam) : indique s’il existe une action principale.
- Ceci est comparable à un bouton gauche de la souris enfoncé.
- Un pointeur tactile aura cet indicateur défini lorsqu’il est en contact avec la surface du numériseur.
- Un pointeur de stylet aura cet indicateur défini lorsqu’il est en contact avec la surface du numériseur sans aucun bouton enfoncé.
IS_POINTER_SECONDBUTTON_WPARAM(wParam) : indique s’il existe une action secondaire.
- Ceci est comparable à un bouton droit de la souris enfoncé.
- Un pointeur de stylet aura cet indicateur défini lorsqu’il est en contact avec la surface du numériseur avec le bouton du stylet enfoncé.
IS_POINTER_THIRDBUTTON_WPARAM(wParam) : indique s’il existe une ou plusieurs actions tertiaires basées sur le type de pointeur ; les applications qui souhaitent répondre aux actions tertiaires doivent récupérer des informations spécifiques au type de pointeur pour déterminer quels boutons tertiaires sont enfoncés. Par exemple, une application peut déterminer l’état des boutons d’un stylet en appelant GetPointerPenInfo et en examinant les indicateurs qui spécifient l’état du bouton spécifié.
IS_POINTER_FOURTHBUTTON_WPARAM(wParam) : indique si le pointeur spécifié a effectué la quatrième action. Les applications qui souhaitent répondre aux quatrièmes actions doivent récupérer des informations spécifiques au type de pointeur pour déterminer si le premier bouton de la souris étendue (XButton1) est enfoncé.
IS_POINTER_FIFTHBUTTON_WPARAM(wParam) : indique si le pointeur spécifié a effectué la cinquième action. Les applications qui souhaitent répondre aux cinquièmes actions doivent récupérer des informations spécifiques au type de pointeur pour déterminer si le deuxième bouton de la souris étendue (XButton2) est enfoncé.
Pour plus d’informations, voir Indicateurs de pointeur.
Remarque
Un pointeur qui survole n’a aucun indicateur de bouton défini. Ceci est semblable à un déplacement de la souris sans bouton de souris enfoncé. Par exemple, une application peut déterminer l’état des boutons d’un stylet qui survole en appelant GetPointerPenInfo et en examinant les indicateurs qui spécifient l’état du bouton spécifié.
-
lParam
-
Contient l’emplacement de point du pointeur.
Remarque
Étant donné que le pointeur peut contacter l’appareil sur une zone non triviale, cet emplacement de point peut être une simplification d’une zone de pointeur plus complexe. Dans la mesure du possible, une application doit utiliser les informations complètes de zone de pointeur au lieu de l’emplacement du point.
Utilisez les macros suivantes pour récupérer les coordonnées d’écran physiques du point.
- GET_X_LPARAM(lParam) : coordonnée x (point horizontal).
- GET_Y_LPARAM(lParam) : coordonnée y (point vertical).
Valeur retournée
Si une application traite ce message, elle doit retourner à zéro.
Si l’application ne traite pas ce message, elle doit appeler DefWindowProc.
Notes
Chaque pointeur a un identificateur de pointeur unique pendant sa durée de vie. La durée de vie d’un pointeur commence lorsqu’il est détecté pour la première fois.
Un message WM_POINTERENTER est généré si un pointeur qui survole est détecté. Un message WM_POINTERDOWN suivi d’un message WM_POINTERENTER est généré si un pointeur qui ne survole pas est détecté.
Pendant sa durée de vie, un pointeur peut générer une série de messages WM_POINTERUPDATE pendant qu’il survole ou en contact.
La durée de vie d’un pointeur se termine lorsqu’il n’est plus détecté. Cela génère un message WM_POINTERLEAVE.
Lorsqu’un pointeur est abandonné, POINTER_FLAG_CANCELED est défini.
Un message WM_POINTERLEAVE peut également être généré lorsqu’un pointeur non capturé se déplace en dehors des limites d’une fenêtre.
Utilisez le code suivant pour obtenir la position horizontale et verticale d’un pointeur :
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
Vous pouvez également utiliser la macro MAKEPOINTS pour convertir le paramètre lParam en structure POINTS.
La fonction GetKeyState peut être utilisée pour déterminer les états de la touche de modification du clavier associés à ce message. Par exemple, pour détecter que la touche ALT a été enfoncée, vérifiez si GetKeyState (VK_MENU) < 0.
Si l’application ne traite pas ce message, DefWindowProc peut générer un ou plusieurs messages WM_GESTURE si la séquence d’entrée à partir de ce pointeur, et éventuellement d’autres pointeurs, est reconnue comme un mouvement. Si un mouvement n’est pas reconnu, DefWindowProc peut générer une entrée de souris.
Si une application consomme de manière sélective une entrée de pointeur et transfère le reste à DefWindowProc, le comportement résultant n’est pas défini.
Utilisez la fonction GetPointerInfo pour récupérer d’autres informations associées au message.
Si l’application ne traite pas ces messages aussi rapidement qu’ils sont générés, certains déplacements peuvent être regroupés. L’historique des entrées qui ont été regroupées dans ce message peut être récupéré à l’aide de la fonction GetPointerInfoHistory.
Exemples
L’exemple de code suivant montre comment utiliser GET_X_LPARAM, GET_Y_LPARAM, IS_POINTER_FIRSTBUTTON_WPARAM et IS_POINTER_SECONDBUTTON_WPARAM pour récupérer des informations pertinentes à partir des paramètres wParam et lParam du message WM_POINTERUPDATE.
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
if (IS_POINTER_PRIMARYBUTTON_WPARAM(wParam))
{
// process pointer move while down, similar to mouse move with left button down
}
else if (IS_POINTER_SECONDARYBUTTON_WPARAM(wParam))
{
// process pointer move while down, similar to mouse move with right button down
}
L’exemple de code suivant montre comment utiliser GET_POINTERID_WPARAM pour récupérer l’ID de pointeur à partir du paramètre wParam du message WM_POINTERUPDATE.
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure, call GetLastError()
}
else
{
// success, process pointerInfo
}
L’exemple de code suivant montre comment gérer différents types de pointeurs.
POINTER_TOUCH_INFO touchInfo;
POINTER_PEN_INFO penInfo;
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_INPUT_TYPE pointerType = PT_POINTER;
// default to unhandled to enable call to DefWindowProc
fHandled = FALSE;
if (!GetPointerType(pointerId, &pointerType))
{
// failure, call GetLastError()
// set PT_POINTER to fall to default case below
pointerType = PT_POINTER;
}
switch (pointerType)
{
case PT_TOUCH:
// Retrieve touch information
if (!GetPointerTouchInfo(pointerId, &touchInfo))
{
// failure, call GetLastError()
}
else
{
// success, process touchInfo
// mark as handled to skip call to DefWindowProc
fHandled = TRUE;
}
break;
case PT_PEN:
// Retrieve pen information
if (!GetPointerPenInfo(pointerId, &penInfo))
{
// failure, call GetLastError()
}
else
{
// success, process penInfo
// mark as handled to skip call to DefWindowProc
fHandled = TRUE;
}
break;
default:
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure.
}
else
{
// success, proceed with pointerInfo.
fHandled = HandleGenericPointerInfo(&pointerInfo);
}
break;
}
Spécifications
Condition requise | Valeur |
---|---|
Client minimal pris en charge |
Windows 8 [applications de bureau uniquement] |
Serveur minimal pris en charge |
Windows Server 2012 [applications de bureau uniquement] |
En-tête |
|
Voir aussi
-
Référence