Compartir a través de


TVN_ASYNCDRAW código de notificación

Enviado por un control de vista de árbol a su elemento primario cuando se ha producido un error en el dibujo de un icono o superposición. Este código de notificación se envía en forma de mensaje de WM_NOTIFY .

TVN_ASYNCDRAW
        
    pnmTVAsynchDraw =  (NMTVASYNCDRAW *) lParam; 

Parámetros

lParam

Puntero a una estructura NMTVASYNCDRAW . La estructura NMTVASYNCDRAW contiene el motivo por el que se produjo un error en el dibujo.

Valor devuelto

No de devuelve ningún valor.

Comentarios

El control de vista de árbol debe tener el estilo extendido TVS_EX_DRAWIMAGEASYNC . Tenga en cuenta que esto equivale a la marca de LVN_ASYNCDRAWN de la vista de lista y su estilo correspondiente.

Este control no dibuja de forma asincrónica. La asincrónica se usa en el contexto en el que el control de vista de árbol no extrae de forma sincrónica una imagen si no está disponible. (Por ejemplo, es posible que la imagen no esté disponible si el control de vista de árbol usa una lista de imágenes dispersas, ya que la imagen puede descargarse). En su lugar, cuando una imagen no está disponible, el control pregunta sincrónicamente al elemento primario qué acción realizar enviando al elemento primario una notificación de TVN_ASYNCDRAW con una estructura NMTVASYNCDRAW . El miembro hr de esta estructura describe el motivo por el que se produjo un error en el dibujo del control. Un resultado hr de E_PENDING significa que la imagen no está presente en absoluto (la imagen debe extraerse). Correcto indica que la imagen está presente, pero no en la calidad de imagen necesaria.

El elemento primario establece el miembro dwRetFlags de la estructura para informar al control de cómo continuar. Por ejemplo, el elemento primario puede devolver otra imagen, en el miembro iRetImageIndex , para que el control se dibuje. En este caso, el elemento primario establece el miembro dwRetFlags en ADRF_DRAWIMAGE. Si el control encuentra que la imagen devuelta no se ha extraído, el control puede enviar otra notificación TVN_ASYNCDRAW.

Si una imagen no está disponible, la idea detrás de asincrónica es permitir que el elemento primario realice la extracción en segundo plano para que la extracción no bloquee el subproceso de interfaz de usuario, es decir, el subproceso en el que se encuentra el control. El elemento primario puede devolver ADRF_DRAWNOTHING al control y, a continuación, iniciar un subproceso en segundo plano para extraer el icono. Una vez extraído, el elemento primario puede establecer el icono en el control treeview con macro TreeView_SetItem. Esto hace que la vista de árbol invalide el elemento y, finalmente, vuelva a pintarlo con la imagen extraída en la lista de imágenes.

En el ejemplo de código siguiente, que se usará como parte de un programa mayor, se muestra cómo un elemento primario puede procesar dos posibles códigos de retorno en esta notificación por un control y decidir qué acción debe realizar el control. No se muestra la configuración de dwRetFlags .

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
   }

Requisitos

Requisito Value
Cliente mínimo compatible
Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows Server 2008 [solo aplicaciones de escritorio]
Encabezado
Commctrl.h