Comment savoir quand l’utilisateur clique sur une zone de case activée dans un contrôle TreeView
Cet article explique comment savoir quand l’utilisateur clique sur une zone de case activée dans un contrôle TreeView.
Version d’origine du produit : Visual C++
Numéro de la base de connaissances d’origine : 261289
Résumé
Sur un contrôle TreeView avec le style TVS_CHECKBOXES , il n’y a aucune notification indiquant que l’état vérifié de l’élément a été modifié. Aucune notification n’indique également que l’état de l’élément a changé. Toutefois, vous pouvez déterminer que l’utilisateur a cliqué sur l’icône d’état de l’élément et agir sur ce point.
Comment TreeView bascule l’état de la zone case activée
Lorsque l’utilisateur clique sur la zone de case activée d’un élément TreeView, une NM_CLICK
notification est envoyée à la fenêtre parente. Lorsqu’il se produit, le TVM_HITTEST
message retourne TVHT_ONITEMSTATEICON
. Le contrôle TreeView utilise cette même condition pour activer/désactiver l’état de la zone case activée. Malheureusement, le contrôle TreeView bascule l’état après l’envoi de la NM_CLICK
notification.
Exemple de code à savoir quand les utilisateurs cliquent sur une zone de case activée
Vous pouvez publier un message défini par l’utilisateur dans la même fenêtre que celle qui traite la NM_CLICK
notification et traiter ce message défini par l’utilisateur comme une notification indiquant que l’état vérifié a changé. L’exemple de code suivant illustre la façon dont il peut être accompli.
#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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour