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