CTreeCtrl deselect item
-
Hallo, Guten Morgen,
ja, hab gesten noch gemerkt, dass der Wert meines vermeintlich angeklickten HTREEITEMS nicht gestimmt hat und deshalb die Selektion nicht möglich war.Kann ich eigentlich die Selektion eines HTREEITEMS ganz entfernen - mit SetItemState(...) - oder muss ich einfach ein anderes Item Selektieren, wenn ich ein bestimmtes Item abwählen möchte?
danke und mfg
-
Ein Tree-Control ist vom Grundsatz her immer nur für einzelene Selelktion gebaut. D.h. ein Item zu einer Zeit.
Wen Du SelectItem(NULL) verwendest wird eine Selektion aufgehoben, SelectItem(otherItem) hebt die aktuelle Auswahl auf und setzt die neue.
Steht wie immer in der MSDN:
http://msdn.microsoft.com/en-US/library/w8hy20sy(v=VS.100).aspx
Siehe auch TVM_SELECTITEM
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773736(v=vs.85).aspx
-
Hi,
wenn ich m_treeCtrl.SelectItem(NULL) machen, schlägt ENSURE_ARG(hItem != NULL) in wincrtl2.cpp fehl.
Was kann ich da machen?
danke und mfg
-
Ich habe keinen entsprechenden Test. CTreeCtrl::SelectItem führt bei mir direkt SendMessage mit TVM_SELECTITEM aus.
Dieser Code:
ENSURE_ARG(hItem != NULL);
Kommt bei mir nur in GetItemData vor. Nicht in SelectItem.
Was machst Du denn da?
-
Morgen,
hab mir das gestern angesehen und folgendes festgestellt:
Ich reagier auf die TVN_SELCHANGED Message. Wenn ich dann m_treeCtrl.SelectItem(NULL) aufrufe, springt er wieder in die Messagehandler Methode von TVN_SELCHANGED rein und da hab ich dann das GetItemData drinnen.
jetzt mach ich folgende Prüfung und nun funktionierts:
TVHITTESTINFO* pTVHitTest=(TVHITTESTINFO*) pNMHDR;
HTREEITEM hItem=pTVHitTest->hItem;Danke für deine Hilfe - jetzt funktioniert die Selektion in meinen Bäumen
mfg rgherzog
-
Hallo,
eine Frage noch: Schaffe ich es irgendwie, in meiner OnTvnSelChanged(...) zu prüfen, ob die linke oder die rechte Maustaste gedrückt wurde?
Wenn ich das nicht in der OnTvnSelChanged(...) rausbekomme, wie schaffe ich das dann?
danke und lg. rherzog
-
GetKeyState / VK_LBUTTON / VK_RBUTTON
-
Servus Martin,
danke nochmal für deine Antwort!
GetKeyState(VK_LBUTTON) hat nicht immer eine 1 geliefert, wenn ich mit der linken Maustaste gedrückt habe - warum weiß ich nicht.
So hab ich es nun hingebracht:
SHORT leftMouseKlicked = GetAsyncKeyState(VK_LBUTTON); SHORT rightMouseKlicked = GetAsyncKeyState(VK_RBUTTON); if(leftMouseKlicked && !rightMouseKlicked) { //Hier mache ich nun was Schönes }
danke und grüße reinhart
-
GetAsnchKeyState ist in jedem Falle falsch. Du willst den Status der Taste wissen, zu dem Moment, indem Du die Nachrichrt bearbeitest. Nicht ob danach die Taste dedrückt wurde!
-
servus Martin,
SHORT leftMouseKlicked = GetKeyState(VK_LBUTTON);
hat komisches Verhalten gezeigt.
Die Variable leftMouseKlicked war nicht immer 1, obwohl ich nur mit der linken Mausstaste auf meine TreeItems im Baum geklickt habe.
Das hat so richtig zufällig ausgesehen das Verhalten - zweimal wurde die linke Maustaste registriert und dann wieder nicht usw.
grüße Reinhart
-
Dir ist klar, dass Du auf <0 testen musst?
-
servus,
leftMouseKlicked wird bei mir nie kleiner 0.
-
Das kann nicht sein...