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 |
|