4 * Copyright 2003 Martin Fuchs
5 * Copyright 2009 Andrew Hill
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #ifndef _SHFLDR_CPANEL_H_
23 #define _SHFLDR_CPANEL_H_
25 class CControlPanelFolder
:
26 public CComCoClass
<CControlPanelFolder
, &CLSID_ControlPanel
>,
27 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
29 public IPersistFolder2
32 /* both paths are parsible from the desktop */
33 LPITEMIDLIST pidlRoot
; /* absolute pidl */
34 int dwAttributes
; /* attributes returned by GetAttributesOf FIXME: use it */
35 CComPtr
<IShellFolder2
> m_regFolder
;
37 HRESULT WINAPI
ExecuteFromIdList(LPCITEMIDLIST pidl
);
40 CControlPanelFolder();
41 ~CControlPanelFolder();
44 STDMETHOD(ParseDisplayName
)(HWND hwndOwner
, LPBC pbc
, LPOLESTR lpszDisplayName
, DWORD
*pchEaten
, PIDLIST_RELATIVE
*ppidl
, DWORD
*pdwAttributes
) override
;
45 STDMETHOD(EnumObjects
)(HWND hwndOwner
, DWORD dwFlags
, LPENUMIDLIST
*ppEnumIDList
) override
;
46 STDMETHOD(BindToObject
)(PCUIDLIST_RELATIVE pidl
, LPBC pbcReserved
, REFIID riid
, LPVOID
*ppvOut
) override
;
47 STDMETHOD(BindToStorage
)(PCUIDLIST_RELATIVE pidl
, LPBC pbcReserved
, REFIID riid
, LPVOID
*ppvOut
) override
;
48 STDMETHOD(CompareIDs
)(LPARAM lParam
, PCUIDLIST_RELATIVE pidl1
, PCUIDLIST_RELATIVE pidl2
) override
;
49 STDMETHOD(CreateViewObject
)(HWND hwndOwner
, REFIID riid
, LPVOID
*ppvOut
) override
;
50 STDMETHOD(GetAttributesOf
)(UINT cidl
, PCUITEMID_CHILD_ARRAY apidl
, DWORD
*rgfInOut
) override
;
51 STDMETHOD(GetUIObjectOf
)(HWND hwndOwner
, UINT cidl
, PCUITEMID_CHILD_ARRAY apidl
, REFIID riid
, UINT
* prgfInOut
, LPVOID
* ppvOut
) override
;
52 STDMETHOD(GetDisplayNameOf
)(PCUITEMID_CHILD pidl
, DWORD dwFlags
, LPSTRRET strRet
) override
;
53 STDMETHOD(SetNameOf
)(HWND hwndOwner
, PCUITEMID_CHILD pidl
, LPCOLESTR lpName
, DWORD dwFlags
, PITEMID_CHILD
*pPidlOut
) override
;
56 STDMETHOD(GetDefaultSearchGUID
)(GUID
*pguid
) override
;
57 STDMETHOD(EnumSearches
)(IEnumExtraSearch
**ppenum
) override
;
58 STDMETHOD(GetDefaultColumn
)(DWORD dwRes
, ULONG
*pSort
, ULONG
*pDisplay
) override
;
59 STDMETHOD(GetDefaultColumnState
)(UINT iColumn
, DWORD
*pcsFlags
) override
;
60 STDMETHOD(GetDetailsEx
)(PCUITEMID_CHILD pidl
, const SHCOLUMNID
*pscid
, VARIANT
*pv
) override
;
61 STDMETHOD(GetDetailsOf
)(PCUITEMID_CHILD pidl
, UINT iColumn
, SHELLDETAILS
*psd
) override
;
62 STDMETHOD(MapColumnToSCID
)(UINT column
, SHCOLUMNID
*pscid
) override
;
65 STDMETHOD(GetClassID
)(CLSID
*lpClassId
) override
;
68 STDMETHOD(Initialize
)(PCIDLIST_ABSOLUTE pidl
) override
;
71 STDMETHOD(GetCurFolder
)(PIDLIST_ABSOLUTE
* pidl
) override
;
73 DECLARE_REGISTRY_RESOURCEID(IDR_CONTROLPANEL
)
74 DECLARE_NOT_AGGREGATABLE(CControlPanelFolder
)
76 DECLARE_PROTECT_FINAL_CONSTRUCT()
78 BEGIN_COM_MAP(CControlPanelFolder
)
79 COM_INTERFACE_ENTRY_IID(IID_IShellFolder2
, IShellFolder2
)
80 COM_INTERFACE_ENTRY_IID(IID_IShellFolder
, IShellFolder
)
81 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder
, IPersistFolder
)
82 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2
, IPersistFolder2
)
83 COM_INTERFACE_ENTRY_IID(IID_IPersist
, IPersist
)
88 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
92 PITEMID_CHILD
*m_apidl
;
98 HRESULT WINAPI
Initialize(UINT cidl
, PCUITEMID_CHILD_ARRAY apidl
);
101 STDMETHOD(QueryContextMenu
)(HMENU hMenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
) override
;
102 STDMETHOD(InvokeCommand
)(LPCMINVOKECOMMANDINFO lpcmi
) override
;
103 STDMETHOD(GetCommandString
)(UINT_PTR idCommand
, UINT uFlags
, UINT
*lpReserved
, LPSTR lpszName
, UINT uMaxNameLen
) override
;
106 STDMETHOD(HandleMenuMsg
)(UINT uMsg
, WPARAM wParam
, LPARAM lParam
) override
;
108 BEGIN_COM_MAP(CCPLItemMenu
)
109 COM_INTERFACE_ENTRY_IID(IID_IContextMenu
, IContextMenu
)
110 COM_INTERFACE_ENTRY_IID(IID_IContextMenu2
, IContextMenu2
)
114 class COpenControlPanel
:
115 public CComCoClass
<COpenControlPanel
, &CLSID_OpenControlPanel
>,
116 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
117 public IOpenControlPanel
121 STDMETHOD(Open
)(LPCWSTR pszName
, LPCWSTR pszPage
, IUnknown
*punkSite
) override
;
122 STDMETHOD(GetPath
)(LPCWSTR pszName
, LPWSTR pszPath
, UINT cchPath
) override
;
123 STDMETHOD(GetCurrentView
)(CPVIEW
*pView
) override
;
125 static HRESULT WINAPI
UpdateRegistry(BOOL bRegister
) { return S_OK
; } // CControlPanelFolder does it for us
126 DECLARE_NOT_AGGREGATABLE(COpenControlPanel
)
128 DECLARE_PROTECT_FINAL_CONSTRUCT()
130 BEGIN_COM_MAP(COpenControlPanel
)
131 COM_INTERFACE_ENTRY_IID(IID_IOpenControlPanel
, IOpenControlPanel
)
135 #endif /* _SHFLDR_CPANEL_H_ */