ReactOS 0.4.15-dev-7961-gdcf9eb0
CDefaultContextMenu.cpp File Reference
#include "precomp.h"
#include <compat_undoc.h>
Include dependency graph for CDefaultContextMenu.cpp:

Go to the source code of this file.

Classes

struct  _DynamicShellEntry_
 
struct  _StaticShellEntry_
 
struct  _StaticInvokeCommandMap_
 
class  CDefaultContextMenu
 

Macros

#define MAX_VERB   260
 
#define DCM_FCIDM_SHVIEW_OFFSET   0x7000
 

Typedefs

typedef struct _DynamicShellEntry_ DynamicShellEntry
 
typedef struct _DynamicShellEntry_PDynamicShellEntry
 
typedef struct _StaticShellEntry_ StaticShellEntry
 
typedef struct _StaticShellEntry_PStaticShellEntry
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dmenu)
 
static HRESULT SHELL_GetRegCLSID (HKEY hKey, LPCWSTR SubKey, LPCWSTR Value, CLSID &clsid)
 
static bool RegValueExists (HKEY hKey, LPCWSTR Name)
 
static BOOL InsertMenuItemAt (HMENU hMenu, UINT Pos, UINT Flags)
 
static BOOL HasClipboardData ()
 
void WINAPI _InsertMenuItemW (HMENU hMenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState)
 
HRESULT SHGetMenuIdFromMenuMsg (UINT uMsg, LPARAM lParam, UINT *CmdId)
 
HRESULT SHSetMenuIdInMenuMsg (UINT uMsg, LPARAM lParam, UINT CmdId)
 
static HRESULT CDefaultContextMenu_CreateInstance (const DEFCONTEXTMENU *pdcm, LPFNDFMCALLBACK lpfn, REFIID riid, void **ppv)
 
HRESULT WINAPI SHCreateDefaultContextMenu (const DEFCONTEXTMENU *pdcm, REFIID riid, void **ppv)
 
HRESULT WINAPI CDefFolderMenu_Create2 (PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeyClsKeys, IContextMenu **ppcm)
 

Variables

static const struct _StaticInvokeCommandMap_ g_StaticInvokeCmdMap []
 

Macro Definition Documentation

◆ DCM_FCIDM_SHVIEW_OFFSET

#define DCM_FCIDM_SHVIEW_OFFSET   0x7000

Definition at line 55 of file CDefaultContextMenu.cpp.

◆ MAX_VERB

#define MAX_VERB   260

Definition at line 16 of file CDefaultContextMenu.cpp.

Typedef Documentation

◆ DynamicShellEntry

◆ PDynamicShellEntry

◆ PStaticShellEntry

◆ StaticShellEntry

Function Documentation

◆ _InsertMenuItemW()

void WINAPI _InsertMenuItemW ( HMENU  hMenu,
UINT  indexMenu,
BOOL  fByPosition,
UINT  wID,
UINT  fType,
LPCWSTR  dwTypeData,
UINT  fState 
)

Definition at line 662 of file CDefaultContextMenu.cpp.

