E
hier bin ich wieder!
ich verwende jetzt folgenden code:
void ClistctrlDlg::RefreshListe(void)
{
if(m_tree.m_hWnd)
{
HTREEITEM hCurrent = m_tree.GetNextItem(TVI_ROOT, TVGN_NEXT);
while (hCurrent != NULL)
{
// Get the text for the item. Notice we use TVIF_TEXT because
// we want to retrieve only the text, but also specify TVIF_HANDLE
// because we're getting the item by its handle.
TVITEM item;
TCHAR szText[1024];
item.hItem = hCurrent;
item.mask = TVIF_TEXT | TVIF_HANDLE;
item.pszText = szText;
item.cchTextMax = 1024;
BOOL bWorked = m_tree.GetItem(&item);
// Try to get the next item
hCurrent = m_tree.GetNextItem(hCurrent, TVGN_NEXT);
m_tree.DeleteItem(item.hItem);
}
for(int i=0; i<m_liste.GetSize(); i++)
m_tree.InsertItem(m_liste[i]);
}
}
der debugger hält allerdings mit einer fehlermeldung, wo das erste mal GetNextItem ausgeführt wird.
Den Code habe ich fast 1 zu 1 aus der MSDN (CTreeCtrl::DeleteItem), da ich meinem eigenem Code, der das selbe tat nicht traute. Wie sich jetzt zeigt, wohl zu unrecht, da der MSDN eigene Code auch Fehler erzeugt
Hier die Debugger Meldung:
Eine Ausnahme (erste Chance) bei 0x780d0790 in listctrl.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xffff0004.
Unbehandelte Ausnahme bei 0x780d0790 in listctrl.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xffff0004.
Hier hab ich nochmal ein Beispiel Projekt, dass nichts anderes tut, als den Fehler zu erzeugen!
http://www.fheinemann.de/Downloads/listctrl.zip (Visual C++.Net)
Übrigens: Zusammenhänge zu dem anderen Posting, dass ich in den letzten Tagen gemacht habe sind nicht zufällig
**
EDIT: Der Fehler wird noch lustiger, wenn man in der Funktion statt der Lösch-Schleife
m_tree.DeleteAllItems();
for(int i=0; i<m_liste.GetSize(); i++)
m_tree.InsertItem(m_liste[i]);
setzt!** Dann zeigt er nämlich keine Daten mehr an!!!
Außer, wenn man die oben beschriebene Lösung nutzt:
m_tree.SetRedraw(FALSE);
m_tree.DeleteAllItems();
for(int i=0; i<m_liste.GetSize(); i++)
{
CString a = m_liste[i];
m_tree.InsertItem(a);
}
m_tree.SetRedraw(TRUE);
Ich hab langsam das Gefühl ich bin zu blöde für die Welt - oder der VS C++.NET Compiler hat einen sehr großen Bug (auch, wenn ich das nicht wirklich glaube)
Ich nutze übrigens nicht die neue VS C++.NET 2003 Version sondern noch die "alte" .NET Version.
Und der Fehler tritt sowohl in meiner Firma auf als auch bei mir zu Hause auf...