Como saber quando o usuário clica em uma caixa de marcar em um controle TreeView
Este artigo descreve como saber quando o usuário clica em uma caixa de marcar em um controle TreeView.
Versão original do produto: Visual C++
Número de KB original: 261289
Resumo
Em um controle TreeView com o estilo TVS_CHECKBOXES , não há notificação de que o estado verificado do item foi alterado. Também não há nenhuma notificação que indique que o estado do item tenha sido alterado. No entanto, você pode determinar que o usuário clicou no ícone de estado do item e agirá sobre isso.
Como o TreeView alterna o estado da caixa marcar
Quando o usuário clica na caixa marcar de um item do TreeView, uma NM_CLICK
notificação é enviada para a janela pai. Quando ocorre, a TVM_HITTEST
mensagem retorna TVHT_ONITEMSTATEICON
. O controle TreeView usa essa mesma condição para alternar o estado da caixa marcar. Infelizmente, o controle TreeView alterna o estado depois que a NM_CLICK
notificação é enviada.
Código de exemplo para saber quando os usuários clicam em uma caixa de marcar
Você pode postar uma mensagem definida pelo usuário na mesma janela que está processando a NM_CLICK
notificação e tratar essa mensagem definida pelo usuário como uma notificação de que o estado verificado foi alterado. O código de exemplo a seguir ilustra como ele pode ser realizado.
#define UM_CHECKSTATECHANGE (WM_USER + 100)
case WM_NOTIFY:
{
LPNMHDR lpnmh = (LPNMHDR) lParam;
TVHITTESTINFO ht = {0};
if(lpnmh->code == NM_CLICK) && (lpnmh->idFrom == IDC_MYTREE))
{
DWORD dwpos = GetMessagePos();
// include <windowsx.h> and <windows.h> header files
ht.pt.x = GET_X_LPARAM(dwpos);
ht.pt.y = GET_Y_LPARAM(dwpos);
MapWindowPoints(HWND_DESKTOP, lpnmh->hwndFrom, &ht.pt, 1);
TreeView_HitTest(lpnmh->hwndFrom, &ht);
if(TVHT_ONITEMSTATEICON & ht.flags)
{
PostMessage(hWnd, UM_CHECKSTATECHANGE, 0, (LPARAM)ht.hItem);
}
}
}
break;
case UM_CHECKSTATECHANGE:
{
HTREEITEM hItemChanged = (HTREEITEM)lParam;
/*
Retrieve the new checked state of the item and handle the notification.
*/
}
break
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários