JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=8894c08a3dec4bc4160f392ff5957367Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

WinApi - TreeView

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 27.10.2007, 16:59    Titel: WinApi - TreeView Antworten mit Zitat

Hi !
Ich bin mir zwar nicht so sicher ob das hier zu dem Forum passt, aber kennt sich einer vielleicht mit der winapi so gut aus, dass er mir mal ein wenig zu dem TreeView erklären kann ?
Zwei Fragen:

1. Wenn ein TreeView eine Nachricht gesendet hat, dass ein Item angeklickt (bzw. ausgewählt) wurde, wie kann man dann feststellen welches Item das ist ? Den Items übergibt man ja leider keine IDs.

2. Ist es auch möglich einzustellen, dass mehrere Items gleichzeitig merkiert werden können ? (Sei es mit shift oder strg) Wenn ja, wie ?

Danke

mfg Matthias
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 28.10.2007, 01:05    Titel: Antworten mit Zitat

1.
CPP:
NMTREEVIEW current_selection;

case WM_NOTIFY:
   //Markierung des Treeviews geändert
   if(reinterpret_cast<LPNMHDR>(Lparam)->code==TVN_SELCHANGED)
   {
      //Neue Markierung speichern
      current_selection=*reinterpret_cast<LPNMTREEVIEW>(Lparam);
   }
   break;


2. Zu multiplen Markierungen ist mir für ein Treeview nichts bekannt. Geht glaub ich nur bei Listen.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 28.10.2007, 10:35    Titel: Antworten mit Zitat

Danke für die Hilfe.

Ich hab jetzt mal folgendes geschrieben:
CPP:
//Es wurde vorher schon getestet ob sich die Markierung geändert hat

TVITEM* item;
NMTREEVIEW current_selection;

//Neue Markierung speichern
         current_selection=*reinterpret_cast<LPNMTREEVIEW>(lparam);

// Item holen

item = &current_selection.itemNew;  // Hier bin ich mir nicht so ganz sicher

// Anzeigen, was als Namen im Item steht

MessageBox(0, item->pszText, L"Info", MB_OK);



Allerdings bekomme ich da als Antwort immer nur wirres Zeug und nicht das, was ich bei dem Erstellen des Items angegeben hab.
Wahrscheinlich bin ich hier auch auf den falschen Weg gekommen. Wie identifiziert du das Item ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 28.10.2007, 15:56    Titel: Antworten mit Zitat

MSDN hat Folgendes geschrieben:
pnmtv
Pointer to an NMTREEVIEW structure. The itemOld and itemNew members of the NMTREEVIEW structure are TVITEM structures that contain information about the previously selected item and the newly selected item. Only the mask, hItem, state, and lParam members of these structures are valid. The stateMask members of the TVITEM structures specified by itemOld and itemNew are undefined on input. The action member of the NMTREEVIEW structure indicates the type of action that caused the selection to change. It can be one of the following values:

Ich selbst verwende für das ganze eine interne Verwaltung, da das bei mir sowieso nötig wird. D.h. ein TV-Element soll bei mir sowieso mehr als nur den Titel und die paar anderen winapi-Eigenschaften enthalten, sodass ich alles immer intern in einer Liste gespeichert hab.
Eine Möglichkeit wäre die Nachricht TVM_GETITEM, mit der du die fehlenden Informationen auslesen kannst.

PS: "//Es wurde vorher schon getestet ob sich die Markierung geändert hat"
Hast du dafür WM_NOTIFY verwendet? Soweit ich weiß bekommst du nur dort den richtigen Wert für LPARAM.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 29.10.2007, 09:16    Titel: Antworten mit Zitat

Hm.

Der Name würde mir schon reichen. Nur gelingt es mir nicht einmal an diesen erfolgreich ran zu kommen. Meinst du das mit dem TVM_GETITEM irendwie so ?
CPP:
TVITEM* item;
SendDlgItemMessage(hwndTree, 0, TVM_GETITEM, TVGN_CARET,(LPARAM)item);
// Um das Item zu identifizieren wird dessen text ausgegeben
MessageBoxW(0, item->pszText, L"Info", MB_OK);


PS. Ich hab nach der WM_NOTIFY schon in ner switch getestet:
CPP:
switch(msg) {
   case WM_NOTIFY:
      ...
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.10.2007, 15:58    Titel: Antworten mit Zitat

Otscho hat Folgendes geschrieben:
Hm.

Der Name würde mir schon reichen. Nur gelingt es mir nicht einmal an diesen erfolgreich ran zu kommen. Meinst du das mit dem TVM_GETITEM irendwie so ?
CPP:
TVITEM* item;
SendDlgItemMessage(hwndTree, 0, TVM_GETITEM, TVGN_CARET,(LPARAM)item);
// Um das Item zu identifizieren wird dessen text ausgegeben
MessageBoxW(0, item->pszText, L"Info", MB_OK);

Bei sowas empfehle ich immer, auf die MSDN zurückzugreifen Wink

Ich hab grad ein Beispiel für TVM_SETITEM:
CPP:
TVITEM tmp_item;
tmp_item.hItem=_treeview::items[_treeview::displayed_info].sItem;

//Text, Bild und Bild(Markiert) soll geändert werden
tmp_item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;

tmp_item.pszText=const_cast<wchar_t*>(tmp_wcstitle.c_str());
tmp_item.cchTextMax=tmp_wcstitle.size();
tmp_item.iImage=0; tmp_item.iSelectedImage=0;

//Item ändern
SendMessage(GetDlgItem(_treeview::main_dialog,IDC_TREE),TVM_SETITEM, 0,(LPARAM)&tmp_item);

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum