ReactOS 0.4.16-dev-1025-gd3456f5
CCPLItemMenu Class Reference

#include <CControlPanelFolder.h>

Inheritance diagram for CCPLItemMenu:
Collaboration diagram for CCPLItemMenu:

Public Member Functions

 CCPLItemMenu ()
 
 ~CCPLItemMenu ()
 
HRESULT WINAPI Initialize (UINT cidl, PCUITEMID_CHILD_ARRAY apidl)
 
STDMETHOD() QueryContextMenu (HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) override
 
STDMETHOD() InvokeCommand (LPCMINVOKECOMMANDINFO lpcmi) override
 
STDMETHOD() GetCommandString (UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) override
 
STDMETHOD() HandleMenuMsg (UINT uMsg, WPARAM wParam, LPARAM lParam) override
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
HRESULT HandleMenuMsg ([in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam)
 
HRESULT QueryContextMenu ([in] HMENU hmenu, [in] UINT indexMenu, [in] UINT idCmdFirst, [in] UINT idCmdLast, [in] UINT uFlags)
 
HRESULT InvokeCommand ([in] LPCMINVOKECOMMANDINFO lpici)
 
HRESULT GetCommandString ([in] UINT_PTR idCmd, [in] UINT uType, [out] UINT *pwReserved, [out, size_is(cchMax)] LPSTR pszName, [in] UINT cchMax)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 

Private Attributes

PITEMID_CHILDm_apidl
 
UINT m_cidl
 

Additional Inherited Members

- Public Types inherited from IContextMenu2
typedef IContextMenu2LPCONTEXTMENU2
 
- Public Types inherited from IContextMenu
typedef IContextMenuLPCONTEXTMENU
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFO CMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFOLPCMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMInvokeCommandInfoEx CMINVOKECOMMANDINFOEX
 
typedef struct IContextMenu::tagCMInvokeCommandInfoExLPCMINVOKECOMMANDINFOEX
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 
- Static Public Attributes inherited from IContextMenu
static const WCHAR CMDSTR_NEWFOLDERW [] = {'N','e','w','F','o','l','d','e','r',0}
 
static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0}
 
static const WCHAR CMDSTR_VIEWDETAILSW [] = {'V','i','e','w','D','e','t','a','i','l','s',0}
 

Detailed Description

Definition at line 87 of file CControlPanelFolder.h.

Constructor & Destructor Documentation

◆ CCPLItemMenu()

CCPLItemMenu::CCPLItemMenu ( )

Definition at line 676 of file CControlPanelFolder.cpp.

677{
678 m_apidl = NULL;
679 m_cidl = 0;
680}
PITEMID_CHILD * m_apidl
#define NULL
Definition: types.h:112

◆ ~CCPLItemMenu()

CCPLItemMenu::~CCPLItemMenu ( )

Definition at line 692 of file CControlPanelFolder.cpp.

693{
695}
void _ILFreeaPidl(LPITEMIDLIST *apidl, UINT cidl)
Definition: pidl.c:2607

Member Function Documentation

◆ GetCommandString()

HRESULT WINAPI CCPLItemMenu::GetCommandString ( UINT_PTR  idCommand,
UINT  uFlags,
UINT lpReserved,
LPSTR  lpszName,
UINT  uMaxNameLen 
)
override

Implements IContextMenu.

Definition at line 771 of file CControlPanelFolder.cpp.

777{
778 TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
779
780 FIXME("unknown command string\n");
781 return E_FAIL;
782}
static DWORD const LPVOID const lpReserved
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_FAIL
Definition: ddrawi.h:102
UINT uFlags
Definition: api.c:59
#define TRACE(s)
Definition: solgame.cpp:4

◆ HandleMenuMsg()

HRESULT WINAPI CCPLItemMenu::HandleMenuMsg ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
override

Implements IContextMenu2.

Definition at line 787 of file CControlPanelFolder.cpp.

791{
792 TRACE("ICPanel_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n", this, uMsg, wParam, lParam);
793
794 return E_NOTIMPL;
795}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ Initialize()

HRESULT WINAPI CCPLItemMenu::Initialize ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl 
)

Definition at line 682 of file CControlPanelFolder.cpp.

683{
684 m_cidl = cidl;
685 m_apidl = _ILCopyaPidl(apidl, m_cidl);
686 if (m_cidl && !m_apidl)
687 return E_OUTOFMEMORY;
688
689 return S_OK;
690}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define S_OK
Definition: intsafe.h:52
PITEMID_CHILD * _ILCopyaPidl(PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl)
Definition: pidl.c:2624

◆ InvokeCommand()

HRESULT WINAPI CCPLItemMenu::InvokeCommand ( LPCMINVOKECOMMANDINFO  lpcmi)
override

Implements IContextMenu.

Definition at line 717 of file CControlPanelFolder.cpp.

