163 lines
6.4 KiB
C++
163 lines
6.4 KiB
C++
// XTShellPidl.h : header file
|
||
//
|
||
// This file is a part of the Xtreme Toolkit for MFC.
|
||
// ©1998-2003 Codejock Software, All Rights Reserved.
|
||
//
|
||
// This source code can only be used under the terms and conditions
|
||
// outlined in the accompanying license agreement.
|
||
//
|
||
// support@codejock.com
|
||
// http://www.codejock.com
|
||
//
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
#ifndef __XTSHELLPIDL_H__
|
||
#define __XTSHELLPIDL_H__
|
||
|
||
#if _MSC_VER > 1000
|
||
#pragma once
|
||
#endif // _MSC_VER > 1000
|
||
|
||
LRESULT CALLBACK HookWndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
// Summary: CXTShellPidl is a stand alone base class. This class is used by the
|
||
// shell tree and list controls to handle PIDL creation and management.
|
||
class _XT_EXT_CLASS CXTShellPidl
|
||
{
|
||
public:
|
||
|
||
// Summary: Constructs a CXTShellPidl object.
|
||
CXTShellPidl();
|
||
|
||
// Summary: Destroys a CXTShellPidl object, handles cleanup and de-allocation.
|
||
virtual ~CXTShellPidl();
|
||
|
||
public:
|
||
|
||
// Input: path - File system path string.
|
||
// Returns: A pointer to an item ID list. Returns NULL if it fails.
|
||
// Summary: This member function gets the fully qualified PIDL for the path string.
|
||
LPITEMIDLIST IDLFromPath(CString path);
|
||
|
||
// Input: pidlPath - Fully qualified PIDL.
|
||
// Returns: A fully qualified parent PIDL.
|
||
// Summary: This member function performs the OneUp or back function.
|
||
LPITEMIDLIST OneUpPIDL(LPITEMIDLIST pidlPath);
|
||
|
||
// Input: path - Path string.
|
||
// Returns: A path string to the parent.
|
||
// Summary: This member function gets the parent folder using PIDLs.
|
||
CString OneUpPATH(CString path);
|
||
|
||
// Input: pidl - PIDL list.
|
||
// Returns: A pointer to the last IDL in the list.
|
||
// Summary: This member function walks an ITEMIDLIST and points to the last one.
|
||
LPITEMIDLIST GetLastITEM(LPITEMIDLIST pidl);
|
||
|
||
// Input: pidl - Pointer to an ITEMIDLIST.
|
||
// Returns: A new pointer to a copy of the PIDL.
|
||
// Summary: This member function copies a whole ITEMIDLIST. Remember to Free()
|
||
// the old one if it is no longer needed.
|
||
LPITEMIDLIST CopyIDList(LPITEMIDLIST pidl);
|
||
|
||
// Input: pidl1 - Pointer to an item ID list.
|
||
// pidl2 - Pointer to an item ID list.
|
||
// Returns: A pointer to an item ID list.
|
||
// Summary: This member function concatenates two PIDLs.
|
||
LPITEMIDLIST ConcatPidls(LPCITEMIDLIST pidl1,LPCITEMIDLIST pidl2);
|
||
|
||
// Input: lpsf - Pointer to the parent shell folder.
|
||
// lpi - Pointer to the item ID that is relative to 'lpsf'.
|
||
// Returns: A pointer to an item ID list.
|
||
// Summary: This member function gets the fully qualified PIDLs for the specified
|
||
// folder.
|
||
LPITEMIDLIST GetFullyQualPidl(LPSHELLFOLDER lpsf,LPITEMIDLIST lpi);
|
||
|
||
// Input: lpMalloc - Points to the shell’s IMalloc interface.
|
||
// lpi - Pointer to item ID that is to be copied.
|
||
// Returns: A pointer to an item ID list.
|
||
// Summary: This member function copies the ITEMID.
|
||
LPITEMIDLIST DuplicateItem(LPMALLOC lpMalloc,LPITEMIDLIST lpi);
|
||
|
||
// Input: lpsf - Pointer to the parent shell folder.
|
||
// lpi - Pointer to the item ID that is relative to 'lpsf'.
|
||
// dwFlags - Flags to determine which value to return. See SHGNO for more details.
|
||
// lpFriendlyName - Buffer to receive the friendly name of the folder.
|
||
// Returns: TRUE if successful, otherwise returns FALSE.
|
||
// Summary: This member function gets the friendly name for the folder or file.
|
||
BOOL GetName(LPSHELLFOLDER lpsf,LPITEMIDLIST lpi,DWORD dwFlags,TCHAR* lpFriendlyName);
|
||
|
||
// Input: cbSize - Initial size of the PIDL.
|
||
// Returns: A pointer to an item ID list.
|
||
// Summary: This member function allocates a PIDL.
|
||
LPITEMIDLIST CreatePidl(UINT cbSize);
|
||
|
||
// Input: pidl - Pointer to an item ID list.
|
||
// Returns: The number of item IDs in the list.
|
||
// Summary: This member function computes the number of item IDs in an item ID
|
||
// list.
|
||
UINT GetPidlItemCount(LPCITEMIDLIST pidl);
|
||
|
||
// Input: pidl - Pointer to an item ID list.
|
||
// Returns: A pointer to the next PIDL item in the list.
|
||
// Summary: This member function gets the next PIDL in the list.
|
||
LPITEMIDLIST GetNextPidlItem(LPCITEMIDLIST pidl);
|
||
|
||
// Input: hwnd - Context menu owner.
|
||
// lpsfParent - Pointer to the parent shell folder.
|
||
// lpi - Pointer to the item ID that is relative to 'lpsfParent'.
|
||
// nCount - Number of PIDLs.
|
||
// lppt - Screen location of where to popup the menu.
|
||
// Returns: TRUE on success, or FALSE on failure.
|
||
// Summary: This member function displays a popup context menu, given a parent
|
||
// shell folder, relative item ID, and screen location.
|
||
BOOL ShowContextMenu(HWND hwnd,LPSHELLFOLDER lpsfParent,LPCITEMIDLIST *lpi,int nCount,LPPOINT lppt);
|
||
|
||
// Input: hwnd - Context menu owner.
|
||
// lpsfParent - Pointer to the parent shell folder.
|
||
// lpi - Pointer to the item ID that is relative to 'lpsfParent'.
|
||
// lppt - Screen location of where to popup the menu.
|
||
// Returns: TRUE on success, or FALSE on failure.
|
||
// Summary: This member function displays a popup context menu, given a parent
|
||
// shell folder, relative item ID, and screen location.
|
||
BOOL ShowContextMenu(HWND hwnd,LPSHELLFOLDER lpsfParent,LPITEMIDLIST lpi,LPPOINT lppt);
|
||
|
||
// Input: lpi - Fully qualified item ID list for the current item.
|
||
// uFlags - Flags for SHGetFileInfo().
|
||
// Returns: An icon index for the current item.
|
||
// Summary: This member function gets the index for the current icon. Index is
|
||
// the index into the system image list.
|
||
int GetItemIcon(LPITEMIDLIST lpi,UINT uFlags);
|
||
|
||
// Input: psfFolder - A pointer to a valid IShellFolder data type.
|
||
// localPidl - A pointer to a valid _ITEMIDLIST structure.
|
||
// nCount - Number of items in the context menu.
|
||
// ppCM - Long pointer to a CONTEXTMENU struct.
|
||
// pcmType - A pointer to a valid int data type that represents the version number
|
||
// of the context menu.
|
||
// Returns: An HRESULT value.
|
||
// Summary: This member function gets the IContextMenu, IContextMenu2 or IContextMenu3
|
||
// interface.
|
||
HRESULT GetSHContextMenu(LPSHELLFOLDER psfFolder,LPCITEMIDLIST *localPidl,int nCount,void** ppCM,int* pcmType);
|
||
|
||
protected:
|
||
virtual void OnShowContextMenu(int idCmd, CMINVOKECOMMANDINFO& cmi);
|
||
|
||
private:
|
||
|
||
static WNDPROC m_pOldWndProc; // regular window proc
|
||
static LPCONTEXTMENU2 m_pIContext2; // active shell context menu
|
||
|
||
static LRESULT CALLBACK HookWndProc(
|
||
HWND hWnd,
|
||
UINT msg,
|
||
WPARAM wp,
|
||
LPARAM lp);
|
||
|
||
};
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
#endif // __XTSHELLPIDL_H__
|