Scanner un répertoire et afficher les fichiers dans une liste box

Scanner un répertoire et afficher les fichiers dans une liste box - C++ - Programmation

Marsh Posté le 14-08-2005 à 21:08:33    

Salut à tous ,
 
je travaille en ce moment sous un projet MFC et pour le programme que j'effectue, j'ai besoin de faire la chose suivante :
 
- il faut que je scanne un répertoire donné pour récupérer les fichiers qu'il y'a dedans pour les afficher ensuite dans une liste box.
 
Pour aller chercher le repertoire pas de soucis : j'ai écrit ceci :
 
PathDialog.h
 
#if !defined(AFX_PATHDIALOG_H__0F70BC86_11DB_11D4_B012_0000E8DD8DAA__INCLUDED_)
#define AFX_PATHDIALOG_H__0F70BC86_11DB_11D4_B012_0000E8DD8DAA__INCLUDED_
 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// PathDialog.h : header file
//
#include "shlobj.h"
 
#pragma warning(disable : 4996)
#pragma warning(disable : 4267)
 
 
class CPathDialog;
 
// CPathDialogSub - intercepts messages from child controls
class CPathDialogSub : public CWnd
{
 friend CPathDialog;
public:
 CPathDialog* m_pPathDialog;
protected:
    afx_msg void OnOK();              // OK button clicked
 afx_msg void OnChangeEditPath();
    DECLARE_MESSAGE_MAP()
private:
};
 
/////////////////////////////////////////////////////////////////////////////
// CPathDialog dialog
 
class CPathDialog
{
 friend CPathDialogSub;
// Construction
public:
 CPathDialog(LPCTSTR lpszCaption=NULL,
  LPCTSTR lpszTitle=NULL,
  LPCTSTR lpszInitialPath=NULL,  
  CWnd* pParent = NULL);
 
 CString GetPathName();
 virtual int DoModal();
 
 static int Touch(LPCTSTR lpPath, BOOL bValidate=TRUE);
 static int MakeSurePathExists(LPCTSTR lpPath);
 static BOOL IsFileNameValid(LPCTSTR lpFileName);
 static int ConcatPath(LPTSTR lpRoot, LPCTSTR lpMorePath);
 
private:
 static int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam, LPARAM pData);
 
 LPCTSTR m_lpszCaption;
 LPCTSTR m_lpszInitialPath;
 
 TCHAR m_szPathName[MAX_PATH];
 
 BROWSEINFO m_bi;
 HWND m_hWnd;
 CWnd* m_pParentWnd;
 BOOL m_bParentDisabled;
 BOOL m_bGetSuccess;
 
 CPathDialogSub m_PathDialogSub;
 
};
 
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
 
#endif // !defined(AFX_PATHDIALOG_H__0F70BC86_11DB_11D4_B012_0000E8DD8DAA__INCLUDED_)
 
 
PathDialog.cpp
#include "stdafx.h"
#include "PathDialog.h"
#include <io.h>
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
#define IDC_FOLDERTREE  0x3741
#define IDC_TITLE   0x3742
#define IDC_STATUSTEXT  0x3743
 
#define IDC_NEW_EDIT_PATH 0x3744
 
// Class CDlgWnd
BEGIN_MESSAGE_MAP(CPathDialogSub, CWnd)
        ON_BN_CLICKED(IDOK, OnOK)
  ON_EN_CHANGE(IDC_NEW_EDIT_PATH, OnChangeEditPath)
END_MESSAGE_MAP()
 
void CPathDialogSub::OnOK()
{
 ::GetWindowText(::GetDlgItem(m_hWnd, IDC_NEW_EDIT_PATH),
  m_pPathDialog->m_szPathName, MAX_PATH);
 
 if(CPathDialog::MakeSurePathExists(m_pPathDialog->m_szPathName)==0)
 {
  m_pPathDialog->m_bGetSuccess=TRUE;
  ::EndDialog(m_pPathDialog->m_hWnd, IDOK);
 }
 else
 {
  ::SetFocus(::GetDlgItem(m_hWnd, IDC_NEW_EDIT_PATH));
 }
}
 
