|
JLI Spieleprogrammierung
|
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
|
Verfasst am: 27.10.2007, 16:59 Titel: WinApi - TreeView |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 28.10.2007, 01:05 Titel: |
|
|
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 |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 28.10.2007, 10:35 Titel: |
|
|
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 = ¤t_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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 28.10.2007, 15:56 Titel: |
|
|
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 |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 29.10.2007, 09:16 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 29.10.2007, 15:58 Titel: |
|
|
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
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 |
|
|
|
|
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
|