Cómo saber cuándo el usuario hace clic en una casilla de verificación en un control TreeView
En este artículo se describe cómo saber cuándo el usuario hace clic en una casilla de verificación en un control TreeView.
Versión original del producto: Visual C++
Número de KB original: 261289
Resumen
En un control TreeView con el estilo TVS_CHECKBOXES , no hay ninguna notificación de que se haya cambiado el estado comprobado del elemento. Tampoco hay ninguna notificación que indique que el estado del elemento ha cambiado. Sin embargo, puede determinar que el usuario ha hecho clic en el icono de estado del elemento y actuar sobre ello.
Cómo TreeView alterna el estado de la casilla
Cuando el usuario hace clic en la casilla de verificación de un elemento TreeView, se envía una NM_CLICK
notificación a la ventana primaria. Cuando se produce, el TVM_HITTEST
mensaje devuelve TVHT_ONITEMSTATEICON
. El control TreeView usa esta misma condición para alternar el estado de la casilla. Desafortunadamente, el control TreeView alterna el estado después de enviar la NM_CLICK
notificación.
Código de ejemplo para saber cuándo los usuarios hacen clic en una casilla
Puede publicar un mensaje definido por el usuario en la misma ventana que procesa la NM_CLICK
notificación y tratar este mensaje definido por el usuario como una notificación de que el estado comprobado ha cambiado. En el código de ejemplo siguiente se muestra cómo se puede realizar.
#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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de