void CPathDialogSub::OnChangeEditPath()
{
 ::GetWindowText(::GetDlgItem(m_hWnd, IDC_NEW_EDIT_PATH),
  m_pPathDialog->m_szPathName, MAX_PATH);
 BOOL bEnableOKButton = (_tcslen(m_pPathDialog->m_szPathName)>0);
 SendMessage(BFFM_ENABLEOK, 0, bEnableOKButton);
}
/////////////////////////////////////////////////////////////////////////////
// CPathDialog dialog
 
 
CPathDialog::CPathDialog(LPCTSTR lpszCaption,  
       LPCTSTR lpszTitle,  
       LPCTSTR lpszInitialPath,  
       CWnd* pParent)
{
 m_hWnd=NULL;
 m_PathDialogSub.m_pPathDialog= this;
    m_bParentDisabled = FALSE;
 
    // Get the true parent of the dialog
    m_pParentWnd = CWnd::GetSafeOwner(pParent);
 
 m_lpszCaption = lpszCaption;
 m_lpszInitialPath = lpszInitialPath;
 
 memset(&m_bi, 0, sizeof(BROWSEINFO) );
 m_bi.hwndOwner = (m_pParentWnd==NULL)?NULL:m_pParentWnd->GetSafeHwnd();
 m_bi.pszDisplayName = 0;
 m_bi.pidlRoot = 0;
 m_bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
 m_bi.lpfn = BrowseCallbackProc;
 m_bi.lpszTitle = lpszTitle;
}
 
 
/////////////////////////////////////////////////////////////////////////////
// CPathDialog message handlers
 
CString CPathDialog::GetPathName()
{
 return CString(m_szPathName);
}
 
int CALLBACK CPathDialog::BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam, LPARAM pData)  
{
 CPathDialog* pDlg = (CPathDialog*)pData;
 
 switch(uMsg)  
 {
 case BFFM_INITIALIZED:  
  {
   RECT rc;
   HWND hEdit;
   HFONT hFont;
 
   pDlg->m_hWnd = hwnd;
 
   if(pDlg->m_lpszCaption!=NULL)
   {
    ::SetWindowText(hwnd, pDlg->m_lpszCaption);
   }
 
   VERIFY(pDlg->m_PathDialogSub.SubclassWindow(hwnd));
   ::ShowWindow(::GetDlgItem(hwnd, IDC_STATUSTEXT), SW_HIDE);
   ::GetWindowRect(::GetDlgItem(hwnd, IDC_FOLDERTREE), &rc);
   rc.bottom = rc.top - 4;
   rc.top = rc.bottom - 23;
   ::ScreenToClient(hwnd, (LPPOINT)&rc);
   ::ScreenToClient(hwnd, ((LPPOINT)&rc)+1);
   hEdit = ::CreateWindowEx(WS_EX_CLIENTEDGE, _T("EDIT" ), _T("" ),
    WS_CHILD|WS_TABSTOP|WS_VISIBLE|ES_AUTOHSCROLL,
    rc.left, rc.top,  
    rc.right-rc.left, rc.bottom-rc.top,  
    hwnd, NULL, NULL, NULL);
   ::SetWindowLong(hEdit, GWL_ID, IDC_NEW_EDIT_PATH);
   ::ShowWindow(hEdit, SW_SHOW);
 
   hFont = (HFONT)::SendMessage(hwnd, WM_GETFONT, 0, 0);
   ::SendMessage(hEdit, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
 
   LPCTSTR lpszPath = pDlg->m_lpszInitialPath;
   TCHAR szTemp[MAX_PATH];
   if(lpszPath==NULL)
   {
    ::GetCurrentDirectory(MAX_PATH, szTemp );
    lpszPath = szTemp;
   }
   // WParam is TRUE since you are passing a path.
   // It would be FALSE if you were passing a pidl.
   ::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,
    (LPARAM)lpszPath);
   break;
  }
 case BFFM_SELCHANGED:
  {
   char szSelection[MAX_PATH];
   if(!::SHGetPathFromIDList((LPITEMIDLIST)lParam, szSelection) ||
    szSelection[1]!=':')
   {
    szSelection[0] = '\0';
    ::SendMessage(hwnd, BFFM_ENABLEOK, 0, FALSE);
   }
   else
   {
    ::SendMessage(hwnd, BFFM_ENABLEOK, 0, TRUE);
   }
   ::SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szSelection);
   ::SetWindowText(::GetDlgItem(hwnd, IDC_NEW_EDIT_PATH), szSelection);
   break;
  }
 default:
  break;
 }
 return 0;
}
 
 
 
