3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: CopyTo and MoveTo implementation
5 * COPYRIGHT: Copyright 2020 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
11 public CComCoClass
<CCopyToMenu
, &CLSID_CopyToMenu
>,
12 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
14 public IObjectWithSite
,
18 UINT m_idCmdFirst
, m_idCmdLast
, m_idCmdCopyTo
;
19 CComPtr
<IDataObject
> m_pDataObject
;
20 CComPtr
<IUnknown
> m_pSite
;
22 HRESULT
DoCopyToFolder(LPCMINVOKECOMMANDINFO lpici
);
23 HRESULT
DoRealCopy(LPCMINVOKECOMMANDINFO lpici
, PCUIDLIST_ABSOLUTE pidl
);
24 CStringW
DoGetFileTitle();
27 CComHeapPtr
<ITEMIDLIST
> m_pidlFolder
;
28 WNDPROC m_fnOldWndProc
;
29 BOOL m_bIgnoreTextBoxChange
;
35 virtual HRESULT WINAPI
QueryContextMenu(HMENU hMenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
);
36 virtual HRESULT WINAPI
InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi
);
37 virtual HRESULT WINAPI
GetCommandString(UINT_PTR idCommand
, UINT uFlags
, UINT
*lpReserved
, LPSTR lpszName
, UINT uMaxNameLen
);
40 virtual HRESULT WINAPI
HandleMenuMsg(UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
43 virtual HRESULT WINAPI
Initialize(PCIDLIST_ABSOLUTE pidlFolder
, IDataObject
*pdtobj
, HKEY hkeyProgID
);
46 virtual HRESULT WINAPI
SetSite(IUnknown
*pUnkSite
);
47 virtual HRESULT WINAPI
GetSite(REFIID riid
, void **ppvSite
);
49 DECLARE_REGISTRY_RESOURCEID(IDR_COPYTOMENU
)
50 DECLARE_NOT_AGGREGATABLE(CCopyToMenu
)
52 DECLARE_PROTECT_FINAL_CONSTRUCT()
54 BEGIN_COM_MAP(CCopyToMenu
)
55 COM_INTERFACE_ENTRY_IID(IID_IContextMenu2
, IContextMenu2
)
56 COM_INTERFACE_ENTRY_IID(IID_IContextMenu
, IContextMenu
)
57 COM_INTERFACE_ENTRY_IID(IID_IShellExtInit
, IShellExtInit
)
58 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite
, IObjectWithSite
)
63 public CComCoClass
<CMoveToMenu
, &CLSID_MoveToMenu
>,
64 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
66 public IObjectWithSite
,
70 UINT m_idCmdFirst
, m_idCmdLast
, m_idCmdMoveTo
;
71 CComPtr
<IDataObject
> m_pDataObject
;
72 CComPtr
<IUnknown
> m_pSite
;
74 HRESULT
DoMoveToFolder(LPCMINVOKECOMMANDINFO lpici
);
75 HRESULT
DoRealMove(LPCMINVOKECOMMANDINFO lpici
, PCUIDLIST_ABSOLUTE pidl
);
76 CStringW
DoGetFileTitle();
79 CComHeapPtr
<ITEMIDLIST
> m_pidlFolder
;
80 WNDPROC m_fnOldWndProc
;
81 BOOL m_bIgnoreTextBoxChange
;
87 virtual HRESULT WINAPI
QueryContextMenu(HMENU hMenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
);
88 virtual HRESULT WINAPI
InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi
);
89 virtual HRESULT WINAPI
GetCommandString(UINT_PTR idCommand
, UINT uFlags
, UINT
*lpReserved
, LPSTR lpszName
, UINT uMaxNameLen
);
92 virtual HRESULT WINAPI
HandleMenuMsg(UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
95 virtual HRESULT WINAPI
Initialize(PCIDLIST_ABSOLUTE pidlFolder
, IDataObject
*pdtobj
, HKEY hkeyProgID
);
98 virtual HRESULT WINAPI
SetSite(IUnknown
*pUnkSite
);
99 virtual HRESULT WINAPI
GetSite(REFIID riid
, void **ppvSite
);
101 DECLARE_REGISTRY_RESOURCEID(IDR_MOVETOMENU
)
102 DECLARE_NOT_AGGREGATABLE(CMoveToMenu
)
104 DECLARE_PROTECT_FINAL_CONSTRUCT()
106 BEGIN_COM_MAP(CMoveToMenu
)
107 COM_INTERFACE_ENTRY_IID(IID_IContextMenu2
, IContextMenu2
)
108 COM_INTERFACE_ENTRY_IID(IID_IContextMenu
, IContextMenu
)
109 COM_INTERFACE_ENTRY_IID(IID_IShellExtInit
, IShellExtInit
)
110 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite
, IObjectWithSite
)