IUIAnimationPriorityComparison ::HasPriority, méthode (uianimation.h)

Détermine si un nouveau storyboard a la priorité sur un storyboard planifié.

Syntaxe

HRESULT HasPriority(
  [in] IUIAnimationStoryboard       *scheduledStoryboard,
  [in] IUIAnimationStoryboard       *newStoryboard,
  [in] UI_ANIMATION_PRIORITY_EFFECT priorityEffect
);

Paramètres

[in] scheduledStoryboard

Storyboard actuellement planifié.

[in] newStoryboard

Nouveau storyboard qui interrompt le storyboard planifié spécifié dans scheduledStoryboard.

[in] priorityEffect

Effet potentiel sur newStoryboard si scheduledStoryboard a une priorité plus élevée.

Valeur retournée

Cette méthode peut retourner l’une de ces valeurs.

Code de retour Description
S_OK
newStoryboard a la priorité.
S_FALSE
scheduledStoryboard a la priorité.

Remarques

Une seule variable d’animation peut être incluse dans plusieurs storyboards, mais plusieurs storyboards ne peuvent pas animer la même variable en même temps.

Si un nouveau storyboard tente d’animer une ou plusieurs variables actuellement planifiées pour l’animation par un autre storyboard, un conflit de planification se produit.

Pour déterminer quel storyboard a la priorité, le gestionnaire d’animations peut appeler HasPriority sur un ou plusieurs gestionnaires de comparaison de priorité fournis par l’application.

L’inscription d’objets de comparaison de priorité est facultative. Par défaut, tous les storyboards peuvent être supprimés, terminés ou compressés pour éviter l’échec, mais aucun ne peut être annulé et, par défaut, aucun storyboard ne sera annulé ou supprimé pour éviter un retard.

Par défaut, un appel effectué dans une méthode de rappel à une autre méthode d’animation entraîne l’échec de l’appel et le retour de UI_E_ILLEGAL_REENTRANCY. Toutefois, il existe des exceptions à cette valeur par défaut. Les méthodes suivantes peuvent être appelées avec succès à partir de HasPriority :

Gestion des conflits

Pour résoudre un conflit de planification, le gestionnaire d’animations dispose des options suivantes :

  • Annulez le storyboard planifié s’il n’a pas commencé à lire et l’objet de comparaison de priorité inscrit auprès de IUIAnimationManager ::SetCancelPriorityComparison retourne S_OK. Les storyboards annulés sont complètement supprimés de la planification.
  • Supprimez le storyboard planifié si l’objet de comparaison de priorité inscrit auprès de IUIAnimationManager ::SetTrimPriorityComparison retourne S_OK. Si le nouveau storyboard supprime le storyboard planifié, le storyboard planifié ne peut plus affecter une variable lorsque le nouveau storyboard commence à animer cette variable.
  • Terminez le storyboard planifié si le storyboard planifié contient une boucle avec un nombre de répétitions de UI_ANIMATION_REPEAT_INDEFINITELY et que l’objet de comparaison de priorité inscrit auprès de IUIAnimationManager ::SetConcludePriorityComparison retourne S_OK. Si le storyboard est terminé, la répétition actuelle de la boucle se termine et le rappel du storyboard est lu.
  • Compressez le storyboard planifié et tout autre storyboard qui anime les mêmes variables si l’objet de comparaison de priorité inscrit auprès de IUIAnimationManager ::SetCompressPriorityComparison retourne S_OK pour tous les storyboards planifiés susceptibles d’être affectés par la compression. Lorsque les storyboards sont compressés, le temps est temporairement accéléré pour les storyboards affectés, afin qu’ils soient plus rapides.

Si aucune des options ci-dessus n’est autorisée par les objets de comparaison de priorité, la tentative de planification du storyboard échoue et l’animation Windows retourne UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY à l’application appelante.

Notez que pour que le nouveau storyboard soit correctement planifié, il doit commencer avant l’expiration de son délai acceptable le plus long. Cela est déterminé par IUIAnimationStoryboard ::SetLongestAcceptableDelay ou IUIAnimationManager ::SetDefaultLongestAcceptableDelay (si aucun des deux n’est appelé, la valeur par défaut est 0,0 seconde). Si le délai acceptable le plus long est UI_ANIMATION_SECONDS_EVENTUALLY, tout délai fini sera suffisant.

Le paramètre priorityEffect décrit l’effet possible sur le nouveau storyboard si HasPriority devait retourner S_FALSE. Si priorityEffect est UI_ANIMATION_PRIORITY_EFFECT_FAILURE, il est possible que le retour d’S_FALSE entraîne l’échec de la planification du nouveau storyboard (il est également possible que le gestionnaire d’animation soit autorisé à résoudre le conflit d’une autre manière par un autre objet de comparaison de priorité). Si priorityEffect est UI_ANIMATION_PRIORITY_EFFECT_DELAY, le seul inconvénient de retourner S_FALSE est que le storyboard peut commencer plus tard qu’hasPriority renvoyé S_OK.

Lorsque UI_ANIMATION_PRIORITY_EFFECT_DELAY est passé à HasPriority, le gestionnaire d’animations a déjà déterminé qu’il peut planifier le nouveau storyboard de sorte qu’il commence avant que son délai acceptable le plus long ne soit écoulé, mais il demande à l’application si le storyboard doit commencer encore plus tôt. Dans certains scénarios, il peut être préférable de réduire la latence d’une animation en retournant S_OK. Dans d’autres cas, il peut être préférable de laisser les animations planifiées se terminer chaque fois que possible, auquel cas S_FALSE doivent être retournés. UI_ANIMATION_PRIORITY_EFFECT_DELAY est transmis à HasPriority uniquement lorsque le gestionnaire d’animations envisage d’annuler ou de supprimer un storyboard.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7, Windows Vista et mise à jour de plateforme pour Windows Vista [applications de bureau | Applications UWP]
Serveur minimal pris en charge Aucun pris en charge
Plateforme cible Windows
En-tête uianimation.h
DLL UIAnimation.dll

Voir aussi

IUIAnimationManager ::SetCancelPriorityComparison

IUIAnimationManager ::SetCompressPriorityComparison

IUIAnimationManager ::SetConcludePriorityComparison

IUIAnimationManager ::SetTrimPriorityComparison

IUIAnimationPriorityComparison

UI_ANIMATION_PRIORITY_EFFECT