Compartilhar via


TVN_ASYNCDRAW código de notificação

Enviado por um controle de exibição de árvore para seu pai quando o desenho de um ícone ou sobreposição falhou. Esse código de notificação é enviado na forma de uma mensagem WM_NOTIFY .

TVN_ASYNCDRAW
        
    pnmTVAsynchDraw =  (NMTVASYNCDRAW *) lParam; 

Parâmetros

lParam

Ponteiro para uma estrutura NMTVASYNCDRAW . A estrutura NMTVASYNCDRAW contém o motivo pelo qual o desenho falhou.

Valor retornado

Sem valor de retorno.

Comentários

O controle de exibição de árvore deve ter o estilo estendido TVS_EX_DRAWIMAGEASYNC . Observe que isso é equivalente ao sinalizador de LVN_ASYNCDRAWN do modo de exibição de lista e seu estilo correspondente.

Esse controle não desenha de forma assíncrona. Assíncrono é usado no contexto em que o controle de exibição de árvore não extrai uma imagem de forma síncrona se ela não estiver disponível. (Por exemplo, a imagem poderá não estar disponível se o controle de exibição de árvore usar uma lista de imagens esparsas, pois a imagem pode ser descarregada.) Em vez disso, quando uma imagem não está disponível, o controle pergunta síncronamente ao pai qual ação tomar enviando ao pai uma notificação de TVN_ASYNCDRAW com uma estrutura NMTVASYNCDRAW . O membro de rh dessa estrutura descreve o motivo pelo qual o desenho do controle falhou. Um resultado de hr de E_PENDING significa que a imagem não está presente (a imagem precisa ser extraída). Êxito indica que a imagem está presente, mas não na qualidade da imagem necessária.

O pai define o membro dwRetFlags da estrutura para informar ao controle como proceder. Por exemplo, o pai pode retornar outra imagem, no membro iRetImageIndex , para que o controle seja desenhado. Nesse caso, o pai define o membro dwRetFlags como ADRF_DRAWIMAGE. Se o controle localizar que a imagem retornada não foi extraída, outra notificação TVN_ASYNCDRAW poderá ser enviada pelo controle.

Se uma imagem não estiver disponível, a ideia por trás de assíncrona será permitir que o pai faça a extração em segundo plano para que a extração não bloqueie o thread da interface do usuário, ou seja, o thread em que o controle está. O pai pode retornar ADRF_DRAWNOTHING ao controle e, em seguida, iniciar um thread em segundo plano para extrair o ícone. Depois de extraído, o pai pode definir o ícone no controle treeview com macro TreeView_SetItem. Isso faz com que o modo de exibição de árvore invalide o item e, eventualmente, repinta-o com a imagem extraída na lista de imagens.

O exemplo de código a seguir, a ser usado como parte de um programa maior, mostra como um pai pode processar dois códigos de retorno possíveis nesta notificação por um controle e decidir qual ação o controle deve tomar. A configuração de dwRetFlags não é mostrada.

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 Valor
Cliente mínimo com suporte
Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows Server 2008 [somente aplicativos da área de trabalho]
Cabeçalho
Commctrl.h