?
						
					
					
						
					
				
				
					Source ???????
OK !!!
Die Headerdatei
////////////////////////////////////////////////////////////////////////
// DirDialog.h: interface for the CDirDialog class.
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DIRDIALOG_H__62FFAC92_1DEE_11D1_B87A_0060979CDF6D__INCLUDED_)
#define AFX_DIRDIALOG_H__62FFAC92_1DEE_11D1_B87A_0060979CDF6D__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CDirDialog
{
public:
   CDirDialog();
   virtual ~CDirDialog();
   BOOL DoBrowse(CWnd *pwndParent = NULL);
   CString m_strWindowTitle;
   CString m_strPath;
   CString m_strInitDir;
   CString m_strSelDir;
   CString m_strTitle;
   int  m_iImageIndex;
   BOOL m_bStatus;
private:
   virtual BOOL SelChanged(LPCSTR lpcsSelection, CString& csStatusText) { return TRUE; };
   static int __stdcall CDirDialog::BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
};
#endif // !defined(AFX_DIRDIALOG_H__62FFAC92_1DEE_11D1_B87A_0060979CDF6D__INCLUDED_)
Die Cpp-Datei
#include "stdafx.h"
#include "DirDialog.h"
#include "shlobj.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
// Callback function called by SHBrowseForFolder's browse control
// after initialization and when selection changes
int __stdcall CDirDialog::BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
   CDirDialog* pDirDialogObj = (CDirDialog*)lpData;
   if (uMsg == BFFM_INITIALIZED )
   {
       if( ! pDirDialogObj->m_strSelDir.IsEmpty() )
           ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)(LPCTSTR)(pDirDialogObj->m_strSelDir));
       if( ! pDirDialogObj->m_strWindowTitle.IsEmpty() )
           ::SetWindowText(hwnd, (LPCTSTR) pDirDialogObj->m_strWindowTitle);
   }
   else if( uMsg == BFFM_SELCHANGED )
   {
       LPITEMIDLIST pidl = (LPITEMIDLIST) lParam;
       char selection[MAX_PATH];
       if( ! ::SHGetPathFromIDList(pidl, selection) )
           selection[0] = '\0';
       CString csStatusText;
       BOOL bOk = pDirDialogObj->SelChanged(selection, csStatusText);
       if( pDirDialogObj->m_bStatus )
           ::SendMessage(hwnd, BFFM_SETSTATUSTEXT , 0, (LPARAM)(LPCSTR)csStatusText);
       ::SendMessage(hwnd, BFFM_ENABLEOK, 0, bOk);
   }
 return 0;
}
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDirDialog::CDirDialog()
{
   m_bStatus = FALSE;
}
CDirDialog::~CDirDialog()
{
}
BOOL CDirDialog: :DoBrowse(CWnd *pwndParent)
{
   if( ! m_strSelDir.IsEmpty() )
   {
       m_strSelDir.TrimRight();
       if( m_strSelDir.Right(1) == "\\" | | m_strSelDir.Right(1) == "//" )
           m_strSelDir = m_strSelDir.Left(m_strSelDir.GetLength() - 1);
   }
   LPMALLOC pMalloc;
   if (SHGetMalloc (&pMalloc)!= NOERROR)
       return FALSE;
   BROWSEINFO bInfo;
   LPITEMIDLIST pidl;
   ZeroMemory ( (PVOID) &bInfo,sizeof (BROWSEINFO));
   if (!m_strInitDir.IsEmpty ())
   {
       OLECHAR       olePath[MAX_PATH];
       ULONG         chEaten;
       ULONG         dwAttributes;
       HRESULT       hr;
       LPSHELLFOLDER pDesktopFolder;
       //
       // Get a pointer to the Desktop's IShellFolder interface.
       //
       if (SUCCEEDED(SHGetDesktopFolder(&pDesktopFolder)))
       {
           //
           // IShellFolder::ParseDisplayName requires the file name be in Unicode.
           //
           MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, m_strInitDir.GetBuffer(MAX_PATH), -1,
                               olePath, MAX_PATH);
           m_strInitDir.ReleaseBuffer (-1);
           //
           // Convert the path to an ITEMIDLIST.
           //
           hr = pDesktopFolder->ParseDisplayName(NULL,
                                               NULL,
                                               olePath,
                                               &chEaten,
                                               &pidl,
                                               &dwAttributes);
           if (FAILED(hr))
           {
               pMalloc ->Free (pidl);
               pMalloc ->Release ();
               return FALSE;
           }
           bInfo.pidlRoot = pidl;
       }
   }
   bInfo.hwndOwner = pwndParent == NULL ? NULL : pwndParent->GetSafeHwnd();
   bInfo.pszDisplayName = m_strPath.GetBuffer (MAX_PATH);
   bInfo.lpszTitle = (m_strTitle.IsEmpty()) ? "Open" : m_strTitle;
   bInfo.ulFlags = BIF_RETURNFSANCESTORS
                   | BIF_RETURNONLYFSDIRS
                   | (m_bStatus ? BIF_STATUSTEXT : 0);
   bInfo.lpfn = BrowseCtrlCallback;  // address of callback function
   bInfo.lParam = (LPARAM)this;      // pass address of object to callback function
   if ((pidl = ::SHBrowseForFolder(&bInfo)) == NULL)
   {
       return FALSE;
   }
   m_strPath.ReleaseBuffer();
   m_iImageIndex = bInfo.iImage;
   if (::SHGetPathFromIDList(pidl, m_strPath.GetBuffer(MAX_PATH)) == FALSE)
   {
       pMalloc ->Free(pidl);
       pMalloc ->Release();
       return FALSE;
   }
   m_strPath.ReleaseBuffer();
   pMalloc ->Free(pidl);
   pMalloc ->Release();
   return TRUE;
}
Die Implementierung
void CFiletestDlg::OnButton3()
{
   // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
      UpdateData(TRUE);
   CDirDialog dlg;
   dlg.m_strTitle = _T("Choose directory");
   dlg.m_strSelDir = m_files;
   if (dlg.DoBrowse())
   {
       m_dir = dlg.m_strPath + "\\";
       //m_combo2.SetEditSel(m_files.GetLength(), m_files.GetLength());
   }
CString m_dirund = m_dir + "*.*";
m_dirwahl = m_dir;
m_list1.ResetContent();
m_list1.Dir(DDL_READONLY,m_dirund);
m_anzahlfiles=m_list1.GetCount();
   UpdateData(FALSE);
}
Ein Filedialog:
void CFiletestDlg::OnButton4()
{
   // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
  UpdateData(TRUE);
   //CString strFilter = _T("All Files (*.*) |*.*| |");
   CString strFilter = _T("INI (*.INI) |*.INI| |");
   CFileDialog    dlg(TRUE, NULL, m_files, OFN_HIDEREADONLY|OFN_EXPLORER, strFilter, NULL);
   dlg.m_ofn.lpstrTitle = _T("File auswählen");
   if (dlg.DoModal() == IDOK)
   {
       m_dir = dlg.GetPathName();
       UpdateData(FALSE);
       //m_combo2.SetEditSel(dlg.GetPathName().GetLength(), dlg.GetPathName().GetLength());
   }    
}
In der Implementierung mußt Du dir noch das für Dich benötigte raussuchen sonst ist die Klasse funktionierend (x.h;x.cpp).
Ist von einem meiner Programme.
MFG
Thomas