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