Gewusst wie, wenn der Benutzer in einem TreeView-Steuerelement auf ein Kontrollkästchen klickt
In diesem Artikel wird beschrieben, wie Sie wissen, wann der Benutzer in einem TreeView-Steuerelement auf ein Kontrollkästchen klickt.
Ursprüngliche Produktversion: Visual C++
Ursprüngliche KB-Nummer: 261289
Zusammenfassung
In einem TreeView-Steuerelement mit der TVS_CHECKBOXES-Formatvorlage gibt es keine Benachrichtigung, dass der aktivierte Zustand des Elements geändert wurde. Es gibt auch keine Benachrichtigung, die angibt, dass sich der Status des Elements geändert hat. Sie können jedoch feststellen, dass der Benutzer auf das Statussymbol des Elements geklickt hat, und darauf reagieren.
So schaltet TreeView den Zustand des Kontrollkästchens um
Wenn der Benutzer auf das Kontrollkästchen eines TreeView-Elements klickt, wird eine NM_CLICK
Benachrichtigung an das übergeordnete Fenster gesendet. Wenn sie auftritt, gibt die TVM_HITTEST
Meldung zurück TVHT_ONITEMSTATEICON
. Das TreeView-Steuerelement verwendet dieselbe Bedingung, um den Zustand des Kontrollkästchens umzuschalten. Leider schaltet das TreeView-Steuerelement den Zustand um, nachdem die NM_CLICK
Benachrichtigung gesendet wurde.
Beispielcode, um zu wissen, wann Benutzer auf ein Kontrollkästchen klicken
Sie können eine benutzerdefinierte Nachricht im selben Fenster posten, in dem die NM_CLICK
Benachrichtigung verarbeitet wird, und diese benutzerdefinierte Nachricht als Benachrichtigung behandeln, dass sich der aktivierte Zustand geändert hat. Der folgende Beispielcode veranschaulicht, wie dies erreicht werden kann.
#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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für