code de notification TVN_ASYNCDRAW

Envoyé par un contrôle d’arborescence à son parent lorsque le dessin d’une icône ou d’une superposition a échoué. Ce code de notification est envoyé sous la forme d’un message WM_NOTIFY .

TVN_ASYNCDRAW
        
    pnmTVAsynchDraw =  (NMTVASYNCDRAW *) lParam; 

Paramètres

lParam

Pointeur vers une structure NMTVASYNCDRAW . La structure NMTVASYNCDRAW contient la raison pour laquelle le dessin a échoué.

Valeur retournée

Pas de valeur de retour.

Notes

Le contrôle d’arborescence doit avoir le style étendu TVS_EX_DRAWIMAGEASYNC . Notez que cela équivaut à l’indicateur de LVN_ASYNCDRAWN de l’affichage de liste et à son style correspondant.

Ce contrôle ne dessine pas de manière asynchrone. Asynchrone est utilisé dans le contexte où le contrôle arborescence n’extrait pas de façon synchrone une image s’il n’est pas disponible. (Par exemple, l’image peut ne pas être disponible si le contrôle d’arborescence utilise une liste d’images éparse, car l’image peut être déchargée.) Au lieu de cela, lorsqu’une image n’est pas disponible, le contrôle demande de façon synchrone au parent quelle action effectuer en envoyant au parent une notification TVN_ASYNCDRAW avec une structure NMTVASYNCDRAW . Le membre hr de cette structure décrit la raison pour laquelle le dessin du contrôle a échoué. Un résultat hr de E_PENDING signifie que l’image n’est pas présente du tout (l’image doit être extraite). La réussite indique que l’image est présente, mais pas à la qualité requise de l’image.

Le parent définit le membre dwRetFlags de la structure pour informer le contrôle de la procédure à suivre. Par exemple, le parent peut retourner une autre image, dans le membre iRetImageIndex , pour que le contrôle dessine. Dans ce cas, le parent définit le membre dwRetFlags sur ADRF_DRAWIMAGE. Si le contrôle trouve l’image retournée n’a pas été extraite, une autre notification TVN_ASYNCDRAW peut être envoyée par le contrôle.

Si une image n’est pas disponible, l’idée derrière asynchrone est d’autoriser le parent à effectuer l’extraction en arrière-plan afin que l’extraction ne bloque pas le thread d’interface utilisateur, autrement dit, le thread sur lequel le contrôle est activé. Le parent peut retourner ADRF_DRAWNOTHING au contrôle, puis lancer un thread d’arrière-plan pour extraire l’icône. Une fois extrait, le parent peut définir l’icône dans le contrôle Treeview avec macro TreeView_SetItem. Cela entraîne l’invalidation de l’arborescence de l’élément et le repeindre avec l’image extraite dans la liste d’images.

L’exemple de code suivant, à utiliser dans le cadre d’un programme plus grand, montre comment un parent peut traiter deux codes de retour possibles dans cette notification par un contrôle et décider de l’action que le contrôle doit entreprendre. La définition de dwRetFlags n’est pas affichée.

case TVN_ASYNCDRAW:

   NMTVASYNCDRAW *pnm =  (NMTVASYNCDRAW *)lParam
   short dwDrawSuccessFlags = ShortFromResult(pnm->hr);

   if (dwDrawSuccessFlags & ILDRF_IMAGELOWQUALITY)
   {
        // Need to re-extract the icon
   }

   if (dwDrawSuccessFlags & ILDRF_OVERLAYLOWQUALITY)
   {
        // Need to re-extract the overlay
   }

Configuration requise

Condition requise Valeur
Client minimal pris en charge
Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge
Windows Server 2008 [applications de bureau uniquement]
En-tête
Commctrl.h