int CPathDialog::DoModal()  
{
 
 /////////////////////////////////////////////////////////
 TCHAR szPathTemp[MAX_PATH];
    m_bi.lpfn = BrowseCallbackProc;  // address of callback function
    m_bi.lParam = (LPARAM)this;      // pass address of object to callback function
 m_bi.pszDisplayName = szPathTemp;
 
 LPITEMIDLIST pidl;
 LPMALLOC pMalloc;
 
 int iResult=-1;
 if(SUCCEEDED(SHGetMalloc(&pMalloc)))
 {
//  if((m_pParentWnd!=NULL) && m_pParentWnd->IsWindowEnabled())
//  {
//    m_pParentWnd->EnableWindow(FALSE);
//    m_bParentDisabled = TRUE;
//  }
  m_bGetSuccess = FALSE;
  pidl = SHBrowseForFolder(&m_bi);
  if (pidl!=NULL)  
  {
   //not need do this because OnOK function did
   //bSucceeded = SHGetPathFromIDList(pidl, m_szPathName);
   // In C++:  
   pMalloc->Free(pidl);
   //In C:
   //pMalloc->lpVtbl->Free(pMalloc,pidl);
   //pMalloc->lpVtbl->Release(pMalloc);
  }
  if(m_bGetSuccess)
  {
   iResult = IDOK;
  }
  pMalloc->Release();
 }
 
    if(m_bParentDisabled && (m_pParentWnd!=NULL))
 {
  m_pParentWnd->EnableWindow(TRUE);
 }
    m_bParentDisabled=FALSE;
 
 return iResult;
}
 
BOOL CPathDialog::IsFileNameValid(LPCTSTR lpFileName)
{
 if(lpFileName==NULL)
 {
  return FALSE;
 }
 
 int nLen = _tcslen(lpFileName);
 if(nLen<=0)
 {
  return FALSE;
 }
 
 //check first char
 switch(lpFileName[0])
 {
 case _T('.'):
 case _T(' '):
 case _T('\t'):
  return FALSE;
 }
 
 //check last char
 switch(lpFileName[nLen-1])
 {
 case _T('.'):
 case _T(' '):
 case _T('\t'):
  return FALSE;
 }
 
 //check all
 int i=0;
 while(lpFileName[i]!=0)
 {
  switch(lpFileName[i])
  {
  case _T('\\'):
  case _T('/'):
  case _T(':'):
  case _T('*'):
  case _T('?'):
  case _T('\"'):
  case _T('<'):
  case _T('>'):
  case _T('|'):
   return FALSE;
  }
  i++;
 }
 
 
 return TRUE;
}
 
const TCHAR c_FolderDoesNotExist[] = _T(
  "Le répertoire:\n\n"
  "%s\n\n"
  "n'existe pas. Voulez vous le créer ?" );
const TCHAR c_szErrInvalidPath[] = _T(
  "Le répertoire:"
  "\n\n"
  "%s\n\n"
  "est invalide. Recommencez." );
const TCHAR c_szErrCreatePath[] = _T(
  "Le répertoire:"
  "\n\n"
  "%s"
  "\n\nne peut être créer." );
 
//return -1: user break;
//return 0: no error
//return 1: lpPath is invalid
//return 2: can not create lpPath
int CPathDialog::MakeSurePathExists(LPCTSTR lpPath)
{
 CString strMsg;
 int iRet;
 try
 {
  //validate path
  iRet=Touch(lpPath, TRUE);
  if(iRet!=0)
  {
   throw iRet;
  }
 
  if(_taccess(lpPath, 0)==0)
  {
   return (int)0;
  }
 
  strMsg.Format(c_FolderDoesNotExist, lpPath);
  if(AfxMessageBox(strMsg, MB_YESNO|MB_ICONQUESTION) != IDYES)
  {
   return (int)-1;
  }
 
  //create path
  iRet=Touch(lpPath, FALSE);
  if(iRet!=0)
  {
   throw iRet;  
  }
 
  return 0;
 }
 catch(int nErrCode)
 {
  switch(nErrCode)
  {
  case 1:
   strMsg.Format(c_szErrInvalidPath, lpPath);
   break;
  case 2:
  default:
   strMsg.Format(c_szErrCreatePath, lpPath);
   break;
  }
 
  AfxMessageBox(strMsg, MB_OK|MB_ICONEXCLAMATION);
 
 }
 
 return iRet;
}
 
