Pergunta

Eu tenho o controle árvore de objetos criados usando a classe CTreeCtrl MFC. O controle de árvore precisa de renomeação de apoio. Quando eu à esquerda, clique em qualquer um item na Árvore do evento TVN_SELCHANGED é chamado a partir do qual eu posso obter o item selecionado da árvore como a seguir: HTREEITEM h = m_moveListTree.GetSelectedItem (); CString s = m_moveListTree.GetItemText (h);

No entanto, quando eu rightclick em qualquer item na árvore eu não receber qualquer evento TVN_SELCHANGED e daí o meu item selecionado ainda permanece o mesmo de evento de clique esquerdo. Isso está causando seguinte problema: 1) O usuário leftclicks no item A 2) cliques de usuários para o item B e diz renomeação 3) Uma vez que o item selecionado ainda é um a renomeação está aplicando para o item A.

Por favor ajuda para resolver problema.

-Praveen

Foi útil?

Solução

Eu criei minha própria MFC como casa cresceu biblioteca C ++ GUI em cima da API Win32 e olhando para o meu código, este é como ele lida com essa situação:

LRESULT xTreeCtrl::onRightClick(NMHDR *)
{
  xPoint pt;

  //-- get the cursor at the time the mesage was posted
  DWORD dwPos = ::GetMessagePos();

  pt.x = GET_X_LPARAM(dwPos);
  pt.y = GET_Y_LPARAM (dwPos);

  //-- now convert to window co-ordinates
  pt.toWindow(this);

  //-- check for a hit
  HTREEITEM hItem = this->hitTest(pt);

  //-- select any item that was hit
  if ((int)hItem != -1) this->select(hItem);

  //-- leave the rest to default processing
  return 0;
}

Eu suspeito que se você fizer algo semelhante no MFC botão direito do mouse ou o botão direito para baixo eventos que irá corrigir o problema.

NOTA: O código onRightClick acima é nada mais do que o manipulador para o WM_NOTIFY , NM_RCLICK mensagem

.

Outras dicas

Esse comportamento é por design -. Botão direito do mouse não se move a seleção

Por que você quer, ligue o estilo TVS_EDITLABELS na exibição em árvore. Então você lidar com as notificações TVN_BEGINLABELEDIT e TVN_ENDLABELEDIT.

Não tenho certeza como você aparecer o menu de contexto, mas você pode usar HitTest () para ir de um ponto para um item de árvore. Então você pode usar isso em seu manipulador de clique direito.

Não se esqueça que o menu de contexto também pode ser ativado por uma chave nos teclados modernos razoáveis. Então você provavelmente vai querer usar o item selecionado como alvo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top