CShellTreeCtrl
This is just an example of a content provider class (see article), which overrides the PopulateItem
virtual function to show the Shell's resources only when the user wants to access them.
You may easily specify the resource to use as the tree control's root item, or add multiple items at the root level. You have options to display only folders, files, hidden objects, and you can choose how to display the items text. You may also get specific information about the resource associated with an existing item.
User interface features are those offered by the base class and can be further personalized with custom animations.
This version is still under development, in particular, there's no support for filtering (I accept ideas).
Demo Application
The demo project shows how to:
- use the control in a SDI application
- add root items to the control
- set item's options
- display a Shell context menu
You may use the "Test
" menu to experiment with the selected item, or see the Shell context menu in the "Shell
" menu. Another way to display the Shell context menu is by right-clicking on a tree item (hold on CTRL to see a cascaded popup menu).
Class Reference
CShellTreeCtrl (Still Subject to Change)
CShellTreeCtrl::AddRootItem
void AddRootItem(LPCITEMIDLIST pidl, UINT nFlags = STCF_DEFAULT)
Adds the specified Shell
object to the root level of the tree and sets options for the inserted item.
The first argument pidl
is the object you want to add, cannot be NULL
. You may use SHGetSpecialFolderLocation
to get a valid argument for this function.
The nFlags
argument specifies the options to apply to the inserted item and can be one or more of the following values, combined with the bitwise or operator:
STCF_DEFAULT | Child items can be only folders and their names refers to the parent item (like Explorer) |
STCF_INCLUDEFILES | Child items can be also non-folder objects |
STCF_INCLUDEHIDDEN | Child items can be also hidden objects (like system files) |
STCF_INCLUDEALL | (STCF_INCLUDEFILES|STCF_INCLUDEHIDDEN ) |
STCF_SHOWFULLNAME | Item's name does not refer to any other folder (like shared directories in the Network Neighbourhood folder) |
STCF_SHOWPATH | Item's name is a relative path |
STCF_SHOWFULLPATH | Item's name is an absolute path
(STCF_SHOWPATH|STCF_SHOWFULLNAME )
|
CShellTreeCtrl::AddRootFolderContent
void AddRootFolderContent(LPCITEMIDLIST pidl, UINT nFlags = STCF_DEFAULT)
Adds the content of the specified Shell
folder object to the root level of the tree and sets options for the inserted items.
The first argument pidl
is the folder object you want to enumerate. A value of NULL
means that the Desktop virtual folder will be added (not its content). You may use SHGetSpecialFolderLocation
to get a valid argument for this function.
The nFlags
argument specifies the options to apply to the folder object during enumeration (see the previous function). STCF_SHOWxxx
flags currently have no effect.
CShellTreeCtrl::GetItemIDList
CShellPidl GetItemIDList(HTREEITEM hItem)
It retrieves the Shell
object associated to the specified item. The returned object is invalid if the function fails.
You may use the Shell
's functions to get information about the returned value. See SHGetPathFromIDList
, SHGetFileInfo
documentation.
CShellTreeCtrl::GetItemContextMenu
BOOL GetItemContextMenu(HTREEITEM hItem, CShellContextMenu &rCtxMenu)
It retrieves the Shell
context menu associated to the specified item. The return value is non-zero if the function is successful.
(to do)
CShellTreeCtrl::GetCallbackMask
UINT GetCallbackMask()
It retrieves which parts of a tree view item are handled by callback messages.
(see the next function)
CShellTreeCtrl::SetCallbackMask
void SetCallbackMask(UINT nMask)
It specifies which parts of a tree view item are handled by callback messages.
The nMask
argument can be one or more of the following values, combined with the bitwise or operator:
TVIF_TEXT | The control provides item text each time it's needed |
TVIF_IMAGE | Same for the image |
TVIF_SELECTEDIMAGE | Same for the selected image |
TVIF_CHILDREN | Same for the item's button |
Updates
- 17th October, 2000
- 7th February, 2000
- Fixed a bug with
SHGetFileInfo
on some machines, now using IShellFolder::GetAttributesOf
(thanks to He Yingxia and Markus Axelsson) - Now correctly sort items after insertion
- 23rd November, 2001
- New version of the control (beta)
- Added wrapper classes for shell objects and interfaces
- Added support for context menu
Conclusion
Please note that this class is not fully functional yet. Any suggestion on how to improve it would be greatly appreciated.
I developed this class also to provide an example of a content provider for my CWaitingTreeCtrl
class (see article).
License
This article has no explicit license attached to it, but may contain usage terms in the article text or the download files themselves. If in doubt, please contact the author via the discussion board below.
A list of licenses authors might use can be found here.