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

bougnat83 Messages postés 34 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 3 janvier 2007 - 19 août 2006 à 18:59
cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011 - 22 août 2006 à 11:25
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

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
20 août 2006 à 19:18
Salut,

Les fonctions à utiliser pourquoi ? ajouter les colones ? ajouter les items ? lister les fichiers ?
0
bougnat83 Messages postés 34 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 3 janvier 2007
20 août 2006 à 20:33
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
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
20 août 2006 à 20:40
Salut,

Pour ajouter des colones regarde InsertColumn().

Pour ajouter des items, InsertItem(). Pour ajouter/modifier le texte de tes items, SetItem().
0
bougnat83 Messages postés 34 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 3 janvier 2007
20 août 2006 à 20:42
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
20 août 2006 à 20:59
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é.
0
bougnat83 Messages postés 34 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 3 janvier 2007
20 août 2006 à 21:12
merci. Et ce serait possible avec un autre control ?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
20 août 2006 à 21:21
Salut,

Si tu veux que les noms, c'est possible avec une listbox, on en à déja discuté dans un autre post.
0
bougnat83 Messages postés 34 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 3 janvier 2007
20 août 2006 à 21:27
en effet, avec un sendmessage. Ca, je l'ai fait, ça marche mais j'ai besoin des dates associées maintenant...
0
cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011 1
22 août 2006 à 11:25
 


 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;
}




 
0
Rejoignez-nous