ReactOS  0.4.15-dev-3428-g0609db5
CSendToMenu.h
Go to the documentation of this file.
1 /*
2  * provides new shell item service
3  *
4  * Copyright 2019 Katayama Hirofumi MZ.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #ifndef _SHV_ITEM_SENDTO_H_
22 #define _SHV_ITEM_SENDTO_H_
23 
24 extern "C" const GUID CLSID_SendToMenu;
25 
26 class CSendToMenu :
27  public CComCoClass<CSendToMenu, &CLSID_SendToMenu>,
28  public CComObjectRootEx<CComMultiThreadModelNoCS>,
29  public IContextMenu3,
30  public IShellExtInit
31 {
32 private:
33  struct SENDTO_ITEM
34  {
39 
41  : pNext(NULL)
42  , pidlChild(child)
43  , pszText(text)
44  , hIcon(icon)
45  {
46  }
47 
49  {
53  }
54 
55  private:
56  SENDTO_ITEM();
57  SENDTO_ITEM(const SENDTO_ITEM&);
59  };
60 
64 
65  CComPtr<IShellFolder> m_pDesktop;
66  CComPtr<IShellFolder> m_pSendTo;
67  CComPtr<IDataObject> m_pDataObject;
68 
70  void UnloadAllItems();
71 
72  UINT InsertSendToItems(HMENU hMenu, UINT idFirst, UINT idMenu);
73 
76 
77  HRESULT DoDrop(IDataObject *pDataObject, IDropTarget *pDropTarget);
78  HRESULT GetSpecialFolder(HWND hwnd, IShellFolder **ppFolder, int csidl,
79  PIDLIST_ABSOLUTE *ppidl = NULL);
81 
82 public:
83  CSendToMenu();
84  ~CSendToMenu();
85 
86  // IContextMenu
87  STDMETHODIMP QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
89  STDMETHODIMP GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen);
90 
91  // IContextMenu3
93 
94  // IContextMenu2
96 
97  // IShellExtInit
98  STDMETHODIMP Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID);
99 
103 
105  COM_INTERFACE_ENTRY_IID(IID_IContextMenu3, IContextMenu3)
106  COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2)
107  COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
108  COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit)
109  END_COM_MAP()
110 };
111 
112 #endif /* _SHV_ITEM_SENDTO_H_ */
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static HICON
Definition: imagelist.c:84
#define REFIID
Definition: guiddef.h:118
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
CComPtr< IDataObject > m_pDataObject
Definition: CSendToMenu.h:67
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2022
REFIID riid
Definition: precomp.h:44
const WCHAR * text
Definition: package.c:1827
STDMETHODIMP QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
CComPtr< IShellFolder > m_pSendTo
Definition: CSendToMenu.h:66
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:612
UINT_PTR WPARAM
Definition: windef.h:207
UINT uFlags
Definition: api.c:59
char * LPSTR
Definition: xmlstorage.h:182
static HWND child
Definition: cursoricon.c:298
WPARAM wParam
Definition: combotst.c:138
HRESULT DoDrop(IDataObject *pDataObject, IDropTarget *pDropTarget)
Definition: CSendToMenu.cpp:50
SENDTO_ITEM * FindItemFromIdOffset(UINT IdOffset)
HRESULT GetUIObjectFromPidl(HWND hwnd, PIDLIST_ABSOLUTE pidl, REFIID riid, LPVOID *ppvOut)
SENDTO_ITEM(PITEMID_CHILD child, LPWSTR text, HICON icon)
Definition: CSendToMenu.h:40
#define STDMETHODIMP
Definition: basetyps.h:43
PITEMID_CHILD pidlChild
Definition: CSendToMenu.h:36
SENDTO_ITEM * m_pItems
Definition: CSendToMenu.h:62
LONG_PTR LPARAM
Definition: windef.h:208
STDMETHODIMP HandleMenuMsg2(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *plResult)
STDMETHODIMP Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID)
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:542
LONG HRESULT
Definition: typedefs.h:79
UINT InsertSendToItems(HMENU hMenu, UINT idFirst, UINT idMenu)
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
HMENU m_hSubMenu
Definition: CSendToMenu.h:61
HRESULT LoadAllItems(HWND hwnd)
const GUID CLSID_SendToMenu
Definition: CSendToMenu.h:24
UINT m_idCmdFirst
Definition: CSendToMenu.h:63
#define DECLARE_REGISTRY_RESOURCEID(x)
Definition: atlcom.h:606
STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
SENDTO_ITEM & operator=(const SENDTO_ITEM &)
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:562
STDMETHODIMP GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen)
void UnloadAllItems()
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
Definition: atlcom.h:640
#define IDR_SENDTOMENU
Definition: shresdef.h:877
#define END_COM_MAP()
Definition: atlcom.h:553
WCHAR * LPWSTR
Definition: xmlstorage.h:184
LONG_PTR LRESULT
Definition: windef.h:209
HRESULT GetSpecialFolder(HWND hwnd, IShellFolder **ppFolder, int csidl, PIDLIST_ABSOLUTE *ppidl=NULL)
CComPtr< IShellFolder > m_pDesktop
Definition: CSendToMenu.h:65
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
HRESULT DoSendToItem(SENDTO_ITEM *pItem, LPCMINVOKECOMMANDINFO lpici)
LPARAM lParam
Definition: combotst.c:139
STDMETHODIMP HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam)