List files and directories in a CTreeCtrl
Christine Hagberg -- CHAGBERG@datx.com
Monday, February 10, 1997
Environment: Win95, VC++ 4.2-flat
Can anyone point me to an easy way to enumerate all files and directories
in a CTreeCtrl (like explorer).
I was trying to find a sample someplace. Someone must of done this
already.
Thanks
Chris (chagberg@datx.com)
Andi Giri -- agiri@ctiis.com
Tuesday, February 11, 1997
[Mini-digest: 2 responses]
The following code does what u wanted, a directory picker dialog using
a tree control.
>The include file follows:
>
>class CPickDirDlg
>{
>// Construction
>public:
> CPickDirDlg(void) {} // default constructor
> CPickDirDlg(CString strTitle, CString strStartDir);
> CString GetDirectory();
> void SetTitle(CString& strTitle) { m_strTitle = strTitle; }
> void SetStartDirectory(CString& strStartDir) { m_strStartDir = strStartDir;
>}
>private:
> CString m_strTitle;
> CString m_strStartDir;
> static int WINAPI BrowseProc( HWND hwnd, UINT uMsg, LPARAM lParam,LPARAM
>lpData);
>};
>
>The .cpp file follows:
>#include "stdafx.h"
>#include "PickDir.h"
>#include "shlobj.h"
>
>CPickDirDlg::CPickDirDlg(CString strTitle, CString strStartDir)
>{
> m_strTitle = strTitle;
> m_strStartDir = strStartDir;
>}
>
>CString CPickDirDlg::GetDirectory(void)
>{
> LPMALLOC pMalloc;
> /* Gets the Shell's default allocator */
> if (::SHGetMalloc(&pMalloc) == NOERROR)
> {
> BROWSEINFO bi;
> char pszBuffer[MAX_PATH];
> LPITEMIDLIST pidl;
> // Get help on BROWSEINFO struct - it's got all the bit settings.
> bi.hwndOwner = NULL;
> if ( m_strStartDir.IsEmpty() )
> {
> LPITEMIDLIST pidlStart;
> // get the pidl for the desktop - this will be used to initialize the
>folder
> SHGetSpecialFolderLocation( NULL, CSIDL_DESKTOP, &pidlStart);
> bi.pidlRoot = pidlStart;
> }
> else
> bi.pidlRoot = NULL;
> bi.pszDisplayName = pszBuffer;
> if ( m_strTitle == _T("") )
> bi.lpszTitle = _T("Directory Picker");
> else
> bi.lpszTitle = m_strTitle;
> // Browse only file system directories, no "Control Panel" or "Printers"
>folders.
> bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
> bi.lpfn = BrowseProc;
> if ( m_strStartDir.IsEmpty() )
> {
> bi.lParam = NULL;
> } else
> {
> bi.lParam = (LPARAM)((const char *)m_strStartDir);
> }
> // This next call issues the dialog box.
> if ((pidl = ::SHBrowseForFolder(&bi)) != NULL)
> {
> if (::SHGetPathFromIDList(pidl, pszBuffer))
> {
> // At this point pszBuffer contains the selected path */.
> return pszBuffer;
> }
> // Free the PIDL allocated by SHBrowseForFolder.
> pMalloc->Free(pidl);
> }
> // Release the shell's allocator.
> pMalloc->Release();
> }
> return _T("");
>}
>
>/*
> * This proc. has been added just in order to set the starting directory.
> * I looks shortsighted that the BROWSEINFO structure didn't have an
> * easy way to set the starting place - it seems like such an obvious
> * thing to provide. The structure has a pidlRoot element, which takes a
>structure of
> * type LPITEMIDLIST, but it has kno way to take a directory name string.
> * To this function, we pass the lParam from the BROWSEINFO in the form of
>lpData, and
> * while initializing, the shell browser will pick the directory whose name
>is in lpData.
> */
>int WINAPI CPickDirDlg::BrowseProc( HWND hwnd, UINT uMsg, LPARAM lParam,
>LPARAM lpData)
>{
> if (uMsg == BFFM_INITIALIZED) {
> if (lpData) {
> SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
> }
> }
> return 0;
>}
>
>Subject: List files and directories in a CTreeCtrl
>
>
>Environment: Win95, VC++ 4.2-flat
>
>Can anyone point me to an easy way to enumerate all files and directories in
>a CTreeCtrl (like explorer).
>
>I was trying to find a sample someplace. Someone must of done this already.
>
>
>Thanks
>
>Chris (chagberg@datx.com)
-----From: Mario Contestabile
>Can anyone point me to an easy way to enumerate all files and directories
>in a CTreeCtrl (like explorer).
Here's sample code I believe from MSJ Dec 96 enumerating files in a directory.
Adding items in a tree should be no problem.
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile (szPath, &fd);
if (hFind == INVALID_HANDLE_VALUE)
return;
do {
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
if (!AddItemToListView (fd))
break;
}
} while (::FindNextFile (hFind, &fd));
::FindClose (hFind);
Retrieve
fd.cFileName, fd.nFileSizeLow, fd.ftCreationTime
or whatever else inf. you require.
mcontest@universal.com
Rob Warner -- rhwarner@southeast.net
Tuesday, February 11, 1997
[Mini-digest: 3 responses]
Jeff Prosise has an easy-to-follow sample called Windows Wanderer in his
Programming Windows 95 with MFC (I don't have it in front of me, but I
think that's the title). It's published by Microsoft Press. It just does
directories in the CTreeCtrl, but it should get you started.
----------
> From: Christine Hagberg
> To: 'MFC List'
> Subject: List files and directories in a CTreeCtrl
> Date: Monday, February 10, 1997 5:29 PM
>
>
> Environment: Win95, VC++ 4.2-flat
>
> Can anyone point me to an easy way to enumerate all files and directories
> in a CTreeCtrl (like explorer).
>
> I was trying to find a sample someplace. Someone must of done this
> already.
>
>
> Thanks
>
> Chris (chagberg@datx.com)
-----From: Drolshagen Thomas
Hi Christine
Take a look at Microsoft System Journal 10/96 Wicked Code (CDriveView)=20
or use SHBrowseForFolder.
HTH
Thomas Drolshagen
-----Urspr=FCngliche Nachricht-----
Von: Christine Hagberg [SMTP:CHAGBERG@datx.com]
Gesendet am: Montag, 10. Februar 1997 23:29
An: 'MFC List'
Betreff: List files and directories in a CTreeCtrl
Environment: Win95, VC++ 4.2-flat
Can anyone point me to an easy way to enumerate all files and=20
directories in a CTreeCtrl (like explorer).
I was trying to find a sample someplace. Someone must of done this=20
already.
Thanks
Chris (chagberg@datx.com)
-----From: "Serge Wautier"
> From: Christine Hagberg
> Subject: List files and directories in a CTreeCtrl
> Can anyone point me to an easy way to enumerate all files and directories
> in a CTreeCtrl (like explorer).
Give a look at MSJ october 96 (Jeff Prosise's Wicked Code column) : It's
exactly what you ask.
If you can't find MSJ :
1. I recommend you subscribe to it. It really worths its price.
2. You can find the code on www.msj.com
Hope this helps,
Serge Wautier,
Techno Trade s.a.
Belgium
serge.wautier@ontonet.be
http://www.tbox.fr
Shaju Mathew -- shajum@hpptc51.rose.hp.com
Wednesday, February 12, 1997
Chris,
Jeff Proise's book 'Programming Windows '95 with MFC' has a sample
which does exactly what you want(refer Chapter 13, example Wanderer.mdp).
I've done a similar treectrl which maps the disk and also the
network resources. If you don't want to buy the book, give me a call and
I'll share my code with you.
Good luck
-Shaju Mathew
>
> Environment: Win95, VC++ 4.2-flat
>
> Can anyone point me to an easy way to enumerate all files and directories
> in a CTreeCtrl (like explorer).
>
> I was trying to find a sample someplace. Someone must of done this
> already.
>
>
> Thanks
>
> Chris (chagberg@datx.com)
>
--
**********************************************************************
Shaju Mathew .---. .---.
Performance Technology Lab /" " \ WWW / " "\ Off:(916)785-9018
WCSO Group Research & Dev / / "" \(*|*)/ "" \ \
Hewlett-Packard Company ////// '. V .` \\\\\\Home:(916)722-4576
8000, Foothills Blvd //// / // : """ : \\ \ \\\\
Mailstop 5723 // / / /`.""" '\ \ \ \\Fax:(916)785-1264
Roseville, CA 95747 // //.".\\ \\
-----------UU---UU-----------
shajum@hpptc51.rose.hp.com '//|||\\` Shaju_Mathew@hp.com
**********************************************************************
Become an MFC-L member
| Вернуться в корень Архива
|