// // publics for defcm // // Some code that knows defcm will be used likes to prepare the menu first. // If you do this, you must call SHPrettyMenuForDefcm instead of _SHPrettyMenu HRESULT SHPrepareMenuForDefcm(HMENU hmenu, UINT indexMenu, UINT uFlags, UINT idCmdFirst, UINT idCmdLast); // sets things up HRESULT SHPrettyMenuForDefcm(HMENU hmenu, UINT uFlags, UINT idCmdFirst, UINT idCmdLast, HRESULT hrPrepare); // cleans things up part way HRESULT SHUnprepareMenuForDefcm(HMENU hmenu, UINT idCmdFirst, UINT idCmdLast); // cleans things up the rest of the way (not required if you're just destroying the menu) STDAPI CDefFolderMenu_CreateHKeyMenu(HWND hwndOwner, HKEY hkey, IContextMenu **ppcm); STDAPI CDefFolderMenu_Create2Ex(LPCITEMIDLIST pidlFolder, HWND hwnd, UINT cidl, LPCITEMIDLIST *apidl, IShellFolder *psf, IContextMenuCB *pcmcb, UINT nKeys, const HKEY *ahkeyClsKeys, IContextMenu **ppcm); STDAPI CDefFolderMenu_CreateEx(LPCITEMIDLIST pidlFolder, HWND hwnd, UINT cidl, LPCITEMIDLIST *apidl, IShellFolder *psf, IContextMenuCB *pcmcb, HKEY hkeyProgID, HKEY hkeyBaseProgID, IContextMenu **ppcm); STDAPI_(void) DrawMenuItem(DRAWITEMSTRUCT* pdi, LPCTSTR pszText, UINT iIcon); STDAPI_(LRESULT) MeasureMenuItem(MEASUREITEMSTRUCT *pmi, LPCTSTR pszText); typedef struct { UINT max; struct { UINT id; UINT fFlags; } list[2]; } IDMAPFORQCMINFO; extern const IDMAPFORQCMINFO g_idMap; typedef struct { HWND hwnd; IContextMenuCB *pcmcb; LPCITEMIDLIST pidlFolder; IShellFolder *psf; UINT cidl; LPCITEMIDLIST *apidl; IAssociationArray *paa; UINT cKeys; const HKEY *aKeys; } DEFCONTEXTMENU; STDAPI CreateDefaultContextMenu(DEFCONTEXTMENU *pdcm, IContextMenu **ppcm); class CDefBackgroundMenuCB : public IContextMenuCB { public: CDefBackgroundMenuCB(LPCITEMIDLIST pidlFolder); // IUnknown STDMETHODIMP QueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // IContextMenuCB STDMETHODIMP CallBack(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam); private: virtual ~CDefBackgroundMenuCB(); LPITEMIDLIST _pidlFolder; LONG _cRef; };