//return 0: no error
//return 1: lpPath is invalid
//return 2: lpPath can not be created(bValidate==FALSE)
int CPathDialog::Touch(LPCTSTR lpPath, BOOL bValidate)
{
 if(lpPath==NULL)
 {
  return 1;
 }
 
 TCHAR szPath[MAX_PATH];
 _tcscpy(szPath, lpPath);
 int nLen = _tcslen(szPath);
 
 //path must be "x:\..."
 if( ( nLen<3 ) ||  
  ( ( szPath[0]<_T('A') || _T('Z')<szPath[0] ) &&  
    ( szPath[0]<_T('a') || _T('z')<szPath[0] ) ||
  ( szPath[1]!=_T(':') )||  
  ( szPath[2]!=_T('\\') )
  )
   )
 {
  return 1;
 }
 
 int i;
 if(nLen==3)
 {
  if(!bValidate)
  {
   if(_access(szPath, 0)!=0)
   {
    return 2;
   }
  }
  return 0;
 }
 
 i = 3;
 BOOL bLastOne=TRUE;
 LPTSTR lpCurrentName;
 while(szPath[i]!=0)
 {
  lpCurrentName = &szPath[i];
  while( (szPath[i]!=0) && (szPath[i]!=_T('\\')) )
  {
   i++;
  }
 
  bLastOne =(szPath[i]==0);
  szPath[i] = 0;
 
  if( !IsFileNameValid(lpCurrentName) )
  {
   return 1;
  }
 
  if(!bValidate)
  {
   CreateDirectory(szPath, NULL);
   if(_taccess(szPath, 0)!=0)
   {
    return 2;
   }
  }
 
  if(bLastOne)
  {
   break; //it's done
  }
  else
  {
   szPath[i] = _T('\\');
  }
 
  i++;
 }
 
 return (bLastOne?0:1);
}
 
//return 0: ok
//return 1: error
int CPathDialog::ConcatPath(LPTSTR lpRoot, LPCTSTR lpMorePath)
{
 if(lpRoot==NULL)
 {
  return 1;
 }
 
 int nLen = _tcslen(lpRoot);
 
 if(nLen<3)
 {
  return 1;
 }
 
 if(lpMorePath==NULL)
 {
  return 0;
 }
 
 if(nLen==3)
 {
  _tcscat(lpRoot, lpMorePath);
  return 0;
 }
 
 _tcscat(lpRoot, _T("\\" ));
 _tcscat(lpRoot, lpMorePath);
 
 return 0;
}
 
 
et enfin, tout le reste est du connu à part ce que je vais écrire ici :
 
Pour récupérer déjà le répertoire à scanner, j'ai écrit ceci :  
 
Frames2Film.h
#pragma once
 
 
// CFrames2Film dialog
 
class CFrames2Film : public CDialog
{
 DECLARE_DYNAMIC(CFrames2Film)
 
public:
 CFrames2Film(CWnd* pParent = NULL);   // standard constructor
 virtual ~CFrames2Film();
 //static char szFiltres[];
 CString m_szEditImages;
 CEdit m_szctrlEditImages;
 CBrush m_Brush;
 CList m_szList;
 
 void OnScanRepertoire();
 
// Dialog Data
 enum { IDD = IDD_FRAMES_TO_FILM };
 
protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 
 //{{AFX_MSG(CFrames2Film)
 afx_msg void OnParcourirImages();
 virtual BOOL OnInitDialog();
 afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};
 
 
Frames2Film.cpp
#include "stdafx.h"
#include "Cinema Movie Maker.h"
#include "Frames2Film.h"
 
 
// CFrames2Film dialog
 
IMPLEMENT_DYNAMIC(CFrames2Film, CDialog)
 
CFrames2Film::CFrames2Film(CWnd* pParent /*=NULL*/)
 : CDialog(CFrames2Film::IDD, pParent)
{
 
}
 
CFrames2Film::~CFrames2Film()
{
}
 
void CFrames2Film::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 
 DDX_Control(pDX, IDC_EDIT_IMAGES_A_AJOUTER, m_szctrlEditImages);
 DDX_Text(pDX, IDC_EDIT_IMAGES_A_AJOUTER, m_szEditImages);
 DDX_Control(pDX, IDC_LIST_IMAGES_A_AJOUTER, m_szList);
}
 
 
BEGIN_MESSAGE_MAP(CFrames2Film, CDialog)
 //{{AFX_MSG_MAP(CFrames2Film)
 ON_COMMAND(IDC_PARCOURIR_IMAGES, OnParcourirImages)
 ON_WM_CTLCOLOR()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
 
