windows-nt/Source/XPSP1/NT/multimedia/media/avi/inc.16/shlobj.h
2020-09-26 16:20:57 +08:00

315 lines
9.8 KiB
C

//---------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation 1991-1994
//
// File: shlobj.h
//
// Definitions of IShellUI interface. Eventually this file should be merged
// into COMMUI.H.
//
// History:
// 12-30-92 SatoNa Created.
// 01-06-93 SatoNa Added this comment block.
// 01-13-93 SatoNa Added DragFilesOver & DropFiles
// 01-27-93 SatoNa Created by combining shellui.h and handler.h
// 01-28-93 SatoNa OLE 2.0 beta 2
// 03-12-93 SatoNa Removed IFileDropTarget (we use IDropTarget)
//
//---------------------------------------------------------------------------
#ifndef _SHLOBJ_H_
#define _SHLOBJ_H_
#include <ole2.h>
#include <prsht.h>
#include <shell2.h>
#ifndef INITGUID
#include <shlguid.h>
#endif
typedef void const FAR* LPCVOID;
//----------------------------------------------------------------------------
//
// Shell Extension API
//
//----------------------------------------------------------------------------
//
// Task allocator
//
// All the shell extensions MUST use this allocator when they allocate
// or free memory objects that are passed across any shell interface
// boundary.
//
// REVIEW:
// It would be really nice if we can guarantee that shell's task
// allocator and OLE's task allocator is always the same. it is,
// however, not so easy to do, because:
//
// 1. We don't want to load COMPOBJ unless a shell extension DLL
// loads it. We need to be notified when COMPOBJ is loaded.
// 2. We need to register our task allocator to the COMPOBJ
// if one of shell extension DLLs loads it into the shell
// process.
// 3. We need to get the task allocator from the COMPOBJ, if
// the shell dll is loaded by non-shell process that registers
// the task allocator to the COMPOBJ.
//
LPVOID WINAPI SHAlloc(ULONG cb);
LPVOID WINAPI SHRealloc(LPVOID pv, ULONG cbNew);
ULONG WINAPI SHGetSize(LPVOID pv);
void WINAPI SHFree(LPVOID pv);
//
// Helper macro definitions
//
#define S_BOOL(f) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_NULL, f)
//----------------------------------------------------------------------------
//
// Interface: IContextMenu
//
// History:
// 02-24-93 SatoNa Created.
//
//----------------------------------------------------------------------------
#undef INTERFACE
#define INTERFACE IContextMenu
#define CMF_DEFAULTONLY 0x00000001
DECLARE_INTERFACE_(IContextMenu, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(QueryContextMenu)(THIS_
HMENU hmenu,
UINT indexMenu,
UINT idCmdFirst,
UINT idCmdLast,
UINT uFlags) PURE;
STDMETHOD(InvokeCommand)(THIS_
HWND hwndParent,
LPCSTR pszWorkingDir,
LPCSTR pszCmd,
LPCSTR pszParam,
int iShowCmd) PURE;
STDMETHOD(GetCommandString)(THIS_
UINT idCmd,
UINT wReserved,
UINT FAR * pwReserved,
LPSTR pszName,
UINT cchMax) PURE;
};
typedef IContextMenu FAR* LPCONTEXTMENU;
// GetIconLocation() input flags
#define GIL_OPENICON 0x0001 // allows containers to specify an "open" look
// return FALSE to get the standard look
// GetIconLocation() return flags
#define GIL_SIMULATEDOC 0x0001 // simulate this document icon for this
#define GIL_PERINSTANCE 0x0002 // icons from this class are per instance (each file has its own)
#define GIL_PERCLASS 0x0004 // icons from this class per class (shared for all files of this type)
#include <fcext.h> // Browser extension interfaces are defined in FCEXT.H
//==========================================================================
// Helper macro for C programmers
//#ifdef WIN32
#define LPTONP(p) (p)
//#else
//#define LPTONP(p) OFFSETOF(p)
//#endif // WIN32
#define _IOffset(class, itf) ((UINT)&(((class *)0)->itf))
#define IToClass(class, itf, pitf) ((class FAR *)(((LPSTR)pitf)-_IOffset(class, itf)))
#define IToClassN(class, itf, pitf) ((class *)LPTONP(((LPSTR)pitf)-_IOffset(class, itf)))
//===========================================================================
HRESULT STDAPICALLTYPE Link_CreateInstance(LPUNKNOWN punkOuter, REFIID riid, LPVOID FAR* ppvOut);
//
// Helper functions for component object DLLs
//
//===========================================================================
typedef HRESULT (CALLBACK FAR * LPFNCREATEINSTANCE)(
LPUNKNOWN pUnkOuter,
REFIID riid,
LPVOID FAR* ppvObject);
STDAPI Shell_CreateDefClassObject(REFIID riid, LPVOID FAR* ppv,
LPFNCREATEINSTANCE lpfn, UINT FAR * pcRefDll,
REFIID riidInstance);
//===========================================================================
//
// Interface: IShellExtInit
//
// This interface is used to initialize shell extension objects.
//
//===========================================================================
#undef INTERFACE
#define INTERFACE IShellExtInit
DECLARE_INTERFACE_(IShellExtInit, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellExtInit methods ***
STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST pidlFolder,
LPDATAOBJECT lpdobj, HKEY hkeyProgID) PURE;
};
typedef IShellExtInit FAR* LPSHELLEXTINIT;
#undef INTERFACE
#define INTERFACE IShellPropSheetExt
DECLARE_INTERFACE_(IShellPropSheetExt, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellPropSheetExt methods ***
STDMETHOD(AddPages)(THIS_ LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam) PURE;
};
typedef IShellPropSheetExt FAR* LPSHELLPROPSHEETEXT;
//===========================================================================
//
// IPersistFolder Interface
//
// This interface is used by the Folder implementation of
// IMoniker::BindToObject when it is initializing a folder object.
//
//===========================================================================
#undef INTERFACE
#define INTERFACE IPersistFolder
DECLARE_INTERFACE_(IPersistFolder, IPersist) // fld
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IPersist methods ***
STDMETHOD(GetClassID) (THIS_ LPCLSID lpClassID) PURE;
// *** IPersistFolder methods ***
STDMETHOD(Initialize) (THIS_
LPCITEMIDLIST pidl) PURE;
};
typedef IPersistFolder FAR* LPPERSISTFOLDER;
//
// IExtractIcon interface
//
#undef INTERFACE
#define INTERFACE IExtractIcon
DECLARE_INTERFACE_(IExtractIcon, IUnknown) // exic
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IExtractIcon methods ***
STDMETHOD(GetIconLocation)(THIS_
UINT uFlags,
LPSTR szIconFile,
UINT cchMax,
int FAR * piIndex,
UINT FAR * pwFlags) PURE;
STDMETHOD(ExtractIcon)(THIS_
LPCSTR pszFile,
UINT nIconIndex,
HICON FAR *phiconLarge,
HICON FAR *phiconSmall,
UINT nIcons) PURE;
};
typedef IExtractIcon FAR* LPEXTRACTICON;
//===========================================================================
// Network resource array handle
//===========================================================================
typedef HANDLE HNRES;
typedef struct _NETRESOURCE FAR *LPNETRESOURCE;
UINT WINAPI SHGetNetResource(HNRES hnres, UINT iItem, LPNETRESOURCE pnres, UINT cbMax);
//
// IShellLink Interface
//
#undef INTERFACE
#define INTERFACE IShellLink
DECLARE_INTERFACE_(IShellLink, IUnknown) // sl
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(IsLinkToFile)(THIS) PURE;
STDMETHOD(GetSubject)(THIS_ LPSTR pszFile, int cchMaxPath, WIN32_FIND_DATA *pfd, UINT fFlags) PURE;
STDMETHOD(SetSubject)(THIS_ LPCSTR pszFile, const WIN32_FIND_DATA *pfd) PURE;
STDMETHOD(GetWorkingDirectory)(THIS_ LPSTR pszDir, int cchMaxPath) PURE;
STDMETHOD(SetWorkingDirectory)(THIS_ LPCSTR pszDir) PURE;
STDMETHOD(GetArguments)(THIS_ LPSTR pszArgs, int cchMaxPath) PURE;
STDMETHOD(SetArguments)(THIS_ LPCSTR pszArgs) PURE;
STDMETHOD(GetHotkey)(THIS_ WORD *pwHotkey) PURE;
STDMETHOD(SetHotkey)(THIS_ WORD wHotkey) PURE;
STDMETHOD(GetShowCmd)(THIS_ int *piShowCmd) PURE;
STDMETHOD(SetShowCmd)(THIS_ int iShowCmd) PURE;
STDMETHOD(GetIconLocation)(THIS_ LPSTR pszIconPath, int cchIconPath, int *piIcon) PURE;
STDMETHOD(SetIconLocation)(THIS_ LPCSTR pszIconPath, int iIcon) PURE;
STDMETHOD(Resolve)(THIS_ HWND hwnd, UINT fFlags) PURE;
STDMETHOD(Update)(THIS_ UINT fFlags) PURE;
};
#endif // _SHELLUI_H_