listcontrol : afficher liste fichiers d'un repertoire avec détails

Signaler
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007
-
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
-
Bonjour.
Visual C++ 6.0, MFC.
J'ai créé une mfc listcontrol. Je souhaiterais y afficher les fichiers d'un repertoire spécifique dans une colonne et dans une 2ème, la date (de modification) correspondant à chacun de ces fichiers. En résumé, un mini mini explorateur windows réduit à la simple visualisation du contenu d'un répertoire bien spécifique et défini dans le code en "dur" avec les dates associées.
Si quelqu'un a un petit bout de code, ce serait sympa ou alors les fonctions à utoliser pour réaliser cela.
merci

9 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

Les fonctions à utiliser pourquoi ? ajouter les colones ? ajouter les items ? lister les fichiers ?
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

oui, créer 2 colonnes. Dans 1, y ajouter le contenu d'un répertoire donné, dans la 2ème, les dates associées.
merci
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

Pour ajouter des colones regarde InsertColumn().

Pour ajouter des items, InsertItem(). Pour ajouter/modifier le texte de tes items, SetItem().
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

merci, mais sais-tu comment faire pour ajouter le contenu entier d'un répertoire (ses fichiers) et retrouver leur date pour l'insérer dans la 2ème ?
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

Avec un CListCtrl je pense pas que ca soit possible, il faut lister les
fichier manuelement avec la class CFindFile et ajouter un item dans le
CListCtrl pour chaque fichier trouvé.
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

merci. Et ce serait possible avec un autre control ?
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

Si tu veux que les noms, c'est possible avec une listbox, on en à déja discuté dans un autre post.
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

en effet, avec un sendmessage. Ca, je l'ai fait, ça marche mais j'ai besoin des dates associées maintenant...
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
1
 


 Exemple sans MFC


 







//-----------------------------------------------------------------------------
// FILELIST.C
// Lib: comctl32.lib ou libcomctl32.a
//-----------------------------------------------------------------------------
#define _WIN32_IE 0x0400
#include <windows.h>
#include <commctrl.h> 



#define IDC_STATUS   101
#define IDC_LISTVIEW 102



#define FILEPATH  "C:\\windows\\*.*"   // Nom du dossier a modifier



HINSTANCE hInst;
HWND      hStatus;
HWND      hListview;



//-----------------------------------------------------------------------------
HWND CreateListView(HINSTANCE hInstance, HWND hParent)
{
  LV_COLUMN lvColumn;
  int       i, iWidth[] = {200, 100, 100};
  char      *szTitre[] = {"Nom", "Taille", "Date"};
  DWORD     dwStyle = LVS_REPORT|LVS_SINGLESEL|WS_CHILD|WS_BORDER|WS_VISIBLE;
  HWND      hListview = CreateWindowEx(0,       
                                       WC_LISTVIEW,           
                                       NULL,                     
                                       dwStyle,                  
                                       0, 0, 0, 0,                       
                                       hParent,               
                                       (HMENU)IDC_LISTVIEW,      
                                       hInstance,                  
                                       NULL);                   
  if(!hListview) return NULL;
 
  lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;



  for(i = 0; i < 3; i++)
  {
    lvColumn.cx      = iWidth[i];
    lvColumn.pszText = szTitre[i];    lvColumn.fmt     (i 1) ? LVCFMT_RIGHT : LVCFMT_LEFT;   
    ListView_InsertColumn(hListview, i, &lvColumn );
  }
  ListView_SetExtendedListViewStyleEx(hListview, 0, LVS_EX_GRIDLINES); 
  return hListview;
}



//-----------------------------------------------------------------------------
int ListViewAddItem(HWND hListview, char *szText, int Item, int SubItem)
{
  LV_ITEM lvi;



  if(SubItem)
  {
    lvi.mask       = LVIF_TEXT;  
    lvi.iItem      = Item;
    lvi.iSubItem   = SubItem;
    lvi.pszText    = szText;     
    lvi.cchTextMax = szText ? lstrlen(szText) : 0;
    return ListView_SetItem(hListview, &lvi);
  }
  else
  {
    lvi.mask       = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
    lvi.iItem      = Item;
    lvi.iSubItem   = 0;       
    lvi.state      = 0;
    lvi.stateMask  = 0;
    lvi.iImage     = 0;       
    lvi.pszText    = szText;     
    lvi.cchTextMax = szText ? lstrlen(szText) : 0;
    return ListView_InsertItem(hListview, &lvi);
  } 
}