// CFrames2Film message handlers
 
#include "PathDialog.h"
 
void CFrames2Film::OnParcourirImages()
{
 CString strPath;
 CString strTitle(_T("Répertoire ou se situe les images." ));
 CString strCaption(_T("Images à ajouter au Film." ));
 
 m_szctrlEditImages.GetWindowText(strPath);
 
 CPathDialog dlg(strCaption, strTitle, strPath);
 
 if(dlg.DoModal()==IDOK)
 {
  m_szctrlEditImages.SetWindowText(dlg.GetPathName());
  OnScanRepertoire();
 }
}
 
BOOL CFrames2Film::OnInitDialog()
{
 CDialog::OnInitDialog();
 
 m_Brush.CreateSolidBrush(RGB(255,255,255));
 
 return TRUE;  // retourne TRUE, sauf si vous avez défini le focus sur un contrôle
}
 
HBRUSH CFrames2Film::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 return m_Brush;
}
 
void CFrames2Film::OnScanRepertoire()
{
}
 
Maintenant, qu'est-ce que je dois écrire dans OnScanRepertoire, pour récupérer tous les fichiers présents dans le dit répertoire et les afficher ensuite dans la liste box ?
 
Merci pour les réponses apportées.
 
Je donne le reste du code :
 
Cinema Movie Maker.cpp[#ff0000]
// Cinema Movie Maker.cpp : Définit les comportements de classe pour l'application.
//
 
#include "stdafx.h"
#include "Cinema Movie Maker.h"
#include "Cinema Movie MakerDlg.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
 
// CCinemaMovieMakerApp
 
BEGIN_MESSAGE_MAP(CCinemaMovieMakerApp, CWinApp)
 ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
 
 
// construction CCinemaMovieMakerApp
 
CCinemaMovieMakerApp::CCinemaMovieMakerApp()
{
 // TODO : ajoutez ici du code de construction,
 // Placez toutes les initialisations significatives dans InitInstance
}
 
 
// Seul et unique objet CCinemaMovieMakerApp
 
CCinemaMovieMakerApp theApp;
 
 
// initialisation de CCinemaMovieMakerApp
 
BOOL CCinemaMovieMakerApp::InitInstance()
{
 // InitCommonControls() est requis sur Windows XP si le manifeste de l'application
 // spécifie l'utilisation de ComCtl32.dll version 6 ou ultérieure pour activer les
 // styles visuels.  Dans le cas contraire, la création de fenêtres échouera.
 INITCOMMONCONTROLSEX InitCtrls;
 InitCtrls.dwSize = sizeof(InitCtrls);
 // Set this to include all the common control classes you want to use
 // in your application.
 InitCtrls.dwICC = ICC_WIN95_CLASSES;
 InitCommonControlsEx(&InitCtrls);
 
 CWinApp::InitInstance();
 
 AfxEnableControlContainer();
 
 // Initialisation standard
 // Si vous n'utilisez pas ces fonctionnalités et que vous souhaitez réduire la taille
 // de votre exécutable final, vous devez supprimer ci-dessous
 // les routines d'initialisation spécifiques dont vous n'avez pas besoin
 // Changez la clé de Registre sous laquelle nos paramètres sont enregistrés
 // TODO : modifiez cette chaîne avec des informations appropriées,
 // telles que le nom de votre société ou organisation
 SetRegistryKey(_T("Applications locales générées par AppWizard" ));
 
 CCinemaMovieMakerDlg dlg;
 m_pMainWnd = &dlg;
 INT_PTR nResponse = dlg.DoModal();
 if (nResponse == IDOK)
 {
  // TODO : placez ici le code définissant le comportement lorsque la boîte de dialogue est
  //  fermée avec OK
 }
 else if (nResponse == IDCANCEL)
 {
  // TODO : placez ici le code définissant le comportement lorsque la boîte de dialogue est
  //  fermée avec Annuler
 }
 
 // Lorsque la boîte de dialogue est fermée, retourner FALSE afin de quitter
 //  l'application, plutôt que de démarrer la pompe de messages de l'application.
 return FALSE;
}
 
[#ff0000]Cinema Movie Maker.h

// Cinema Movie Maker.h : fichier d'en-tête principal pour l'application PROJECT_NAME
//
 
#pragma once
 
#ifndef __AFXWIN_H__
 #error "include 'stdafx.h' before including this file for PCH"
#endif
 
#include "resource.h"  // symboles principaux
 
 
// CCinemaMovieMakerApp:
// Consultez Cinema Movie Maker.cpp pour l'implémentation de cette classe
//
 
class CCinemaMovieMakerApp : public CWinApp
{
public:
 CCinemaMovieMakerApp();
 
// Substitutions
 public:
 virtual BOOL InitInstance();
 
// Implémentation
 
 DECLARE_MESSAGE_MAP()
};
 
extern CCinemaMovieMakerApp theApp;
 
Cinema Movie Maker.rc
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
 
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
 
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
 
/////////////////////////////////////////////////////////////////////////////
// French (France) resources
 
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
#ifdef _WIN32
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
#pragma code_page(1252)
#endif //_WIN32
 
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
 
1 TEXTINCLUDE  
BEGIN
    "resource.h\0"
END
 
2 TEXTINCLUDE  
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END
 
3 TEXTINCLUDE  
BEGIN
    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
    "#define _AFX_NO_OLE_RESOURCES\r\n"
    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
    "\r\n"
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)\r\n"
    "LANGUAGE 12, 1\r\n"
    "#pragma code_page(1252)\r\n"
    "#include ""res\\CinemaMovieMaker.rc2""  // ressources non modifiées par Microsoft Visual C++\r\n"
    "#include ""afxres.rc""     // Composants standard\r\n"
    "#endif\r\n"
    "\0"
END
 
#endif    // APSTUDIO_INVOKED
 
 
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
 
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME           ICON                    "..\\res\\Cinema_Movie_Maker.ico"
 
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
 
IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "À propos de Cinema Movie Maker"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    ICON            IDR_MAINFRAME,IDC_STATIC,11,17,20,20
    LTEXT           "Cinema Movie Maker Version 1.0",IDC_STATIC,40,10,119,8,SS_NOPREFIX
    LTEXT           "Copyright (C) 2005",IDC_STATIC,40,25,119,8
    DEFPUSHBUTTON   "OK",IDOK,178,7,50,16,WS_GROUP
END
 
IDD_CINEMAMOVIEMAKER_DIALOG DIALOGEX 0, 0, 540, 423
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Cinema Movie Maker"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    PUSHBUTTON      "Quitter le Programme",IDCANCEL,453,394,80,20
    CONTROL         "",IDC_TAB_CINEMA_MOVIE_MAKER,"SysTabControl32",0x0,7,7,526,380
END
 
IDD_FRAMES_TO_FILM DIALOGEX 0, 0, 314, 258
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    GROUPBOX        "Images à Ajouter",IDC_STATIC,7,7,300,129,BS_CENTER
    EDITTEXT        IDC_EDIT_IMAGES_A_AJOUTER,92,17,210,14,ES_AUTOHSCROLL | ES_READONLY
    LISTBOX         IDC_LIST_IMAGES_A_AJOUTER,15,36,284,95,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
    GROUPBOX        "Son à Ajouter",IDC_STATIC,7,140,300,30,BS_CENTER
    PUSHBUTTON      "Parcourir",IDC_PARCOURIR_IMAGES,15,17,70,14
    PUSHBUTTON      "Parcourir",IDC_PARCOURIR_SON,15,150,70,14
    EDITTEXT        IDC_EDIT_SON_A_AJOUTER,92,150,210,14,ES_AUTOHSCROLL | ES_READONLY
    GROUPBOX        "Vidéo",IDC_STATIC,7,173,300,56,BS_CENTER
    PUSHBUTTON      "Parcourir",IDC_PARCOURIR_VIDEO,15,182,70,14
    EDITTEXT        IDC_EDIT_VIDEO_A_CREER,92,182,210,14,ES_AUTOHSCROLL
    CONTROL         "Compresser la Vidéo",IDC_CHECKCOMPRESS_VIDEO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,203,81,10
    LTEXT           "Délai d'attente entre 2 images :",IDC_STATIC,15,215,102,8
    EDITTEXT        IDC_EDIT_WAIT_BETWEEN_IMAGES,119,212,40,14,ES_AUTOHSCROLL
    LTEXT           "milisecondes.",IDC_STATIC,164,215,43,8
    PUSHBUTTON      "Créer le Film",IDC_CREER_LE_FILM,81,236,150,14
END
 
 
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
 
VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040c04e4"
        BEGIN
            VALUE "CompanyName", "TODO : <Nom de la société>"
            VALUE "FileDescription", "TODO : <Description du fichier>"
            VALUE "FileVersion", "1.0.0.1"
            VALUE "InternalName", "Cinema Movie Maker.exe"
            VALUE "LegalCopyright", "TODO : (c) <Nom de la société>. Tous droits réservés."
            VALUE "OriginalFilename", "Cinema Movie Maker.exe"
            VALUE "ProductName", "TODO : <Nom du produit>"
            VALUE "ProductVersion", "1.0.0.1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x40c, 1252
    END
END
 
 
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
 
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO  
BEGIN
    IDD_ABOUTBOX, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 228
        TOPMARGIN, 7
        BOTTOMMARGIN, 48
    END
 
    IDD_CINEMAMOVIEMAKER_DIALOG, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 533
        TOPMARGIN, 7
        BOTTOMMARGIN, 414
    END
 
    IDD_FRAMES_TO_FILM, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 307
        TOPMARGIN, 7
        BOTTOMMARGIN, 250
    END
END
#endif    // APSTUDIO_INVOKED
 
 
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
 
STRINGTABLE  
BEGIN
    IDS_ABOUTBOX            "&À propos de Cinema Movie Maker..."
END
 
#endif    // French (France) resources
/////////////////////////////////////////////////////////////////////////////
 
 
 
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
 
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
LANGUAGE 12, 1
#pragma code_page(1252)
#include "res\CinemaMovieMaker.rc2"  // ressources non modifiées par Microsoft Visual C++
#include "afxres.rc"     // Composants standard
#endif
 
/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED
 
Cinema Movie MakerDlg.cpp
// Cinema Movie MakerDlg.cpp : fichier d'implémentation
//
 
#include "stdafx.h"
#include "Cinema Movie Maker.h"
#include "Cinema Movie MakerDlg.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
 
// boîte de dialogue CAboutDlg utilisée pour la boîte de dialogue 'À propos de' pour votre application
 
class CAboutDlg : public CDialog
{
public:
 CAboutDlg();
 
// Données de boîte de dialogue
 enum { IDD = IDD_ABOUTBOX };
 
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge de DDX/DDV
 
// Implémentation
protected:
 DECLARE_MESSAGE_MAP()
};
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
}
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
 
 
// boîte de dialogue CCinemaMovieMakerDlg
 
 
 
 
CCinemaMovieMakerDlg::CCinemaMovieMakerDlg(CWnd* pParent /*=NULL*/)
 : CDialog(CCinemaMovieMakerDlg::IDD, pParent)
{
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CCinemaMovieMakerDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 
 DDX_Control(pDX, IDC_TAB_CINEMA_MOVIE_MAKER, m_tabctrl);
}
 
