| Autor |
Nachricht |
rgherzog
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.12.2011
Beiträge: 11
|
rgherzog Mitglied
12:11:54 07.12.2011 Titel: |
CTreeCtrl deselect item |
Zitieren |
Hallo Forums User,
habe zwei TreeCtrls. Wenn ich in der ersten TreeCtrl ein Element anklicke, möchte ich die Selektion in der zweiten aufheben.
Dies funktioniert mit folgendem Kommando aber nur augenscheinlich:
| Code: | | m_treeCtrl.SetItemState(hcurTreeItem, 0, TVIS_SELECTED); | |
| Code: | | m_treeCtrl.SetItemState(hcurTreeItem, 0, TVIS_SELECTED); | |
| Code: | | m_treeCtrl.SetItemState(hcurTreeItem, 0, TVIS_SELECTED); | |
Das Element vom zweiten Baum ist zwar nicht mehr als markiert sichtbar, kann es aber auch nicht mehr anklicken, solange ich nicht ein anderes Element im Baum angeklickt habe.
Mit welchen Befehlen kann ich Items im Baum sauber selektieren und deselektieren?
Danke und MFG Reinhart |
|
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13520
|
Martin Richter Moderator
14:51:54 07.12.2011 Titel: |
|
Zitieren |
|
 |
rgherzog
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.12.2011
Beiträge: 11
|
rgherzog Mitglied
19:30:39 09.01.2012 Titel: |
Zugriff über Membervariable |
Zitieren |
Hi,
danke für deine Antwort. Wenn ich SelectItem innerhalb einer von CtreeCtrl abgeleiteten Klasse aufrufe, funktioniert das - nur wenn ich über eine Member Variable versuche zu selektieren oder abzuwählen, dann funktioniert das nicht.
Muss ich da die CTreeCtrl invalidieren, damit die Selektion/Deselektion erfolgreich ist?
danke und mfg rgherzog |
|
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13520
|
Martin Richter Moderator
09:06:38 10.01.2012 Titel: |
|
Zitieren |
Nein! Das ist nicht nötig.
Und es spielt auch keine Rolle von wo man es aufruftm außer Du hast die eigentliche Implementierung durch eine eigene verdeckt. |
_________________ Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
|
|
 |
rgherzog
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.12.2011
Beiträge: 11
|
rgherzog Mitglied
09:32:47 10.01.2012 Titel: |
Falsches Handle |
Zitieren |
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 |
|
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13520
|
Martin Richter Moderator
14:28:53 10.01.2012 Titel: |
|
Zitieren |
|
 |
rgherzog
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.12.2011
Beiträge: 11
|
rgherzog Mitglied
23:02:10 11.01.2012 Titel: |
|
Zitieren |
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 |
|
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13520
|
Martin Richter Moderator
11:59:40 12.01.2012 Titel: |
|
Zitieren |
Ich habe keinen entsprechenden Test. CTreeCtrl::SelectItem führt bei mir direkt SendMessage mit TVM_SELECTITEM aus.
Dieser Code:
| C/C++ Code: | | ENSURE_ARG(hItem != NULL); | |
| C/C++ Code: | | ENSURE_ARG(hItem != NULL); | |
| C/C++ Code: | | ENSURE_ARG(hItem != NULL); | |
Kommt bei mir nur in GetItemData vor. Nicht in SelectItem.
Was machst Du denn da? |
_________________ Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
|
|
 |
rgherzog
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.12.2011
Beiträge: 11
|
rgherzog Mitglied
09:08:19 13.01.2012 Titel: |
|
Zitieren |
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 |
|
|
|
 |
rgherzog
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.12.2011
Beiträge: 11
|
rgherzog Mitglied
16:37:29 03.02.2012 Titel: |
rechte oder linke Maustaste |
Zitieren |
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 |
|
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13520
|
Martin Richter Moderator
21:31:50 03.02.2012 Titel: |
|
Zitieren |
|
 |
rgherzog
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.12.2011
Beiträge: 11
|
rgherzog Mitglied
15:44:46 04.02.2012 Titel: |
|
Zitieren |
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:
| Code: | SHORT leftMouseKlicked = GetAsyncKeyState(VK_LBUTTON);
SHORT rightMouseKlicked = GetAsyncKeyState(VK_RBUTTON);
if(leftMouseKlicked && !rightMouseKlicked)
{
//Hier mache ich nun was Schönes
} | |
| Code: | SHORT leftMouseKlicked = GetAsyncKeyState(VK_LBUTTON);
SHORT rightMouseKlicked = GetAsyncKeyState(VK_RBUTTON);
if(leftMouseKlicked && !rightMouseKlicked)
{
//Hier mache ich nun was Schönes
} | |
| Code: | 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 |
|
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13520
|
Martin Richter Moderator
19:31:35 04.02.2012 Titel: |
|
Zitieren |
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! |
_________________ Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
|
|
 |
rgherzog
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.12.2011
Beiträge: 11
|
rgherzog Mitglied
10:37:26 05.02.2012 Titel: |
|
Zitieren |
servus Martin,
| Code: | | SHORT leftMouseKlicked = GetKeyState(VK_LBUTTON); | |
| Code: | | SHORT leftMouseKlicked = GetKeyState(VK_LBUTTON); | |
| Code: | | 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 |
|
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13520
|
Martin Richter Moderator
09:25:02 06.02.2012 Titel: |
|
Zitieren |
|
 |
rgherzog
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.12.2011
Beiträge: 11
|
rgherzog Mitglied
10:16:36 11.02.2012 Titel: |
|
Zitieren |
servus,
leftMouseKlicked wird bei mir nie kleiner 0. |
|
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13520
|
Martin Richter Moderator
18:33:06 11.02.2012 Titel: |
|
Zitieren |
|
 |