ReactOS 0.4.16-dev-1276-g70732b0
CDefViewUtil.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: shell32
3 * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+)
4 * PURPOSE: DefView utility functions
5 * COPYRIGHT: Copyright 2024 Whindmar Saksit <whindsaks@proton.me>
6 */
7
8#include "precomp.h"
9
11
12// This class adapts the legacy function callback to work as an IShellFolderViewCB
14 public CComObjectRootEx<CComMultiThreadModelNoCS>,
15 public IShellFolderViewCB,
16 public CObjectWithSiteBase
17{
18protected:
26
27public:
29
31 {
33 }
34
36 {
37 m_psf = psvcbi->pshf;
38 m_psvOuter = psvcbi->psvOuter;
39 m_Pidl = psvcbi->pidl ? ILClone(psvcbi->pidl) : NULL;
40 m_Callback = psvcbi->pfnCallback;
41 m_FVM = psvcbi->fvm;
42 m_Events = psvcbi->lEvents;
43 return S_OK;
44 }
45
46 // IShellFolderViewCB
48 {
49 switch (uMsg)
50 {
51 case SFVM_HWNDMAIN:
53 break;
54
56 if (m_FVM)
58 break;
59 }
60
62 if (SUCCEEDED(hr))
63 return hr;
64
65 switch (uMsg)
66 {
67 case SFVM_GETNOTIFY:
69 *(LONG*)lParam = m_Events;
70 return S_OK;
71 }
72 return hr;
73 }
74
75 // IObjectWithSite
76 STDMETHODIMP SetSite(IUnknown *pUnkSite) override
77 {
78 // learn.microsoft.com/en-us/windows/win32/shell/sfvm-setisfv
79 HRESULT hr = CObjectWithSiteBase::SetSite(pUnkSite);
80 MessageSFVCB(SFVM_SETISFV, 0, (LPARAM)pUnkSite);
81 return hr;
82 }
83
87 COM_INTERFACE_ENTRY_IID(IID_IShellFolderViewCB, IShellFolderViewCB)
90};
91
92/*************************************************************************
93 * SHCreateShellFolderViewEx [SHELL32.174] (Win95+)
94 */
97{
98 if (!ppsv)
99 return E_INVALIDARG;
100 *ppsv = NULL;
101
102 TRACE("sf=%p pidl=%p cb=%p mode=0x%08x outer=%p\n",
103 pcsfv->pshf, pcsfv->pidl, pcsfv->pfnCallback,
104 pcsfv->fvm, pcsfv->psvOuter);
105
107 SFV_CREATE create = { sizeof(create), pcsfv->pshf, pcsfv->psvOuter };
108
109 if (pcsfv->pfnCallback)
110 {
111 HRESULT hr = ShellObjectCreatorInit<CShellFolderViewCBWrapper>(pcsfv,
112 IID_PPV_ARG(IShellFolderViewCB, &psfvcb));
113 if (FAILED(hr))
114 return hr;
115 create.psfvcb = psfvcb;
116 }
117 return SHCreateShellFolderView(&create, ppsv);
118}
EXTERN_C HRESULT WINAPI SHCreateShellFolderViewEx(_In_ LPCSFV pcsfv, _Out_ IShellView **ppsv)
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4800
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
HRESULT WINAPI Initialize(LPCSFV psvcbi)
CComPtr< IShellView > m_psvOuter
LPFNVIEWCALLBACK m_Callback
virtual ~CShellFolderViewCBWrapper()
STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) override
STDMETHODIMP SetSite(IUnknown *pUnkSite) override
PIDLIST_ABSOLUTE m_Pidl
CComPtr< IShellFolder > m_psf
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_INVALIDARG
Definition: ddrawi.h:101
#define NULL
Definition: types.h:112
HANDLE HWND
Definition: compat.h:19
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:651
#define END_COM_MAP()
Definition: atlcom.h:592
#define DECLARE_NO_REGISTRY()
Definition: atlcom.h:639
const IID IID_IObjectWithSite
static const struct access_res create[16]
Definition: package.c:7505
unsigned int UINT
Definition: ndis.h:50
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
long LONG
Definition: pedump.c:60
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1045
HRESULT hr
Definition: shlfolder.c:183
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1326
HRESULT(CALLBACK * LPFNVIEWCALLBACK)(_In_ IShellView *dwUser, _In_ IShellFolder *pshf, _In_ HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: shlobj.h:1272
#define SFVM_HWNDMAIN
Definition: shlobj.h:1342
#define SFVM_GETNOTIFY
Definition: shlobj.h:1345
#define SFVM_SETISFV
Definition: shlobj.h:1338
FOLDERVIEWMODE
Definition: shobjidl.idl:677
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define TRACE(s)
Definition: solgame.cpp:4
Definition: shlobj.h:1283
FOLDERVIEWMODE fvm
Definition: shlobj.h:1290
IShellView * psvOuter
Definition: shlobj.h:1286
LPFNVIEWCALLBACK pfnCallback
Definition: shlobj.h:1289
LONG lEvents
Definition: shlobj.h:1288
PCIDLIST_ABSOLUTE pidl
Definition: shlobj.h:1287
IShellFolder * pshf
Definition: shlobj.h:1285
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
#define IID_PPV_ARG(Itype, ppType)