BEGIN_MESSAGE_MAP(CCinemaMovieMakerDlg, CDialog)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
 
// gestionnaires de messages pour CCinemaMovieMakerDlg
 
BOOL CCinemaMovieMakerDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
 
 // Ajouter l'élément de menu "À propos de..." au menu Système.
 
 // IDM_ABOUTBOX doit se trouver dans la plage des commandes système.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);
 
 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }
 
 // Définir l'icône de cette boîte de dialogue. L'infrastructure effectue cela automatiquement
 //  lorsque la fenêtre principale de l'application n'est pas une boîte de dialogue
 SetIcon(m_hIcon, TRUE);   // Définir une grande icône
 SetIcon(m_hIcon, FALSE);  // Définir une petite icône
 
 // TODO : ajoutez ici une initialisation supplémentaire
 m_tabctrl.DeleteAllItems();
 m_tabctrl.InsertItem(0, "Créer un Film." );
 m_tabctrl.InsertItem(1, "Convertir un Film." );
 
 m_pCF2F = new CFrames2Film;
 m_pCF2F->Create(IDD_FRAMES_TO_FILM, this);
 m_pCF2F->ShowWindow(SW_SHOW);
 
 {
  CRect rcTabCtrl;
  m_tabctrl.GetWindowRect(&rcTabCtrl);
  m_tabctrl.SendMessage(TCM_ADJUSTRECT, FALSE, (LPARAM)&rcTabCtrl);
  m_tabctrl.MapWindowPoints(this, (LPPOINT)&rcTabCtrl, 2);
 
  CRect rcChildTab;
  m_pCF2F->GetWindowRect(&rcChildTab);
 
  ScreenToClient(&rcTabCtrl);
 
  int x = (rcTabCtrl.left + rcTabCtrl.right) / 2 - (rcChildTab.right - rcChildTab.left) / 2;
  int y = (rcTabCtrl.top + rcTabCtrl.bottom) / 2 - (rcChildTab.bottom - rcChildTab.top) / 2;
 
  m_pCF2F->SetWindowPos(NULL, x, y, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOREDRAW);
 }
 
 m_tabctrl.SetCurSel(0);
 m_pCF2F->ShowWindow(SW_SHOW);
 
 return TRUE;  // retourne TRUE, sauf si vous avez défini le focus sur un contrôle
}
 
void CCinemaMovieMakerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {
  CDialog::OnSysCommand(nID, lParam);
 }
}
 
// Si vous ajoutez un bouton Réduire à votre boîte de dialogue, vous devez utiliser le code ci-dessous
//  pour dessiner l'icône. Pour les applications MFC utilisant le modèle Document/Vue,
//  cela est fait automatiquement par l'infrastructure.
 
void CCinemaMovieMakerDlg::OnPaint()
{
 if (IsIconic())
 {
  CPaintDC dc(this); // contexte de périphérique pour la peinture
 
  SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
 
  // Centrer l'icône dans le rectangle client
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() - cxIcon + 1) / 2;
  int y = (rect.Height() - cyIcon + 1) / 2;
 
  // Dessiner l'icône
  dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
  CDialog::OnPaint();
 }
}
 
// Le système appelle cette fonction pour obtenir le curseur à afficher lorsque l'utilisateur fait glisser
//  la fenêtre réduite.
HCURSOR CCinemaMovieMakerDlg::OnQueryDragIcon()
{
 return static_cast<HCURSOR>(m_hIcon);
}
 
 
Cinema Movie MakerDlg.h
// Cinema Movie MakerDlg.h : fichier d'en-tête
//
 
#include "XPTabCtrl.h"
#include "Frames2Film.h"
 
