Pfad im CTreeCtrl expandiert anzeigen
-
Ersetze
for( LPCTSTR pszPos = _tcschr( pszTemp, _T('\\'); pszPos; pszPos = _tcschr( pszStart, _T('\\'))
durch
for( LPTSTR pszPos = _tcschr( pszTemp, _T('\\'); pszPos; pszPos = _tcschr( pszStart, _T('\\'))
-
Oder noch besser:
bool ExpandPath( CTreeCtrl& tree, HTREEITEM htiParent, LPTSTR pszPath) { LPTSTR pszTemp = _tcsdup( pszPath); // kann weggelassen werden, wenn Änderung von pszPath nicht stört LPCTSTR pszStart = pszTemp; LPTSTR pszPos; while( pszPos = _tcschr( pszStart, _T('\\')) { *pszPos = _T('\0'); bool bFound = false; for( HTREEITEM htiChild = tree.GetChildItem( htiParent); htiChild; htiChild = tree.GetNextSiblingItem( htiChild)) if( tree.GetItemText( htiChild) == pszStart) { tree.Expand( htiChild, TVE_EXPAND); htiParent = htiChild; bFound = true; break; } if( !bFound) break; pszStart = pszPos + 1; } free( pszTemp); // siehe Kommentar zu pszTemp return pszPos == NULL; }
[ Dieser Beitrag wurde am 10.01.2003 um 11:17 Uhr von RenéG editiert. ]
-
Habe es jetzt noch nicht ausprobiert.
Muß man eigentlich viel umstellen, wenn man dvon ausgeht, daß das Laufwerk nicht extrahiert wurde und auch das Luafwerk nicht expandiert ist?
Eine kleine Anmerkung zu Deinem Code habe ich aber, Du vergißt gerne Klammern.
Diese Kritik ist nicht böse gemeint.Cu
Oli
-
Um die Funktion ExpandPath nun visuell zu optimieren, solltest Du vor dem Aufruf
tree.SetRedraw( FALSE); und danach tree.SetRedraw( TRUE) aufrufen.
-
Eine kleine Anmerkung zu Deinem Code habe ich aber, Du vergißt gerne Klammern.
Wo denn? *dummfrag*
-
Deine For-Schleife
for( LPTSTR pszPos = _tcschr( pszTemp, _T('\\'); pszPos; pszPos = _tcschr( pszStart, _T('\\'))
Meine for-Schleife
for( LPTSTR pszPos = _tcschr( pszTemp, _T('\\')); pszPos; pszPos = _tcschr( pszStart, _T('\\')))
-
Muß man eigentlich viel umstellen, wenn man dvon ausgeht, daß das Laufwerk nicht extrahiert wurde und auch das Luafwerk nicht expandiert ist?
Nein, wahrscheinlich nicht. Dann kannst Du den Parameter htiParent weglassen, und dafür TVI_ROOT setzen.
-
Ich schreib halt nicht gern Code in dieses Edit-Feld
-
Mal eine persönlich Frage, Wie lange brauch man um so gut zu sein wie Du?
Habe die Funktion jetzt mal geteste. Es passiert leider nichts.
Cu
Oli
-
Der Code der inder for-Schleife steht, wird nicht einmal ausgeführt
for(HTREEITEM htiChild = tree.GetChildItem( TVI_ROOT ); htiChild; htiChild = tree.GetNextSiblingItem( htiChild)) if( tree.GetItemText( htiChild) == pszStart) { tree.Expand( htiChild, TVE_EXPAND); bFound = true; break; }
Ist dort irgend ein Fehler?
Cu
Oli
-
Mal eine persönlich Frage, Wie lange brauch man um so gut zu sein wie Du?
Weiss net, hab nebenbei noch was anderes zutun
Der Code der inder for-Schleife steht, wird nicht einmal ausgeführt
Naja, anpassen an die Struktur Deines TreeCtrls musst Du es schon noch! Möglicherweise mal bissel debuggen!
-
Könnest Du mir trotsdem die Bedingung der While - Schleife kurz erklären?
while( pszPos == _tcschr( pszStart, _T('\\')))
In meinem Pfad steht z.B. "C:\\Temp"
Beim debuggen ist mir aufgefallen, das die while-Schleife nie durchlaufen wird.
Cu
Oli[ Dieser Beitrag wurde am 10.01.2003 um 12:22 Uhr von Oli_1977 editiert. ]
-
Könnest Du mir trotsdem die Bedingung der While - Schleife kurz erklären?
while( pszPos == _tcschr( pszStart, _T('\')))
Soviel ich mich erinnere, habe ich
while( pszPos = _tcschr( pszStart, _T('\')))
geschrieben !!!
Siehst Du den Unterschied?
-
Da hst Du wieder erstmal recht.
Jetzt bleibt er bloß noch an der if-Schleife hängen. Die wird nie erfüllt.
Weil in Start \\Temp drin steht und mein Pfad aber C:\\Temp heißt.
Cu
Oli
-
Als 1. steht in pszStart "C:" drin, danach steht Temp drin, weiss net, was Du noch falsch abgeschrieben hast.
-
Morgen.
Also, meine Funktion sieht so aus:
bool CDateiWaehlen::ExpandPath(CTreeCtrl& tree, CString pszPath) { LPCTSTR pszStart = pszPath; LPTSTR pszPos; while( pszPos = _tcschr( pszStart, _T('\\'))) { *pszPos = _T('\0'); bool bFound = false; for(HTREEITEM htiChild = tree.GetChildItem( TVI_ROOT ); htiChild; htiChild = tree.GetNextSiblingItem( htiChild)) if( tree.GetItemText( htiChild) == pszStart) { tree.Expand( htiChild, TVE_EXPAND); bFound = true; break; } if( !bFound) break; pszStart = pszPos + 1; } return pszPos == NULL; }
Bei der Übergabe ist pszPath = "C:\\Temp" und
tree = m_Baumstruktur //Variable meine CTreeCtrlDürft eigentlich nichts weiter falsch sein.
Cu
Oli
-
Der Übergabeparameter pszStart sollte C:\\Temp\\ sein, so weiss die Funktion, dass Temp ein Verzeichnis ist !
-
Ich habe den Pfad jetzt so geändert, wie Du es vorgeschlagen hast.
Zudem habe ich in die For-Schleife noch eine MessageBox mit eingefügt um mir immer den Item-Text anzeigen zu lassen.for(HTREEITEM htiChild = tree.GetChildItem( TVI_ROOT ); htiChild; htiChild = tree.GetNextSiblingItem( htiChild)) { MessageBox(tree.GetItemText(htiChild)); if( tree.GetItemText( htiChild) == pszStart) { tree.Expand( htiChild, TVE_EXPAND); bFound = true; break; } }
Die MessageBox kommt nur einaml mit C:\
Also es funktioniert nicht.
Cu
Oli