//-----------------------------------------------------------------------------
void ListViewResize(HWND hListview, HWND hParent)
{
  RECT rcsb, rc;
  GetWindowRect(GetDlgItem(hParent,IDC_STATUS), &rcsb);
  GetClientRect(hParent, &rc); 
  MoveWindow(hListview,
             0, rc.top,
             rc.right - rc.left,
             (rc.bottom - (rcsb.bottom - rcsb.top)) - rc.top, TRUE);
}



//-----------------------------------------------------------------------------
void WINAPI FileList(char *filePath)
{
  WIN32_FIND_DATA fData;
  HANDLE          hfind;
  char            szBuf[64];
  INT64           fileSize;
  DWORD           numFiles = 0;
  FILETIME        ft;
  SYSTEMTIME      st;



  hfind = FindFirstFile(filePath, &fData);
  if(hfind != INVALID_HANDLE_VALUE)
  {
    ListView_DeleteAllItems(hListview);
    do
    {
      if(!(fData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
      {  //Nom de fichier
        ListViewAddItem(hListview, fData.cFileName, numFiles, 0);
        wsprintf(szBuf, " %s", fData.cFileName);
        SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)szBuf);        
        //Taille de fichier
        fileSize = (INT64)(fData.nFileSizeHigh * MAXDWORD) + fData.nFileSizeLow;
        wsprintf(szBuf, "%I64d", fileSize);
        ListViewAddItem(hListview, szBuf, numFiles, 1);
        //Date de modification
        FileTimeToLocalFileTime(&(fData.ftLastWriteTime), &ft);
        FileTimeToSystemTime(&ft, &st);
        wsprintf(szBuf, "%02d/%02d/%4d %02d:%02d",
        st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute);
        ListViewAddItem(hListview, szBuf, numFiles, 2);
       
        numFiles++;
      }
    }
    while (FindNextFile(hfind, &fData));
    FindClose(hfind);
  }
  wsprintf(szBuf, " Nombre de fichier(s): %d  [%s]", numFiles, filePath);
  SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)szBuf); 
}



//-----------------------------------------------------------------------------
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  switch(uMsg)
  {
    case WM_CREATE:
      hListview = CreateListView(hInst, hWnd);      
      hStatus = CreateStatusWindow(WS_CHILD|WS_VISIBLE, NULL, hWnd, IDC_STATUS);   
      CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)FileList, FILEPATH, 0, NULL);
      return 0;



    case WM_SIZE:
      ListViewResize(hListview, hWnd);   
      SendMessage(hStatus, WM_SIZE, 0, 0);
      return 0;



    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
  }
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
}



//-----------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInst,
                   LPSTR     lpCmdLine,
                   int       nCmdShow)
{
  MSG                  msg;
  HWND                 hWnd;
  WNDCLASSEX           wcex; 
  INITCOMMONCONTROLSEX iccex;
  char szClassName[] = "FileList";



  iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
  iccex.dwICC  = ICC_LISTVIEW_CLASSES|ICC_BAR_CLASSES;
 
  if(!InitCommonControlsEx(&iccex)) return 0;
 
  wcex.cbSize        = sizeof(WNDCLASSEX);
  wcex.style         = CS_HREDRAW|CS_VREDRAW;;
  wcex.lpfnWndProc   = (WNDPROC)MainWndProc;  wcex.cbClsExtra    wcex.cbWndExtra 0;  wcex.hInstance     hInst hInstance;
  wcex.hCursor       = LoadCursor(NULL, IDC_ARROW);
  wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  wcex.lpszClassName = szClassName;    wcex.hIcon         wcex.hIconSm NULL;
  wcex.lpszMenuName  = NULL; 



  if(!RegisterClassEx(&wcex)) return 0;
 
  hWnd = CreateWindowEx(0, szClassName, szClassName,
                        WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
                        CW_USEDEFAULT, CW_USEDEFAULT,
                        CW_USEDEFAULT, CW_USEDEFAULT,
                        NULL, NULL, hInstance, NULL);
  if(!hWnd) return 0;
 
  ShowWindow(hWnd, nCmdShow);
  UpdateWindow(hWnd);



  while(GetMessage(&msg, NULL, 0, 0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return msg.wParam;
}