Condividi tramite


TVN_ASYNCDRAW codice di notifica

Inviato da un controllo visualizzazione albero al relativo padre quando il disegno di un'icona o una sovrapposizione non è riuscita. Questo codice di notifica viene inviato sotto forma di messaggio di WM_NOTIFY .

TVN_ASYNCDRAW
        
    pnmTVAsynchDraw =  (NMTVASYNCDRAW *) lParam; 

Parametri

lParam

Puntatore a una struttura NMTVASYNCDRAW . La struttura NMTVASYNCDRAW contiene il motivo per cui il disegno non è riuscito.

Valore restituito

Nessun valore restituito.

Commenti

Il controllo visualizzazione albero deve avere lo stile esteso TVS_EX_DRAWIMAGEASYNC . Si noti che questo equivale al flag di LVN_ASYNCDRAWN della visualizzazione elenco e al relativo stile corrispondente.

Questo controllo non disegna in modo asincrono. L'asincrona viene usata nel contesto in cui il controllo visualizzazione albero non estrae in modo sincrono un'immagine se non è disponibile. Ad esempio, l'immagine potrebbe non essere disponibile se il controllo visualizzazione albero usa un elenco di immagini sparse, poiché l'immagine potrebbe essere scaricata. Invece, quando un'immagine non è disponibile, il controllo chiede in modo sincrono l'azione padre da eseguire inviando all'elemento padre una notifica TVN_ASYNCDRAW con una struttura NMTVASYNCDRAW . Il membro hr di questa struttura descrive il motivo per cui il disegno del controllo non è riuscito. Un risultato hr di E_PENDING significa che l'immagine non è presente in tutto (l'immagine deve essere estratta). L'esito positivo indica che l'immagine è presente ma non alla qualità dell'immagine richiesta.

L'elemento padre imposta il membro dwRetFlags della struttura per informare il controllo su come procedere. Ad esempio, l'elemento padre può restituire un'altra immagine, nel membro iRetImageIndex , per il controllo da disegnare. In questo caso, l'elemento padre imposta il membro dwRetFlags su ADRF_DRAWIMAGE. Se il controllo rileva che l'immagine restituita non è stata estratta, è possibile inviare un'altra notifica TVN_ASYNCDRAW dal controllo.

Se un'immagine non è disponibile, l'idea dietro l'asincrona consiste nel consentire all'elemento padre di eseguire l'estrazione in background in modo che l'estrazione non blocchi il thread dell'interfaccia utente, ovvero il thread in cui è attivo il controllo. L'elemento padre può restituire ADRF_DRAWNOTHING al controllo, quindi avviare un thread di sfondo per estrarre l'icona. Dopo l'estrazione, l'elemento padre può impostare l'icona nel controllo treeview con macro TreeView_SetItem. In questo modo la visualizzazione albero non invalida l'elemento e la riintula infine con l'immagine estratta nell'elenco di immagini.

Nell'esempio di codice seguente, da usare come parte di un programma più grande, viene illustrato come un padre può elaborare due possibili codici restituiti in questa notifica da un controllo e decidere quale azione deve eseguire il controllo. L'impostazione di dwRetFlags non viene visualizzata.

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
   }

Requisiti

Requisito Valore
Client minimo supportato
Windows Vista [solo app desktop]
Server minimo supportato
Windows Server 2008 [solo app desktop]
Intestazione
Commctrl.h