718{
719 HRESULT hResult;
720
722 if(!pCPanel)
723 return E_FAIL;
724
725 TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n", this, lpcmi, lpcmi->lpVerb, lpcmi->hwnd);
726
727 if (lpcmi->lpVerb == MAKEINTRESOURCEA(0))
728 {
729 /* Hardcode the command here; Executing a cpl file would be fine but we also need to run things like console.dll */
730 WCHAR wszParams[MAX_PATH];
731 PCWSTR wszFile = L"rundll32.exe";
732 PCWSTR wszFormat = L"shell32.dll,Control_RunDLL %s,%s";
733
734 wsprintfW(wszParams, wszFormat, pCPanel->szName, pCPanel->szName + pCPanel->offsDispName);
735
736 /* Note: we pass the applet name to Control_RunDLL to distinguish between multiple applets in one .cpl file */
737 ShellExecuteW(NULL, NULL, wszFile, wszParams, NULL, 0);
738 }
739 else if (lpcmi->lpVerb == MAKEINTRESOURCEA(1)) //FIXME
740 {
741 CComPtr<IDataObject> pDataObj;
743
744 hResult = SHCreateDataObject(pidl, m_cidl, m_apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj));
745 if (FAILED(hResult))
746 return hResult;
747
748 SHFree(pidl);
749
750 //FIXME: Use SHCreateLinks
751 CComPtr<IShellFolder> psf;
752 CComPtr<IDropTarget> pDT;
753
754 hResult = SHGetDesktopFolder(&psf);
755 if (FAILED(hResult))
756 return hResult;
757
758 hResult = psf->CreateViewObject(NULL, IID_PPV_ARG(IDropTarget, &pDT));
759 if (FAILED(hResult))
760 return hResult;
761
762 SHSimulateDrop(pDT, pDataObj, MK_CONTROL|MK_SHIFT, NULL, NULL);
763 }
764 return S_OK;
765}
static PIDLCPanelStruct * _ILGetCPanelPointer(LPCITEMIDLIST pidl)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT WINAPI SHCreateDataObject(PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IDataObject *pdtInner, REFIID riid, void **ppv)
#define MAX_PATH
Definition: compat.h:34
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj, DWORD grfKeyState, PPOINTL lpPt, DWORD *pdwEffect)
Definition: ordinal.c:1828
#define FAILED(hr)
Definition: intsafe.h:51
#define L(x)
Definition: ntvdm.h:50
LPITEMIDLIST _ILCreateControlPanel(void)
Definition: pidl.c:1816
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2507
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
WCHAR szName[1]
Definition: pidl.h:144
WORD offsDispName
Definition: pidl.h:142
const uint16_t * PCWSTR
Definition: typedefs.h:57
static const WCHAR wszFile[]
Definition: urlmon_main.c:386
#define MK_SHIFT
Definition: winuser.h:2380
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define MK_CONTROL
Definition: winuser.h:2381
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ QueryContextMenu()

HRESULT WINAPI CCPLItemMenu::QueryContextMenu ( HMENU  hMenu,
UINT  indexMenu,
UINT  idCmdFirst,
UINT  idCmdLast,
UINT  uFlags 
)
override

Implements IContextMenu.

Definition at line 697 of file CControlPanelFolder.cpp.

703{
704 _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst, MFT_STRING, MAKEINTRESOURCEW(IDS_OPEN), MFS_DEFAULT);
706 _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + 1, MFT_STRING, MAKEINTRESOURCEW(IDS_CREATELINK), MFS_ENABLED);
707
708 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 2);
709}
#define IDC_STATIC
Definition: resource.h:4
#define IDS_OPEN
Definition: resource.h:18
#define TRUE
Definition: types.h:120
#define MAKE_HRESULT(sev, fac, code)
Definition: dmerror.h:30
void WINAPI _InsertMenuItemW(HMENU hmenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState)
#define IDS_CREATELINK
Definition: shresdef.h:221
#define SEVERITY_SUCCESS
Definition: winerror.h:64
#define MFT_SEPARATOR
Definition: winuser.h:755
#define MFS_DEFAULT
Definition: winuser.h:759
#define MFS_ENABLED
Definition: winuser.h:761
#define MFT_STRING
Definition: winuser.h:757
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Member Data Documentation

◆ m_apidl

PITEMID_CHILD* CCPLItemMenu::m_apidl
private

Definition at line 92 of file CControlPanelFolder.h.

Referenced by CCPLItemMenu(), Initialize(), InvokeCommand(), and ~CCPLItemMenu().

◆ m_cidl

UINT CCPLItemMenu::m_cidl
private

Definition at line 93 of file CControlPanelFolder.h.

Referenced by CCPLItemMenu(), Initialize(), InvokeCommand(), and ~CCPLItemMenu().


The documentation for this class was generated from the following files: