Handling Drag-and-Drop Messages
9/9/2008
Uma árvore-controle exibição notifica o janela pai quando um usuário começa a arrastar um item usando um mouse ou caneta. O janela pai recebe uma mensagem TVN_BEGINDRAG quando um usuário começa arrastar um item usando o botão esquerdo do mouse e uma mensagem TVN_BEGINRDRAG quando um usuário começa arrastar usando o direito botão. Você pode evitar um controle exibição - exibição controle enviar essas mensagens, fornecendo a árvore - árvore o estilo TVS_DISABLEDRAGDROP.
Você pode obter uma imagem para exibir durante um operação de arrastar usando a mensagem TVM_CREATEDRAGIMAGE. A árvore-controle de exibição cria um bitmap arrastar que baseia-se no rotular do item que está sendo arrastado. Em seguida, a árvore-exibição controle cria uma lista de imagens, adiciona o bitmap para ele e retorna o identificador para o lista de imagens.
Você deve fornecer a codificar que, na verdade, você pode arrastar o item. Normalmente, essa tarefa envolve usando os recursos arrastar das funções que manipulam listas imagem e incluindo codificar para processamento de mensagens WM_MOUSEMOVE e WM_LBUTTONUP que são enviadas para o janela pai após o operação de arrastar começa.
Para usar um item em uma árvore-controle de exibição como o destino de uma drag-and-drop operation, use o SendMessage função para enviar uma mensagem TVM_HITTEST determinar quando o mouse ou caneta é em um destino item. Para fazer isso, especificar o endereço de um TVHITTESTINFO estrutura que contém o atual coordenadas do mouse ou caneta. Quando SendMessage Retorna, a estrutura contém um sinalizador que indica a localidade do mouse ou caneta relativo para a árvore-controle de exibição. Se o mouse ou caneta está sobre um item na árvore de-controle de exibição, a estrutura contém o identificador para o item, muito.
Você pode indicar que um item é o destino de uma drag-and-drop operation usando a mensagem TVM_SETITEM para definir o estado para TVIS_DROPHILITED. Um item que tenha esse estado é desenhado no estilo que é usado para indicar um destino para um drag-and-drop operation.
O seguinte mostra exemplo de código como identificador arrastar - e - mensagens ato de soltar.
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch (pnmh->code)
{
case TVN_BEGINDRAG:
{
// Notifies the tree-view control's parent window that a
// drag-and-drop operation is being initiated.
return 0;
}
case TVN_BEGINLABELEDIT:
{
// Notifies the tree-view control's parent window about the
// start of label editing for an item.
return 0;
}
case TVN_ITEMEXPANDED:
{
// Notifies a tree-view control's parent window that a parent
// item's list of child items has expanded or collapsed. This
// message is sent in the form of a WM_NOTIFY
// message.
return 0;
}
case TVN_ITEMEXPANDING:
{
// Notifies a tree-view control's parent window that a parent
// item's list of child items is about to expand or collapse.
return 0;
}
default:
return 0;
}
break;
}