code de notification TVN_ASYNCDRAW
Envoyé par un contrôle 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 LVN_ASYNCDRAWN de l’affichage de liste et à son style correspondant.
Ce contrôle ne dessine pas de façon asynchrone. Asynchrone est utilisé dans le contexte où le contrôle d’arborescence n’extrait pas de façon synchrone une image si elle n’est pas disponible. (Par instance, l’image peut ne pas être disponible si le contrôle 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 tirage 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). Success indique que l’image est présente, mais pas à la qualité d’image requise.
Le parent définit le membre dwRetFlags de la structure pour indiquer au contrôle comment procéder. Par instance, 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 détecte que 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 de permettre au parent d’effectuer l’extraction en arrière-plan afin que l’extraction ne bloque pas le thread d’interface utilisateur, c’est-à-dire le thread sur lequel le contrôle se trouve. 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 la macro TreeView_SetItem. Cela entraîne l’invalidation de l’arborescence de l’élément et, par la suite, le repeindre avec l’image extraite dans la liste d’images.
L’exemple de code suivant, à utiliser dans le cadre d’un programme plus large, 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
}
Spécifications
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 |
|