Operações de arrastar e soltar de controle de árvore
Um controle de árvore (CTreeCtrl) envia uma notificação quando o usuário começa a arrastar um item. O controle envia uma mensagem de notificação TVN_BEGINDRAG quando o usuário começa a arrastar um item com o botão esquerdo do mouse e uma mensagem de notificação TVN_BEGINRDRAGquando o usuário começa a arrastar com o botão direito. Você pode impedir que um controle de árvore envie essas notificações fornecendo ao controle de árvore o estilo TVS_DISABLEDRAGDROP.
Você obtém uma imagem a ser exibida durante uma operação de arrastar chamando a função membro CreateDragImage. O controle de árvore cria um bitmap de arrastar com base na etiqueta do item que está sendo arrastado. Em seguida, o controle de árvore cria uma lista de imagens, adiciona o bitmap a ela e retorna um ponteiro para o objeto CImageList.
Você deve fornecer o código que realmente arrasta o item. Isso geralmente envolve o uso dos recursos de arrastar as funções de lista de imagens e processar as mensagens WM_MOUSEMOVE e WM_LBUTTONUP (ou WM_RBUTTONUP) enviadas após o início da operação de arrastar. Para mais informações sobre as funções de lista de imagens, confira CImageList em Referência do MFC e Listas de Imagens no SDK do Windows. Para mais informações sobre como arrastar um item de controle de árvore, confira Como arrastar o item do modo de exibição de árvore, também no SDK do Windows.
Se os itens em um controle de árvore forem os destinos de uma operação do tipo "arrastar e soltar", você precisará saber quando o cursor do mouse está em um item de destino. Você pode descobrir isso chamando a função de membro HitTest. Especifique um ponto e um inteiro ou o endereço de uma estrutura TVHITTESTINFO que contém as coordenadas atuais do cursor do mouse. Quando a função retorna, o inteiro ou estrutura contém um sinalizador que indica o local do cursor do mouse em relação ao controle de árvore. Se o cursor estiver sobre um item no controle de árvore, a estrutura também conterá o identificador do item.
Você pode indicar que um item é o destino de uma operação do tipo "arrastar e soltar" chamando a função membro SetItem para definir o estado como o valor TVIS_DROPHILITED
. Um item que tem esse estado é desenhado no estilo usado para indicar um destino do tipo "arrastar e soltar".