Come sapere quando l'utente fa clic su una casella di controllo in un controllo TreeView
Questo articolo descrive come sapere quando l'utente fa clic su una casella di controllo in un controllo TreeView.
Versione originale del prodotto: Visual C++
Numero KB originale: 261289
Riepilogo
In un controllo TreeView con lo stile TVS_CHECKBOXES non viene visualizzata alcuna notifica che indica che lo stato selezionato dell'elemento è stato modificato. Non è inoltre disponibile alcuna notifica che indica che lo stato dell'elemento è stato modificato. Tuttavia, è possibile determinare che l'utente ha fatto clic sull'icona di stato dell'elemento e agire su questo.
Come TreeView attiva o disattiva lo stato della casella di controllo
Quando l'utente fa clic sulla casella di controllo di un elemento TreeView, viene inviata una NM_CLICK
notifica alla finestra padre. Quando si verifica, il TVM_HITTEST
messaggio restituisce TVHT_ONITEMSTATEICON
. Il controllo TreeView usa questa stessa condizione per attivare o disattivare lo stato della casella di controllo. Sfortunatamente, il controllo TreeView attiva o disattiva lo stato dopo l'invio della NM_CLICK
notifica.
Codice di esempio per sapere quando gli utenti fa clic su una casella di controllo
È possibile pubblicare un messaggio definito dall'utente nella stessa finestra che sta elaborando la NM_CLICK
notifica e considerare questo messaggio definito dall'utente come una notifica che indica che lo stato selezionato è stato modificato. Il codice di esempio seguente illustra come può essere realizzato.
#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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per