670{
671 MENUITEMINFOW mii;
672 WCHAR wszText[100];
673
674 ZeroMemory(&mii, sizeof(mii));
675 mii.cbSize = sizeof(mii);
676 if (fType == MFT_SEPARATOR)
677 mii.fMask = MIIM_ID | MIIM_TYPE;
678 else if (fType == MFT_STRING)
679 {
681 if (IS_INTRESOURCE(dwTypeData))
682 {
683 if (LoadStringW(shell32_hInstance, LOWORD((ULONG_PTR)dwTypeData), wszText, _countof(wszText)))
684 mii.dwTypeData = wszText;
685 else
686 {
687 ERR("failed to load string %p\n", dwTypeData);
688 return;
689 }
690 }
691 else
692 mii.dwTypeData = (LPWSTR)dwTypeData;
693 mii.fState = fState;
694 }
695
696 mii.wID = wID;
697 mii.fType = fType;
698 InsertMenuItemW(hMenu, indexMenu, fByPosition, &mii);
699}
#define shell32_hInstance
#define ERR(fmt,...)
Definition: debug.h:110
#define LOWORD(l)
Definition: pedump.c:82
#define _countof(array)
Definition: sndvol32.h:68
LPWSTR dwTypeData
Definition: winuser.h:3269
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define ZeroMemory
Definition: winbase.h:1712
#define MIIM_ID
Definition: winuser.h:722
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define IS_INTRESOURCE(i)
Definition: winuser.h:580
#define MFT_SEPARATOR
Definition: winuser.h:744
#define MIIM_STATE
Definition: winuser.h:721
#define MFT_STRING
Definition: winuser.h:746
#define MIIM_TYPE
Definition: winuser.h:725
BOOL WINAPI InsertMenuItemW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ CDefaultContextMenu_CreateInstance()

static HRESULT CDefaultContextMenu_CreateInstance ( const DEFCONTEXTMENU pdcm,
LPFNDFMCALLBACK  lpfn,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1653 of file CDefaultContextMenu.cpp.

1654{
1655 return ShellObjectCreatorInit<CDefaultContextMenu>(pdcm, lpfn, riid, ppv);
1656}
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39

Referenced by CDefFolderMenu_Create2(), and SHCreateDefaultContextMenu().

◆ CDefFolderMenu_Create2()

HRESULT WINAPI CDefFolderMenu_Create2 ( PCIDLIST_ABSOLUTE  pidlFolder,
HWND  hwnd,
UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
IShellFolder psf,
LPFNDFMCALLBACK  lpfn,
UINT  nKeys,
const HKEY ahkeyClsKeys,
IContextMenu **  ppcm 
)

Definition at line 1686 of file CDefaultContextMenu.cpp.

1696{
1697 DEFCONTEXTMENU dcm;
1698 dcm.hwnd = hwnd;
1699 dcm.pcmcb = NULL;
1700 dcm.pidlFolder = pidlFolder;
1701 dcm.psf = psf;
1702 dcm.cidl = cidl;
1703 dcm.apidl = apidl;
1705 dcm.cKeys = nKeys;
1706 dcm.aKeys = ahkeyClsKeys;
1707
1710 return hr;
1711
1712 return S_OK;
1713}
static HRESULT CDefaultContextMenu_CreateInstance(const DEFCONTEXTMENU *pdcm, LPFNDFMCALLBACK lpfn, REFIID riid, void **ppv)
#define NULL
Definition: types.h:112
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
#define S_OK
Definition: intsafe.h:52
HRESULT hr
Definition: shlfolder.c:183
IContextMenuCB * pcmcb
Definition: shlobj.h:2535
IShellFolder * psf
Definition: shlobj.h:2537
IUnknown * punkAssociationInfo
Definition: shlobj.h:2540
PCUITEMID_CHILD_ARRAY apidl
Definition: shlobj.h:2539
const HKEY * aKeys
Definition: shlobj.h:2542
PCIDLIST_ABSOLUTE pidlFolder
Definition: shlobj.h:2536
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define IID_PPV_ARG(Itype, ppType)

Referenced by _CFontMenu_CreateInstance(), CDrivesContextMenu_CreateInstance(), CGuidItemContextMenu_CreateInstance(), CZipFolder::GetUIObjectOf(), CNetFolder::GetUIObjectOf(), and CCommonFolder< TSelf, TItemId, TExtractIcon >::GetUIObjectOf().

◆ HasClipboardData()

static BOOL HasClipboardData ( )
static

Definition at line 324 of file CDefaultContextMenu.cpp.

325{
326 BOOL bRet = FALSE;
327 CComPtr<IDataObject> pDataObj;
328
329 if (SUCCEEDED(OleGetClipboard(&pDataObj)))
330 {
331 FORMATETC formatetc;
332
333 TRACE("pDataObj=%p\n", pDataObj.p);
334
335 /* Set the FORMATETC structure*/
336 InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_SHELLIDLIST), TYMED_HGLOBAL);
337 bRet = SUCCEEDED(pDataObj->QueryGetData(&formatetc));
338 }
339
340 return bRet;
341}
#define FALSE
Definition: types.h:117
HRESULT WINAPI OleGetClipboard(IDataObject **obj)
Definition: clipboard.c:2249
#define InitFormatEtc(fe, cf, med)
Definition: editor.h:32
unsigned int BOOL
Definition: ntddk_ex.h:94
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define CFSTR_SHELLIDLIST
Definition: shlobj.h:543
#define TRACE(s)
Definition: solgame.cpp:4
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)

