Scanner un répertoire et afficher les fichiers dans une liste box - C++ - Programmation
Marsh Posté le 14-08-2005 à 21:15:41
balise [code] svp
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
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
}
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