2 * provides new shell item service
4 * Copyright 2007 Johannes Anderwald (johannes.anderwald@reactos.org)
5 * Copyright 2009 Andrew Hill
6 * Copyright 2012 Rafal Harabien
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 #ifndef _SHV_ITEM_NEW_H_
24 #define _SHV_ITEM_NEW_H_
26 const WCHAR ShellNewKey
[] = L
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Discardable\\PostSetup\\ShellNew";
29 public CComCoClass
<CNewMenu
, &CLSID_NewMenu
>,
30 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
31 public IObjectWithSite
,
38 SHELLNEW_TYPE_INVALID
= -1,
39 SHELLNEW_TYPE_COMMAND
= 1,
40 SHELLNEW_TYPE_DATA
= 2,
41 SHELLNEW_TYPE_FILENAME
= 4,
42 SHELLNEW_TYPE_NULLFILE
= 8
56 LPITEMIDLIST m_pidlFolder
;
58 SHELLNEW_ITEM
*m_pItems
;
59 SHELLNEW_ITEM
*m_pLinkItem
;
60 CComPtr
<IUnknown
> m_pSite
;
62 HICON m_hiconFolder
, m_hiconLink
;
65 SHELLNEW_ITEM
*LoadItem(LPCWSTR pwszExt
);
66 void UnloadItem(SHELLNEW_ITEM
*pItem
);
67 void UnloadAllItems();
69 BOOL
LoadCachedItems();
71 UINT
InsertShellNewItems(HMENU hMenu
, UINT idFirst
, UINT idMenu
);
72 SHELLNEW_ITEM
*FindItemFromIdOffset(UINT IdOffset
);
73 HRESULT
CreateNewFolder(LPCMINVOKECOMMANDINFO lpici
);
74 HRESULT
CreateNewItem(SHELLNEW_ITEM
*pItem
, LPCMINVOKECOMMANDINFO lpcmi
);
75 HRESULT
SelectNewItem(LPCMINVOKECOMMANDINFO lpici
, LONG wEventId
, UINT uFlags
, LPWSTR pszName
);
82 virtual HRESULT STDMETHODCALLTYPE
SetSite(IUnknown
*pUnkSite
);
83 virtual HRESULT STDMETHODCALLTYPE
GetSite(REFIID riid
, void **ppvSite
);
86 virtual HRESULT WINAPI
QueryContextMenu(HMENU hMenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
);
87 virtual HRESULT WINAPI
InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi
);
88 virtual HRESULT WINAPI
GetCommandString(UINT_PTR idCommand
, UINT uFlags
, UINT
*lpReserved
, LPSTR lpszName
, UINT uMaxNameLen
);
91 virtual HRESULT WINAPI
HandleMenuMsg2(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
);
94 virtual HRESULT WINAPI
HandleMenuMsg(UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
97 virtual HRESULT STDMETHODCALLTYPE
Initialize(LPCITEMIDLIST pidlFolder
, IDataObject
*pdtobj
, HKEY hkeyProgID
);
99 DECLARE_REGISTRY_RESOURCEID(IDR_NEWMENU
)
100 DECLARE_NOT_AGGREGATABLE(CNewMenu
)
102 DECLARE_PROTECT_FINAL_CONSTRUCT()
104 BEGIN_COM_MAP(CNewMenu
)
105 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite
, IObjectWithSite
)
106 COM_INTERFACE_ENTRY_IID(IID_IContextMenu3
, IContextMenu3
)
107 COM_INTERFACE_ENTRY_IID(IID_IContextMenu2
, IContextMenu2
)
108 COM_INTERFACE_ENTRY_IID(IID_IContextMenu
, IContextMenu
)
109 COM_INTERFACE_ENTRY_IID(IID_IShellExtInit
, IShellExtInit
)
113 #endif /* _SHV_ITEM_NEW_H_ */