Tree Menü Speichern
-
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!!!