Referenced by CDefaultContextMenu::QueryContextMenu().

◆ InsertMenuItemAt()

static BOOL InsertMenuItemAt ( HMENU  hMenu,
UINT  Pos,
UINT  Flags 
)
static

Definition at line 32 of file CDefaultContextMenu.cpp.

33{
34 MENUITEMINFOW mii;
35 mii.cbSize = FIELD_OFFSET(MENUITEMINFOW, hbmpItem); // USER32 version agnostic
36 mii.fMask = MIIM_TYPE;
37 mii.fType = Flags;
38 return InsertMenuItemW(hMenu, Pos, TRUE, &mii);
39}
ush Pos
Definition: deflate.h:92
#define TRUE
Definition: types.h:120
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by CDefaultContextMenu::AddStaticContextMenusToMenu().

◆ RegValueExists()

static bool RegValueExists ( HKEY  hKey,
LPCWSTR  Name 
)
inlinestatic

Definition at line 27 of file CDefaultContextMenu.cpp.

28{
30}
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
FxAutoRegKey hKey

Referenced by CDefaultContextMenu::AddStaticContextMenusToMenu().

◆ SHCreateDefaultContextMenu()

HRESULT WINAPI SHCreateDefaultContextMenu ( const DEFCONTEXTMENU pdcm,
REFIID  riid,
void **  ppv 
)

Definition at line 1665 of file CDefaultContextMenu.cpp.

1666{
1667 HRESULT hr;
1668
1669 if (!ppv)
1670 return E_INVALIDARG;
1671
1674 return hr;
1675
1676 return S_OK;
1677}
#define E_INVALIDARG
Definition: ddrawi.h:101

Referenced by CDesktopFolder::CreateViewObject(), CDrivesFolder::CreateViewObject(), CFSFolder::CreateViewObject(), CDesktopFolder::GetUIObjectOf(), CFSFolder::GetUIObjectOf(), and init_function_pointers().

◆ SHELL_GetRegCLSID()

static HRESULT SHELL_GetRegCLSID ( HKEY  hKey,
LPCWSTR  SubKey,
LPCWSTR  Value,
CLSID clsid 
)
static

Definition at line 19 of file CDefaultContextMenu.cpp.

20{
21 WCHAR buf[42];
22 DWORD cb = sizeof(buf);
25}
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
#define RRF_RT_REG_SZ
Definition: driver.c:575
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
REFCLSID clsid
Definition: msctf.c:82
#define err(...)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92

Referenced by CDefaultContextMenu::InvokeRegVerb().

◆ SHGetMenuIdFromMenuMsg()

HRESULT SHGetMenuIdFromMenuMsg ( UINT  uMsg,
LPARAM  lParam,
UINT CmdId 
)

Definition at line 1559 of file CDefaultContextMenu.cpp.