#pragma once
 
 
// boîte de dialogue CCinemaMovieMakerDlg
class CCinemaMovieMakerDlg : public CDialog
{
// Construction
public:
 CCinemaMovieMakerDlg(CWnd* pParent = NULL); // constructeur standard
 
// Données de boîte de dialogue
 enum { IDD = IDD_CINEMAMOVIEMAKER_DIALOG };
 
 CXPTabCtrl m_tabctrl;
 
 CFrames2Film* m_pCF2F;
 
 protected:
 virtual void DoDataExchange(CDataExchange* pDX); // Prise en charge de DDX/DDV
 
 
// Implémentation
protected:
 HICON m_hIcon;
 
 // Fonctions générées de la table des messages
 virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 DECLARE_MESSAGE_MAP()
};
 
Voila pour le code, s'y vous pouviez coder le OnScanRepertoire, ce serait sympa...
 
Merci
 
PS : je précise que je travaille sous VS2005 béta 2 , d'où les commentaires en français

Reply

Marsh Posté le 14-08-2005 à 21:08:33   

Reply

Marsh Posté le 14-08-2005 à 21:15:41    

balise [code] svp :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 15-08-2005 à 09:41:47    

Quelle différence avec le CFileDialog standard?

Reply

Marsh Posté le 15-08-2005 à 10:59:45    

Si tu cherches à lister tous les fichiers d'un reprtoire il ya une commande plus simple : FindFirstFile
tu lui passes en parametres un :  
WIN32_FIND_DATA FindFileData;
CString strName;   //path
 
hFind = FindFirstFile(strName.GetBuffer(0), &FindFileData);
 
tu peux filtrer les fichiers bien sur

Reply

Marsh Posté le 15-08-2005 à 11:20:16    

puis une fois que t as trouvé un fichier tu fais:
while (FindNextFile(hFind, &FindFileData) != 0)  
{
  LogFileList.AddTail(FindFileData.cFileName);   //CStringList
}

Reply

Marsh Posté le 15-08-2005 à 13:43:52    

Merci bien zied3, c'est ce que je cherchais...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed