windows-nt/Source/XPSP1/NT/shell/osshell/control/mmsys/subobj.h

229 lines
6.5 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
//****************************************************************************
//
// Module: mmsys.cpl
// File: subobj.h
// Content: This file contains the subobject (our own object)
// storage space and manipulation mechanisms.
//
// History:
// 06/94 VijR Created
//
// Copyright (c) Microsoft Corporation 1991-1994
//
//****************************************************************************
#ifndef _SUBOBJ_H_
#define _SUBOBJ_H_
// This structure is used as the LPITEMIDLIST that
// the shell uses to identify objects in a folder. The
// first two bytes are required to indicate the size,
// the rest of the data is opaque to the shell.
typedef struct _SUBOBJ
{
USHORT cbSize; // Size of this struct
UINT uFlags; // One of SOF_ values
short nIconIndex;
short iSort;
short iOffsetIconFile;
short iOffsetDesc;
short iOffsetClass;
short iOffsetExtPropFile;
short iOffsetExtPropFunc;
short iOffsetExtCLSID;
short iOffsetPlayCmdLn;
short iOffsetOpenCmdLn;
short iOffsetNewCmdLn;
HICON hClassIcon;
struct _SUBOBJ FAR * psoNext;
TCHAR szName[1]; // Display name
} SUBOBJ, FAR * PSUBOBJ;
// LPCTSTR Subobj_GetName(PSUBOBJ pso);
//
// Gets the subobject name.
//
#define Subobj_GetName(pso) ((pso)->szName)
// UINT Subobj_GetFlags(PSUBOBJ pso);
//
// Gets the subobject flags.
//
#define Subobj_GetFlags(pso) ((pso)->uFlags)
// int Subobj_GetIconIndex(PSUBOBJ pso);
//
// Gets the subobject icon.
//
#define Subobj_GetIconIndex(pso) ((pso)->nIconIndex)
// LPTSTR Subobj_GetIconFile(PSUBOBJ pso);
//
// Gets the subobject icon Index in file.
//
#define Subobj_GetIconFile(pso) ((LPTSTR)((pso)->szName + (pso)->iOffsetIconFile))
// LPTSTR Subobj_GetDesc(PSUBOBJ pso);
//
// Gets the subobject IconFile name.
//
#define Subobj_GetDesc(pso) ((LPTSTR)((pso)->szName + (pso)->iOffsetDesc))
// LPTSTR Subobj_GetClass(PSUBOBJ pso);
//
// Gets the subobject Clas Name
//
#define Subobj_GetClass(pso) ((LPTSTR)((pso)->szName + (pso)->iOffsetClass))
// int Subobj_GetSortIndex(PSUBOBJ pso);
//
// Gets the subobject Sort order.
//
#define Subobj_GetSortIndex(pso) ((pso)->iSort)
// HICON Subobj_GetClassIcon(PSUBOBJ pso);
//
// Gets the subobject Object Icon.
//
#define Subobj_GetClassIcon(pso) ((pso)->hClassIcon)
// LPTSTR Subobj_GetExtPropFile(PSUBOBJ pso);
//
// Gets the subobject External Class File.
//
#define Subobj_GetExtPropFile(pso) ((LPTSTR)((pso)->szName + (pso)->iOffsetExtPropFile))
// LPTSTR Subobj_GetExtPropFunc(PSUBOBJ pso);
//
// Gets the subobject External Class Func.
//
#define Subobj_GetExtPropFunc(pso) ((LPTSTR)((pso)->szName + (pso)->iOffsetExtPropFunc))
// LPTSTR Subobj_GetExtCLSID(PSUBOBJ pso);
//
// Gets the subobject external CLSID.
//
#define Subobj_GetExtCLSID(pso) ((LPTSTR)((pso)->szName + (pso)->iOffsetExtCLSID))
// LPTSTR Subobj_GetPlayCmdLn(PSUBOBJ pso);
//
// Gets the subobject command line
//
#define Subobj_GetPlayCmdLn(pso) ((LPTSTR)((pso)->szName + (pso)->iOffsetPlayCmdLn))
// LPTSTR Subobj_GetOpenCmdLn(PSUBOBJ pso);
//
// Gets the subobject command line
//
#define Subobj_GetOpenCmdLn(pso) ((LPTSTR)((pso)->szName + (pso)->iOffsetOpenCmdLn))
// LPTSTR Subobj_GetNewCmdLn(PSUBOBJ pso);
//
// Gets the subobject command line.
//
#define Subobj_GetNewCmdLn(pso) ((LPTSTR)((pso)->szName + (pso)->iOffsetNewCmdLn))
// Some other Subobj functions...
//
BOOL PUBLIC Subobj_New(PSUBOBJ FAR * ppso, LPCTSTR pszClass, LPCTSTR pszName, LPCTSTR pszDesc, LPCTSTR pszIconFile, LPCTSTR pszExtPropFile,
LPCTSTR pszExtPropFunc,LPCTSTR pszExtCLSID, LPCTSTR pszPlayCmdLn, LPCTSTR pszOpenCmdLn,
LPCTSTR pszNewCmdLn,short nIconIndex, UINT uFlags, short iSort);
void PUBLIC Subobj_Destroy(PSUBOBJ pso);
BOOL PUBLIC Subobj_Dup(PSUBOBJ FAR * ppso, PSUBOBJ psoArgs);
#ifdef DEBUG
void PUBLIC Subobj_Dump(PSUBOBJ pso);
#endif
typedef struct _SUBOBJSPACE
{
PSUBOBJ psoFirst;
PSUBOBJ psoLast;
int cItems;
int cRef;
} SUBOBJSPACE, FAR * PSUBOBJSPACE;
// PSUBOBJ Sos_FirstItem(void);
//
// Returns the first object in the subobject space. NULL if empty.
//
#define Sos_FirstItem(psos) (psos->psoFirst)
// PSUBOBJ Sos_NextItem(PSUBOBJ pso);
//
// Returns the next object in the subobject space. NULL if no more
// objects.
//
#define Sos_NextItem(pso) (pso ? pso->psoNext : NULL)
// Other subobject space functions
//
PSUBOBJ PUBLIC Sos_FindItem(PSUBOBJSPACE psos, LPCTSTR pszName);
BOOL PUBLIC Sos_AddItem(PSUBOBJSPACE psos, PSUBOBJ pso);
USHORT PUBLIC Sos_GetMaxSize(PSUBOBJSPACE psos);
PSUBOBJ PUBLIC Sos_RemoveItem(PSUBOBJSPACE psos, LPCTSTR pszName);
void PUBLIC Sos_Destroy(PSUBOBJSPACE psos);
int PUBLIC Sos_FillFromRegistry(PSUBOBJSPACE psos, LPITEMIDLIST pidl);
BOOL PUBLIC Sos_Init(PSUBOBJSPACE psos, LPITEMIDLIST pidl, BOOL fAdvancedFolder);
HRESULT PUBLIC Sos_AddRef(PSUBOBJSPACE psos, LPITEMIDLIST pidl, BOOL fAdvancedFolder);
void PUBLIC Sos_Release(PSUBOBJSPACE psos);
#define SOF_ISFOLDER 0x0001
#define SOF_ISDROPTARGET 0x0002
#define SOF_CANDELETE 0x0004
#define SOF_HASEXTPROPSHEET 0x0008
#define SOF_ISEXTOBJECT 0x0010
#define SOF_DOESPLAY 0x0020
#define SOF_DOESOPEN 0x0040
#define SOF_DOESNEW 0x0080
#define SOUNDEVENTS TEXT("Sound Events")
#define WAVE TEXT("Wave")
#define MIDI TEXT("MIDI")
#define MIXER TEXT("Mixer")
#define AUX TEXT("Aux")
#define ACM TEXT("ACM")
#define ICM TEXT("ICM")
#define MCI TEXT("MCI")
#define AUDIO TEXT("Audio")
#define CDAUDIO TEXT("CDAudio")
#define VIDEO TEXT("Video")
#define VOICE TEXT("Voice")
#define ADVANCEDFOLDER TEXT("Advanced Folder")
#ifdef DEBUG
void PUBLIC Sos_DumpList(void);
#endif
//extern SUBOBJSPACE g_sos;
//
// Other prototypes...
//
HRESULT PUBLIC mmseObj_CreateInstance(LPSHELLFOLDER psf, UINT cidl, BOOL fInAdvancedFolder, LPCITEMIDLIST FAR * ppidl, LPCITEMIDLIST pidlRoot, LPSHELLVIEW csv, REFIID riid, LPVOID FAR * ppvOut);
HRESULT NEAR PASCAL mmseView_Command(LPSHELLVIEW psv, HWND hwnd, UINT uID);
LPTSTR PUBLIC lmemset(LPTSTR dst, char val, UINT count);
LPTSTR PUBLIC lmemmove(LPTSTR dst, LPTSTR src, int count);
int PUBLIC AnsiToInt(LPCTSTR pszString);
int PUBLIC DoModal (HWND hwndParent, DLGPROC lpfnDlgProc, UINT uID, LPARAM lParam);
HMENU PUBLIC LoadPopupMenu(UINT id, UINT uSubOffset);
UINT PUBLIC MergePopupMenu(HMENU FAR *phMenu, UINT idResource, UINT uSubOffset, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast);
HMENU PUBLIC GetMenuFromID(HMENU hmMain, UINT uID);
#endif // _SUBOBJ_H_