tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
738
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Thopeto Thopeto ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    227
    Hallo Hallo

    Ich habe eien TreeCTrl, der mit die Ordner von der Festplatte zurück gibt, und der Inhalt der Ordner soll in der Listbox wiedergegeben werden.

    kann mir jmd sagen, wo mein fehler liegt?!

    PHP-Code:
    BEGIN_MESSAGE_MAP(CDlgBarExplorerCDialog)
        
    //{{AFX_MSG_MAP(CDlgBarExplorer)
        
    ON_NOTIFY(TVN_SELCHANGEDIDC_EXPLORER_TREEOnSelchangedExplorerTree)
        
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////
    // Behandlungsroutinen für Nachrichten CDlgBarExplorer 

    BOOL CDlgBarExplorer::OnInitDialog() 
    {
        
    CDialog::OnInitDialog();

        
    TCHAR  szWorkDir[MAX_PATH];
        
    _getcwd(szWorkDir256);
        
        if(!
    m_ctrlTree.m_hWnd)
        {
            if (
    m_ctrlTree.SubclassDlgItem(IDC_EXPLORER_TREEthis))
            {            
                
    m_ctrlTree.DisplayTree(NULLFALSE);
                

                
    m_ctrlTree.SetSelPath(szWorkDir);
            }
        }
        
        
    InitListDir(szWorkDir);
        
        return 
    TRUE;  // return TRUE unless you set the focus to a control
                      // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
    }

    void CDlgBarExplorer::InitListDir(CString strPathName)
    {
        
    LV_COLUMN column;

        
    column.mask LVCF_FMT LVCF_SUBITEM LVCF_TEXT LVCF_WIDTH;
        
    column.fmt LVCFMT_LEFT;
        
    column.cx 100;
        
    column.pszText "Name";
        
    column.iSubItem 0;
        
    m_ctrlList.InsertColumn(0, &column);
        
    column.cx 50;
        
    column.pszText "Datum";
        
    column.iSubItem 1;
        
    m_ctrlList.InsertColumn(1, &column);
    }

    void CDlgBarExplorer::ChangeListDir(CString strPathName)
    {
        
    int iItemiActualItem;
        
    char buf[256];
        
    LV_ITEM item;
        
    HANDLE handle;
        
    WIN32_FIND_DATA fd;

        
    iItem 0;
        
    item.iImage 0;

        
    CString strSearchSpec strPathName "*.*";

        
    handle = ::FindFirstFile((LPCTSTR)strSearchSpec, &fd);

        do
        {
            if(
    fd.dwFileAttributes FILE_ATTRIBUTE_ARCHIVE)
            {
                
    CString strFilename = (LPSTR)&fd.cFileName;
                if((
    strFilename != ".") && (strFilename !=".."))
                {
                    
    item.mask LVIF_TEXT LVIF_IMAGE;
                    
    item.iSubItem 0;
                    
    item.iItem iItem++;
                    
    item.pszText = (LPSTR)&fd.cFileName;
                    
    iActualItem m_ctrlList.InsertItem(&item);
                    
    CTime cTime(*(&fd.ftCreationTime));
                    
    CString strTime cTime.Format("%d.%m.%y");
                    
    sprintf(buf,"%s",strTime);
                    
    item.pszText buf;
                    
    item.mask LVIF_TEXT;
                    
    item.iItem iActualItem;
                    
    item.iSubItem 1;
                    
    m_ctrlList.SetItem(&item);
                }
            }
        }
        while(::
    FindNextFile(handle,&fd));
        ::
    FindClose(handle);
    }

    void CDlgBarExplorer::OnSelchangedExplorerTree(NMHDRpNMHDRLRESULTpResult
    {
        
    NM_TREEVIEWpNMTreeView = (NM_TREEVIEW*)pNMHDR;

        
    ChangeListDir(m_ctrlTree.GetFullPath(pNMTreeView->itemNew.hItem));

        
    UpdateDataFALSE );
        *
    pResult 0;

    er öffnet die liste der dateien in der Listbox entweder sporatisch oder zu 90% zeigt er sie gar nicht erst an
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Habs nicht weiter nachverfolgt, aber

    CString strFilename = (LPSTR)&fd.cFileName;

    sollte eher

    CString strFilename = (LPSTR)fd.cFileName;

    (ohne &) sein.
     

  3. #3
    Thopeto Thopeto ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    227
    ja gut und wie weiter?! wo liegt mein fehler?!
     

  4. #4
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Ausserdem haben nicht alle Files das Archive-Attribut gesetzt. Prüfe einfach, ob NICHT das Directory-Attribut gesetzt ist und du hast alle Dateien.
     

  5. #5
    Thopeto Thopeto ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    227
    klasse, aber jetzt zeigt er mir das ganze wie eine history an, wenn ich auf nen ordner klicke, zeigt er mir dann in der listbox den ordner name an, aber nicht die dateien die drin sind, und so geht das weiter. bloss wird dann die liste mit den neuen ordner namen ergänzt, ohne den vorherigen inhalt zu löschen....

    ich dreh durch, ich find meine fehler nicht und in meinen büchern find ich auch nichts
     

  6. #6
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Zitat Zitat von Thopeto
    klasse, aber jetzt zeigt er mir das ganze wie eine history an, wenn ich auf nen ordner klicke, zeigt er mir dann in der listbox den ordner name an, aber nicht die dateien die drin sind, und so geht das weiter. bloss wird dann die liste mit den neuen ordner namen ergänzt, ohne den vorherigen inhalt zu löschen....

    ich dreh durch, ich find meine fehler nicht und in meinen büchern find ich auch nichts
    Du musst mal an deiner Suchtechnik arbeiten und eventuell auch mal in der MSDN nachsehen; da ist schliesslich alles erklärt.
    http://msdn.microsoft.com/library/de...s_CListbox.asp

    Wenn du es in Deutsch haben willst, musst du auf deiner Festplatte nachsehen. Jedenfalls hat CListbox unter anderem auch Methoden, um alle Listeneinträge zu löschen. ResetContent! Presto! Dawai!
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  7. #7
    Registriert seit
    Apr 2004
    Ort
    Zürich
    Beiträge
    121
    HI!
    Ich hätt da ein paar Fragen. Ich möchte genau das Gleiche machen wie du.
    Aber wie hast du dem Tree Control gesagt er soll zu Anfang die Drives / Ordner anzeigen?
    Weiter: Hast du es nun geschafft, dass die Listbox nur die Files anzeigt im Ordner?

    gruss ana
     
    Flash an die Macht!

  8. #8
    Thopeto Thopeto ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    227
    ja habs geschafft und zwar so:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    
     void CDlgBarExplorer::ChangeListDir(CString strPathName)
     {
        int iItem, iActualItem;
        char buf[256];
        LV_ITEM item;
        HANDLE handle;
        WIN32_FIND_DATA fd;
     
        iItem = 0;
        item.iImage = 0;
     
        m_ctrlList.DeleteAllItems();
     
        CString strSearchSpec = strPathName + "//*.*";
     
        handle = FindFirstFile(strSearchSpec, &fd); 
        if (handle == INVALID_HANDLE_VALUE)
                return;
     
        do
        {
            if(!(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
            {
                    item.mask = LVIF_TEXT | LVIF_IMAGE;
                    item.iSubItem = 0;
                    item.iItem = iItem++;
                    item.pszText = (LPSTR)&fd.cFileName;
                    iActualItem = m_ctrlList.InsertItem(&item);
                    CTime cTime(*(&fd.ftCreationTime));
                    CString strTime = cTime.Format("%d.%m.%y");
                    sprintf(buf,"%s",strTime);
                    item.pszText = buf;
                    item.mask = LVIF_TEXT;
                    item.iItem = iActualItem;
                    item.iSubItem = 1;
                    m_ctrlList.SetItem(&item);
     
                    SetRedraw();
                    InvalidateRect(NULL);
            }
     
        }
        while(::FindNextFile(handle,&fd));
        ::FindClose(handle);
     
        SetRedraw();
        InvalidateRect(NULL);
     }

    das wegen dem Tree, ich glaub das würd hier nicht reinpassen, da meine Tree Klasse zu stark an mein Programm gebunden ist
     

  9. #9
    Registriert seit
    Apr 2004
    Ort
    Zürich
    Beiträge
    121
    Danke.
    Hat denn keiner eine Ahnung wie ich die Drives im Tree anzeige?
    Ich weiss das man mit:
    Code :
    1
    
    m_MFC_Tree.InsertItem("ItemText",TVI_ROOT);
    ein Item dem Tree hinzufügen kann,aber ich weiss ja nicht was alles im C rumliegt da kann ich doch das nicht manuell schreiben

    Gibt es keine Funktion wie tree.showItems("My Computer") oder sowas ähnliches?
    Ich meine der Explorer müsste doch auch so eine haben?!
     
    Flash an die Macht!

  10. #10
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Zitat Zitat von astaluego
    Danke.
    Hat denn keiner eine Ahnung wie ich die Drives im Tree anzeige?
    Ich weiss das man mit:
    Code :
    1
    
    m_MFC_Tree.InsertItem("ItemText",TVI_ROOT);
    ein Item dem Tree hinzufügen kann,aber ich weiss ja nicht was alles im C rumliegt da kann ich doch das nicht manuell schreiben

    Gibt es keine Funktion wie tree.showItems("My Computer") oder sowas ähnliches?
    Ich meine der Explorer müsste doch auch so eine haben?!
    Vielleicht liest du dir den Thread einfach mal genauer durch.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  11. #11
    Thopeto Thopeto ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    227
     

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 01.02.09, 14:22
  2. Antworten: 7
    Letzter Beitrag: 19.03.08, 05:56
  3. Antworten: 1
    Letzter Beitrag: 22.02.08, 13:31
  4. Antworten: 1
    Letzter Beitrag: 08.03.06, 16:41
  5. Funktion gibt Array nicht mehr zurück
    Von Lark im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 07.09.05, 16:57