Tree Menü Speichern
-
Bekomme zwar immer noch nicht ausgelesen, aber Danke schon mal dafür!!!
noch eine kleine Frage.
Wie kann ich bei den Tree Items zusätzliche Information hinterlegen, am besten als string, char oder int?
Bei SetItemData geht es nur mit DWORD_PTR.
-
Du könntest zum Beispiel eine Extra Klasse entwerfen, die diese Informationen aufnimmt und den Adressbereich dem TreeNode mit SetItemData zuweisen.
-
kan ich leider nicht machen, da muss ich dann 2 dateien anlegen
Das Treemenü wird aus einem XML File geladen, und verändert sich immerPPPPPS: Hat einer ein Beispiel für GetItem um die Icon nummer auszulesen? ich bekomm es nicht ausgelesen.
-
Hier ein kleines Beispiel:
TVITEM Item; CString szText; CString szItem; Item.hItem = GetTreeCtrl().GetSelectedItem(); Item.mask = TVIF_IMAGE | TVIF_TEXT; Item.pszText = szText.GetBuffer(100); Item.cchTextMax = 100; szText.ReleaseBuffer(); GetTreeCtrl().GetItem(&Item); szItem.Format("Item Text: %s, Item Image ID: %d",szText, Item.iImage); AfxMessageBox(szItem);
-
viel viel viel Dank!!!
Ich bastel im Moment an http://www.codeproject.com/useritems/ctreectrl_xml.asp, was auch ein super Vorschlag von dir war.
Im Moment habe ich Probleme, das ausgelesen Icon zu speichern, also dein Letzten Vorschlag hier einzubauen.void CTreeCtrlXML::Save( TiXmlNode* a_pNode ) { ASSERT( NULL != a_pNode ); TiXmlNode* pItems = a_pNode->InsertEndChild( TiXmlElement( "Items" ) ); TiXmlNode* pParent = pItems; TiXmlNode* pNewNode = NULL; HTREEITEM hItem = GetRootItem(); int iIndent = 0; int iLastIndent = 0; while( hItem ) { iIndent = GetIndentLevel( hItem ); int iDiff = iIndent - iLastIndent; if( iDiff > 0 ) { ASSERT( NULL != pNewNode ); while( iDiff-- ) pNewNode = pNewNode->InsertEndChild( TiXmlElement( "Item" ) ); ASSERT( NULL != pNewNode ); pParent = pNewNode->Parent(); } else if( iDiff < 0 ) { iDiff--; // Correct difference to get the right parent pParent = pNewNode; while( iDiff++ < 0 ) pParent = pParent->Parent(); ASSERT( NULL != pParent ); pNewNode = pParent->InsertEndChild( TiXmlElement( "Item" ) ); } else { ASSERT( NULL != pParent ); pNewNode = pParent->InsertEndChild( TiXmlElement( "Item" ) ); } iLastIndent = iIndent; // Save current item TiXmlElement* pElement = pNewNode->ToElement(); ASSERT( NULL != pElement ); pElement->SetValue( "Item" ); pElement->SetAttribute("Title",GetItemText(hItem)); // The next item, please ... hItem = GetNextItem( hItem ); } }
-
MSDN lesen...
-
Morides schrieb:
viel viel viel Dank!!!
Im Moment habe ich Probleme, das ausgelesen Icon zu speichern, also dein Letzten Vorschlag hier einzubauen.Über den Befehl GetItem bekommst du ja die Daten in die TVITEM Struktur. Anschließend musst du die Imagenummer nur noch in der XML Datei speichern.
-
Gromel schrieb:
MSDN lesen...
Habe ich schon gemacht, und google auch schon durch, es hat bis jetzt nur als ausgabe bei einem klick auf den Item Funktioniert.
ich bekomme ies aber nicht gespeichern, in den source oben.
-
Bei deinem Beispeiel wird das Icon von GetSelectedItem ausgeben, ich finde oben (CTreeCtrlXML::Save) keine möglichkeit es einzubauen, dass auch funktioniert.
-
void CTreeCtrlXML::Save( TiXmlNode* a_pNode ) { ASSERT( NULL != a_pNode ); TiXmlNode* pItems = a_pNode->InsertEndChild( TiXmlElement( "Items" ) ); TiXmlNode* pParent = pItems; TiXmlNode* pNewNode = NULL; HTREEITEM hItem = GetRootItem(); int iIndent = 0; int iLastIndent = 0; while( hItem ) { iIndent = GetIndentLevel( hItem ); int iDiff = iIndent - iLastIndent; if( iDiff > 0 ) { ASSERT( NULL != pNewNode ); while( iDiff-- ) pNewNode = pNewNode->InsertEndChild( TiXmlElement( "Item" ) ); ASSERT( NULL != pNewNode ); pParent = pNewNode->Parent(); } else if( iDiff < 0 ) { iDiff--; // Correct difference to get the right parent pParent = pNewNode; while( iDiff++ < 0 ) pParent = pParent->Parent(); ASSERT( NULL != pParent ); pNewNode = pParent->InsertEndChild( TiXmlElement( "Item" ) ); } else { ASSERT( NULL != pParent ); pNewNode = pParent->InsertEndChild( TiXmlElement( "Item" ) ); } iLastIndent = iIndent; // Save current item TiXmlElement* pElement = pNewNode->ToElement(); ASSERT( NULL != pElement ); pElement->SetValue( "Item" ); pElement->SetAttribute("Title",GetItemText(hItem)); TVITEM Item; CString szText; CString szItem; Item.hItem = hItem; Item.mask = TVIF_IMAGE; Item.pszText = szText.GetBuffer(100); Item.cchTextMax = 100; szText.ReleaseBuffer(); pElement->GetItem(&Item); pElement->SetAttribute("icon","%d") // The next item, please ... hItem = GetNextItem( hItem ); } }versuch es mal damit
-
kommt ein fehler
c:\Run\ccddf\TreeCtrlXML.cpp(149): error C2039: 'GetItem': Ist kein Element von 'TiXmlElement'
-
Morides schrieb:
kommt ein fehler
c:\Run\ccddf\TreeCtrlXML.cpp(149): error C2039: 'GetItem': Ist kein Element von 'TiXmlElement'GetItem ist ein Element von CTreeCtrl, also mach das pElement vorne mal weg.
-
Danke euch, es leuft, bin weiter am SetItemData am basteln!!!