[SHELL32] CCopyToMenu/CMoveToMenu: Check if this_ is NULL
[reactos.git] / dll / win32 / shell32 / CCopyToMoveToMenu.h
1 /*
2 * PROJECT: shell32
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)
6 */
7 #pragma once
8
9
10 class CCopyToMenu :
11 public CComCoClass<CCopyToMenu, &CLSID_CopyToMenu>,
12 public CComObjectRootEx<CComMultiThreadModelNoCS>,
13 public IContextMenu2,
14 public IObjectWithSite,
15 public IShellExtInit
16 {
17 protected:
18 UINT m_idCmdFirst, m_idCmdLast, m_idCmdCopyTo;
19 CComPtr<IDataObject> m_pDataObject;
20 CComPtr<IUnknown> m_pSite;
21
22 HRESULT DoCopyToFolder(LPCMINVOKECOMMANDINFO lpici);
23 HRESULT DoRealCopy(LPCMINVOKECOMMANDINFO lpici, PCUIDLIST_ABSOLUTE pidl);
24 CStringW DoGetFileTitle();
25
26 public:
27 CComHeapPtr<ITEMIDLIST> m_pidlFolder;
28 WNDPROC m_fnOldWndProc;
29 BOOL m_bIgnoreTextBoxChange;
30
31 CCopyToMenu();
32 ~CCopyToMenu();
33
34 // IContextMenu
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);
38
39 // IContextMenu2
40 virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);
41
42 // IShellExtInit
43 virtual HRESULT WINAPI Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID);
44
45 // IObjectWithSite
46 virtual HRESULT WINAPI SetSite(IUnknown *pUnkSite);
47 virtual HRESULT WINAPI GetSite(REFIID riid, void **ppvSite);
48
49 DECLARE_REGISTRY_RESOURCEID(IDR_COPYTOMENU)
50 DECLARE_NOT_AGGREGATABLE(CCopyToMenu)
51
52 DECLARE_PROTECT_FINAL_CONSTRUCT()
53
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)
59 END_COM_MAP()
60 };
61
62 class CMoveToMenu :
63 public CComCoClass<CMoveToMenu, &CLSID_MoveToMenu>,
64 public CComObjectRootEx<CComMultiThreadModelNoCS>,
65 public IContextMenu2,
66 public IObjectWithSite,
67 public IShellExtInit
68 {
69 protected:
70 UINT m_idCmdFirst, m_idCmdLast, m_idCmdMoveTo;
71 CComPtr<IDataObject> m_pDataObject;
72 CComPtr<IUnknown> m_pSite;
73
74 HRESULT DoMoveToFolder(LPCMINVOKECOMMANDINFO lpici);
75 HRESULT DoRealMove(LPCMINVOKECOMMANDINFO lpici, PCUIDLIST_ABSOLUTE pidl);
76 CStringW DoGetFileTitle();
77
78 public:
79 CComHeapPtr<ITEMIDLIST> m_pidlFolder;
80 WNDPROC m_fnOldWndProc;
81 BOOL m_bIgnoreTextBoxChange;
82
83 CMoveToMenu();
84 ~CMoveToMenu();
85
86 // IContextMenu
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);
90
91 // IContextMenu2
92 virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);
93
94 // IShellExtInit
95 virtual HRESULT WINAPI Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID);
96
97 // IObjectWithSite
98 virtual HRESULT WINAPI SetSite(IUnknown *pUnkSite);
99 virtual HRESULT WINAPI GetSite(REFIID riid, void **ppvSite);
100
101 DECLARE_REGISTRY_RESOURCEID(IDR_MOVETOMENU)
102 DECLARE_NOT_AGGREGATABLE(CMoveToMenu)
103
104 DECLARE_PROTECT_FINAL_CONSTRUCT()
105
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)
111 END_COM_MAP()
112 };