ReactOS 0.4.15-dev-7098-ge0c17c3
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 DCM_FCIDM_SHVIEW_OFFSET   0x7000
 
#define MAX_VERB   260
 

Typedefs

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

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dmenu)
 
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 42 of file CDefaultContextMenu.cpp.

◆ MAX_VERB

#define MAX_VERB   260

Definition at line 1086 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 640 of file CDefaultContextMenu.cpp.

648{
649 MENUITEMINFOW mii;
650 WCHAR wszText[100];
651
652 ZeroMemory(&mii, sizeof(mii));
653 mii.cbSize = sizeof(mii);
654 if (fType == MFT_SEPARATOR)
655 mii.fMask = MIIM_ID | MIIM_TYPE;
656 else if (fType == MFT_STRING)
657 {
659 if (IS_INTRESOURCE(dwTypeData))
660 {
661 if (LoadStringW(shell32_hInstance, LOWORD((ULONG_PTR)dwTypeData), wszText, _countof(wszText)))
662 mii.dwTypeData = wszText;
663 else
664 {
665 ERR("failed to load string %p\n", dwTypeData);
666 return;
667 }
668 }
669 else
670 mii.dwTypeData = (LPWSTR)dwTypeData;
671 mii.fState = fState;
672 }
673
674 mii.wID = wID;
675 mii.fType = fType;
676 InsertMenuItemW(hMenu, indexMenu, fByPosition, &mii);
677}
#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:3268
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 1599 of file CDefaultContextMenu.cpp.

1600{
1601 return ShellObjectCreatorInit<CDefaultContextMenu>(pdcm, lpfn, riid, ppv);
1602}
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 1632 of file CDefaultContextMenu.cpp.

1642{
1643 DEFCONTEXTMENU dcm;
1644 dcm.hwnd = hwnd;
1645 dcm.pcmcb = NULL;
1646 dcm.pidlFolder = pidlFolder;
1647 dcm.psf = psf;
1648 dcm.cidl = cidl;
1649 dcm.apidl = apidl;
1651 dcm.cKeys = nKeys;
1652 dcm.aKeys = ahkeyClsKeys;
1653
1656 return hr;
1657
1658 return S_OK;
1659}
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:122
#define S_OK
Definition: intsafe.h:52
HRESULT hr
Definition: shlfolder.c:183
IContextMenuCB * pcmcb
Definition: shlobj.h:2468
IShellFolder * psf
Definition: shlobj.h:2470
IUnknown * punkAssociationInfo
Definition: shlobj.h:2473
PCUITEMID_CHILD_ARRAY apidl
Definition: shlobj.h:2472
const HKEY * aKeys
Definition: shlobj.h:2475
PCIDLIST_ABSOLUTE pidlFolder
Definition: shlobj.h:2469
_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 300 of file CDefaultContextMenu.cpp.

301{
302 BOOL bRet = FALSE;
303 CComPtr<IDataObject> pDataObj;
304
305 if (SUCCEEDED(OleGetClipboard(&pDataObj)))
306 {
307 FORMATETC formatetc;
308
309 TRACE("pDataObj=%p\n", pDataObj.p);
310
311 /* Set the FORMATETC structure*/
312 InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_SHELLIDLIST), TYMED_HGLOBAL);
313 bRet = SUCCEEDED(pDataObj->QueryGetData(&formatetc));
314 }
315
316 return bRet;
317}
#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 19 of file CDefaultContextMenu.cpp.

20{
21 MENUITEMINFOW mii;
22 mii.cbSize = FIELD_OFFSET(MENUITEMINFOW, hbmpItem); // USER32 version agnostic
23 mii.fMask = MIIM_TYPE;
24 mii.fType = Flags;
25 return InsertMenuItemW(hMenu, Pos, TRUE, &mii);
26}
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 14 of file CDefaultContextMenu.cpp.

15{
17}
#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:4123
FxAutoRegKey hKey

Referenced by CDefaultContextMenu::AddStaticContextMenusToMenu().

◆ SHCreateDefaultContextMenu()

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

Definition at line 1611 of file CDefaultContextMenu.cpp.

1612{
1613 HRESULT hr;
1614
1615 if (!ppv)
1616 return E_INVALIDARG;
1617
1620 return hr;
1621
1622 return S_OK;
1623}
#define E_INVALIDARG
Definition: ddrawi.h:101

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

◆ SHGetMenuIdFromMenuMsg()

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

Definition at line 1505 of file CDefaultContextMenu.cpp.

1506{
1507 if (uMsg == WM_DRAWITEM)
1508 {
1509 DRAWITEMSTRUCT* pDrawStruct = reinterpret_cast<DRAWITEMSTRUCT*>(lParam);
1510 *CmdId = pDrawStruct->itemID;
1511 return S_OK;
1512 }
1513 else if (uMsg == WM_MEASUREITEM)
1514 {
1515 MEASUREITEMSTRUCT* pMeasureStruct = reinterpret_cast<MEASUREITEMSTRUCT*>(lParam);
1516 *CmdId = pMeasureStruct->itemID;
1517 return S_OK;
1518 }
1519
1520 return E_FAIL;
1521}
LPARAM lParam
Definition: combotst.c:139
#define E_FAIL
Definition: ddrawi.h:102
#define WM_DRAWITEM
Definition: winuser.h:1644
#define WM_MEASUREITEM
Definition: winuser.h:1645

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

◆ SHSetMenuIdInMenuMsg()

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

Definition at line 1523 of file CDefaultContextMenu.cpp.

1524{
1525 if (uMsg == WM_DRAWITEM)
1526 {
1527 DRAWITEMSTRUCT* pDrawStruct = reinterpret_cast<DRAWITEMSTRUCT*>(lParam);
1528 pDrawStruct->itemID = CmdId;
1529 return S_OK;
1530 }
1531 else if (uMsg == WM_MEASUREITEM)
1532 {
1533 MEASUREITEMSTRUCT* pMeasureStruct = reinterpret_cast<MEASUREITEMSTRUCT*>(lParam);
1534 pMeasureStruct->itemID = CmdId;
1535 return S_OK;
1536 }
1537
1538 return E_FAIL;
1539}

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:2526
#define DFM_CMD_NEWFOLDER
Definition: shlobj.h:2531
#define DFM_CMD_COPY
Definition: shlobj.h:2528
#define DFM_CMD_PASTE
Definition: shlobj.h:2532
#define DFM_CMD_PROPERTIES
Definition: shlobj.h:2530
#define DFM_CMD_RENAME
Definition: shlobj.h:2538
#define DFM_CMD_LINK
Definition: shlobj.h:2529
#define FCIDM_SHVIEW_CUT
Definition: shresdef.h:809
#define FCIDM_SHVIEW_OPEN
Definition: shresdef.h:836
#define FCIDM_SHVIEW_COPY
Definition: shresdef.h:810
#define FCIDM_SHVIEW_NEWFOLDER
Definition: shresdef.h:832
#define FCIDM_SHVIEW_PROPERTIES
Definition: shresdef.h:808
#define FCIDM_SHVIEW_COPYTO
Definition: shresdef.h:814
#define FCIDM_SHVIEW_MOVETO
Definition: shresdef.h:815
#define FCIDM_SHVIEW_DELETE
Definition: shresdef.h:807
#define FCIDM_SHVIEW_RENAME
Definition: shresdef.h:829
#define FCIDM_SHVIEW_CREATELINK
Definition: shresdef.h:830
#define FCIDM_SHVIEW_INSERT
Definition: shresdef.h:811

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