140 lines
4 KiB
C
140 lines
4 KiB
C
|
// Name Space Control definitions
|
||
|
|
||
|
#define NAME_SPACE_CLASS "NameSpaceControl" // window class name
|
||
|
|
||
|
// Window Styles
|
||
|
|
||
|
#define NSS_TREE 0x0000 // tree control
|
||
|
#define NSS_COMBOBOX 0x0001 // combo box
|
||
|
|
||
|
#define NSS_SHOWNONFOLDERS 0x0002 // include non folder things (files)
|
||
|
#define NSS_SHOWHIDDEN 0x0004
|
||
|
#define NSS_ONLYFSDIRS 0x0008 // For finding a folder to start document searching
|
||
|
#define NSS_DONTGOBELOWDOMAIN 0x0010 // For starting the Find Computer
|
||
|
#define NSS_RETURNFSANCESTORS 0x0020
|
||
|
#define NSS_DROPTARGET 0x0040 // register as a drop target
|
||
|
#define NSS_BROWSEFORCOMPUTER 0x4000 // Browsing for Computers.
|
||
|
#define NSS_BROWSEFORPRINTER 0x8000 // Browsing for Printers
|
||
|
|
||
|
|
||
|
// structures
|
||
|
|
||
|
typedef DWORD HNAMESPACEITEM; // handle to a name space item
|
||
|
|
||
|
typedef enum {
|
||
|
NSIF_HITEM = 0x0001,
|
||
|
NSIF_FOLDER = 0x0002,
|
||
|
NSIF_PARENTFOLDER = 0x0004,
|
||
|
NSIF_IDLIST = 0x0008,
|
||
|
NSIF_FULLIDLIST = 0x0010,
|
||
|
NSIF_ATTRIBUTES = 0x0020
|
||
|
} NSI_FLAGS;
|
||
|
|
||
|
typedef struct {
|
||
|
NSI_FLAGS flags;
|
||
|
HNAMESPACEITEM hitem;
|
||
|
IShellFolder *psf;
|
||
|
LPCITEMIDLIST pidl;
|
||
|
DWORD dwAttributes;
|
||
|
} NSC_ITEMINFO;
|
||
|
|
||
|
typedef enum {
|
||
|
NSSR_ENUMBELOWROOT = 0x0001,
|
||
|
NSSR_CREATEPIDL = 0x0002,
|
||
|
} NSSR_FLAGS;
|
||
|
|
||
|
typedef struct {
|
||
|
NSSR_FLAGS flags;
|
||
|
IShellFolder *psf; // NULL -> desktop shell folder
|
||
|
LPCITEMIDLIST pidlRoot; // PIDL, NULL for desktop, or CSIDL for shell special folder
|
||
|
int iExpandDepth; // how many levels to expand the tree
|
||
|
LPCITEMIDLIST pidlExpandTo; // NULL, or PIDL to expand to
|
||
|
} NSC_SETROOT;
|
||
|
|
||
|
// Window Messages
|
||
|
|
||
|
#define NSM_SETROOT (WM_USER + 1)
|
||
|
|
||
|
#define NameSpace_SetRoot(hwnd, psr) \
|
||
|
(BOOL)SendMessage(hwnd, NSM_SETROOT, (WPARAM)0, (LPARAM)psr)
|
||
|
|
||
|
#define NSM_GETIDLIST (WM_USER + 2)
|
||
|
|
||
|
#define NameSpace_GetIDList(hwnd, hitem) \
|
||
|
(LPITEMIDLIST)SendMessage(hwnd, NSM_GETPIDL, 0, (WPARAM)hitem)
|
||
|
|
||
|
#define NameSpace_GetFullIDList(hwnd, hitem) \
|
||
|
(LPITEMIDLIST)SendMessage(hwnd, NSM_GETPIDL, 1, (WPARAM)hitem)
|
||
|
|
||
|
#define NSM_GETITEMINFO (WM_USER + 3)
|
||
|
#define NameSpace_GetItemInfo(hwnd, hitem, pinfo) \
|
||
|
(BOOL)SendMessage(hwnd, NSM_GETITEMINFO, (WPARAM)hitem, (LPARAM)pinfo)
|
||
|
|
||
|
#define NSM_FINDITEM (WM_USER + 4)
|
||
|
#define NameSpace_FindItem(hwnd, pidl, pinfo) \
|
||
|
(HNAMESPACEITEM)SendMessage(hwnd, NSM_FINDITEM, (WPARAM)pidl, (LPARAM)pinfo)
|
||
|
|
||
|
#define NSM_DOVERB (WM_USER + 5)
|
||
|
#define NameSpace_DoVerb(hwnd, hitem, pszVerb) \
|
||
|
(HNAMESPACEITEM)SendMessage(hwnd, NSM_DOVERB, (WPARAM)hitem, (LPARAM)pszVerb)
|
||
|
|
||
|
// WM_NOTIFY codes
|
||
|
#define NSN_FIRST (0U - 800)
|
||
|
|
||
|
#define NSN_SELCHANGE (NSN_FIRST - 1)
|
||
|
#define NSN_BEGINDRAG (NSN_FIRST - 2)
|
||
|
#define NSN_ENDDRAG (NSN_FIRST - 3)
|
||
|
#define NSN_FILTERITEM (NSN_FIRST - 4)
|
||
|
#define NSN_PREDOVERB (NSN_FIRST - 5)
|
||
|
#define NSN_AFTERDOVERB (NSN_FIRST - 6)
|
||
|
|
||
|
|
||
|
// structure in lParam for NSN_FILTERITEM
|
||
|
typedef struct {
|
||
|
NMHDR hdr;
|
||
|
NSC_ITEMINFO item;
|
||
|
} NS_NOTIFY;
|
||
|
|
||
|
// private stuff --------------------------------------
|
||
|
|
||
|
// API
|
||
|
|
||
|
BOOL NameSpace_RegisterClass(HINSTANCE hinst);
|
||
|
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
HWND hwnd; // window handle of this control
|
||
|
HWND hwndParent; // parent window to notify
|
||
|
HWND hwndTree; // tree or combo box
|
||
|
DWORD style;
|
||
|
UINT flags; // NSCF_ state bits
|
||
|
UINT id; // our control ID
|
||
|
BOOL fCacheIsDesktop : 1; // state flags
|
||
|
BOOL fAutoExpanding : 1; // tree is auto-expanding
|
||
|
|
||
|
// HWND hwndNextViewer; // BUGBUG: implement this
|
||
|
// HTREEITEM htiCut;
|
||
|
IContextMenu *pcm; // context menu currently being displayed
|
||
|
|
||
|
IShellFolder *psfRoot;
|
||
|
|
||
|
LPITEMIDLIST pidlRoot;
|
||
|
|
||
|
HTREEITEM htiCache; // tree item associated with Current shell folder
|
||
|
IShellFolder *psfCache; // cache of the last IShellFolder I needed...
|
||
|
|
||
|
HTREEITEM htiDragging; // item being dragged
|
||
|
|
||
|
ULONG nChangeNotifyID; // SHChangeNotify registration ID
|
||
|
} NSC;
|
||
|
|
||
|
|
||
|
LPITEMIDLIST _CacheParentShellFolder(NSC *pns, HTREEITEM hti, LPITEMIDLIST pidl);
|
||
|
|
||
|
// nscdrop.c
|
||
|
|
||
|
void CTreeDropTarget_Register(NSC *pns);
|
||
|
void CTreeDropTarget_Revoke(NSC *pns);
|
||
|
|