1560{
1561 if (uMsg == WM_DRAWITEM)
1562 {
1563 DRAWITEMSTRUCT* pDrawStruct = reinterpret_cast<DRAWITEMSTRUCT*>(lParam);
1564 *CmdId = pDrawStruct->itemID;
1565 return S_OK;
1566 }
1567 else if (uMsg == WM_MEASUREITEM)
1568 {
1569 MEASUREITEMSTRUCT* pMeasureStruct = reinterpret_cast<MEASUREITEMSTRUCT*>(lParam);
1570 *CmdId = pMeasureStruct->itemID;
1571 return S_OK;
1572 }
1573
1574 return E_FAIL;
1575}
LPARAM lParam
Definition: combotst.c:139
#define E_FAIL
Definition: ddrawi.h:102
#define WM_DRAWITEM
Definition: winuser.h:1645
#define WM_MEASUREITEM
Definition: winuser.h:1646

Referenced by CDefaultContextMenu::HandleMenuMsg2(), and CDefView::OnCustomItem().

◆ SHSetMenuIdInMenuMsg()

HRESULT SHSetMenuIdInMenuMsg ( UINT  uMsg,
LPARAM  lParam,
UINT  CmdId 
)

Definition at line 1577 of file CDefaultContextMenu.cpp.

1578{
1579 if (uMsg == WM_DRAWITEM)
1580 {
1581 DRAWITEMSTRUCT* pDrawStruct = reinterpret_cast<DRAWITEMSTRUCT*>(lParam);
1582 pDrawStruct->itemID = CmdId;
1583 return S_OK;
1584 }
1585 else if (uMsg == WM_MEASUREITEM)
1586 {
1587 MEASUREITEMSTRUCT* pMeasureStruct = reinterpret_cast<MEASUREITEMSTRUCT*>(lParam);
1588 pMeasureStruct->itemID = CmdId;
1589 return S_OK;
1590 }
1591
1592 return E_FAIL;
1593}

Referenced by CDefaultContextMenu::HandleMenuMsg2(), and CDefView::OnCustomItem().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( dmenu  )

Variable Documentation

◆ g_StaticInvokeCmdMap

const struct _StaticInvokeCommandMap_ g_StaticInvokeCmdMap[]
static
Initial value:
=
{
{ "RunAs", 0 },
{ "Print", 0 },
{ "Preview", 0 },
{ "Open", FCIDM_SHVIEW_OPEN },
{ "cut", FCIDM_SHVIEW_CUT, },
{ "copyto", FCIDM_SHVIEW_COPYTO },
{ "moveto", FCIDM_SHVIEW_MOVETO },
}
short SHORT
Definition: pedump.c:59
#define DFM_CMD_DELETE
Definition: shlobj.h:2593
#define DFM_CMD_NEWFOLDER
Definition: shlobj.h:2598
#define DFM_CMD_COPY
Definition: shlobj.h:2595
#define DFM_CMD_PASTE
Definition: shlobj.h:2599
#define DFM_CMD_PROPERTIES
Definition: shlobj.h:2597
#define DFM_CMD_RENAME
Definition: shlobj.h:2605
#define DFM_CMD_LINK
Definition: shlobj.h:2596
#define FCIDM_SHVIEW_CUT
Definition: shresdef.h:826
#define FCIDM_SHVIEW_OPEN
Definition: shresdef.h:853
#define FCIDM_SHVIEW_COPY
Definition: shresdef.h:827
#define FCIDM_SHVIEW_NEWFOLDER
Definition: shresdef.h:849
#define FCIDM_SHVIEW_PROPERTIES
Definition: shresdef.h:825
#define FCIDM_SHVIEW_COPYTO
Definition: shresdef.h:831
#define FCIDM_SHVIEW_MOVETO
Definition: shresdef.h:832
#define FCIDM_SHVIEW_DELETE
Definition: shresdef.h:824
#define FCIDM_SHVIEW_RENAME
Definition: shresdef.h:846
#define FCIDM_SHVIEW_CREATELINK
Definition: shresdef.h:847
#define FCIDM_SHVIEW_INSERT
Definition: shresdef.h:828

Referenced by CDefaultContextMenu::GetCommandString(), CDefaultContextMenu::MapVerbToCmdId(), and CDefaultContextMenu::TryPickDefault().