ReactOS 0.4.17-dev-1190-g4c812f4
CMenuCallback Class Reference

#include <internettoolbar.h>

Inheritance diagram for CMenuCallback:
Collaboration diagram for CMenuCallback:

Public Member Functions

 CMenuCallback ()
 
virtual ~CMenuCallback ()
 
void SetSite (IUnknown *pNewSite)
 
HRESULT STDMETHODCALLTYPE GetObject (LPSMDATA psmd, REFIID riid, void **ppvObject)
 
virtual HRESULT STDMETHODCALLTYPE CallbackSM (LPSMDATA psmd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
 CMenuCallback (struct _test_info *testResults, int testsCount)
 
void SetTest (int i)
 
HRESULT STDMETHODCALLTYPE CallbackSM (LPSMDATA psmd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
- 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 CallbackSM ([in, out] LPSMDATA psmd, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam)
 
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
- Public Member Functions inherited from CUnknownBase< IShellMenuCallback >
 CUnknownBase (bool autoDelete=true, LONG initialRef=0)
 
ULONG STDMETHODCALLTYPE AddRef ()
 
ULONG STDMETHODCALLTYPE Release ()
 
HRESULT STDMETHODCALLTYPE QueryInterface (REFIID riid, void **ppv)
 
virtual ~CUnknownBase ()
 
LONG GetRef () const
 

Protected Member Functions

const QITAB * GetQITab ()
 
virtual const QITAB * GetQITab ()=0
 

Protected Attributes

int m_iTest
 
int m_iCallback
 
struct _test_info * m_results
 
int m_testsCount
 

Private Attributes

CComPtr< IShellMenu > fFavoritesMenu
 
IUnknown * pSite = NULL
 

Additional Inherited Members

- Public Types inherited from IUnknown
typedef IUnknown * LPUNKNOWN
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRY * GetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 44 of file internettoolbar.h.

Constructor & Destructor Documentation

◆ CMenuCallback() [1/2]

CMenuCallback::CMenuCallback ( )

Definition at line 430 of file internettoolbar.cpp.

431{
432}

◆ ~CMenuCallback()

CMenuCallback::~CMenuCallback ( )
virtual

Definition at line 434 of file internettoolbar.cpp.

435{
436}

◆ CMenuCallback() [2/2]

CMenuCallback::CMenuCallback ( struct _test_info *  testResults,
int  testsCount 
)
inline

Definition at line 230 of file menu.cpp.

231 :CUnknownBase( true, 0 )
232 {
233 m_iTest = 0;
234 m_iCallback = 0;
235 m_results = testResults;
236 m_testsCount = testsCount;
237 }
int m_testsCount
Definition: menu.cpp:221
int m_iCallback
Definition: menu.cpp:219
int m_iTest
Definition: menu.cpp:218
struct _test_info * m_results
Definition: menu.cpp:220

Member Function Documentation

◆ CallbackSM() [1/2]

HRESULT STDMETHODCALLTYPE CMenuCallback::CallbackSM ( LPSMDATA  psmd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
virtual

Implements IShellMenuCallback.

Definition at line 595 of file internettoolbar.cpp.

596{
597 switch (uMsg)
598 {
599 case SMC_INITMENU:
600 break;
601 case SMC_CREATE:
602 break;
603 case SMC_EXITMENU:
604 break;
605 case SMC_GETINFO:
606 {
607 SMINFO *infoPtr = reinterpret_cast<SMINFO *>(lParam);
608 if ((infoPtr->dwMask & SMIM_FLAGS) != 0)
609 {
610 if (psmd->uId == FCIDM_MENU_FAVORITES)
611 {
612 infoPtr->dwFlags |= SMIF_DROPCASCADE;
613 }
614 else
615 {
616 infoPtr->dwFlags |= SMIF_TRACKPOPUP;
617 }
618 }
619 if ((infoPtr->dwMask & SMIM_ICON) != 0)
620 infoPtr->iIcon = -1;
621 return S_OK;
622 }
623 case SMC_GETSFINFO:
624 break;
625 case SMC_GETOBJECT:
626 return GetObject(psmd, *reinterpret_cast<IID *>(wParam), reinterpret_cast<void **>(lParam));
627 case SMC_GETSFOBJECT:
628 break;
629 case SMC_EXEC:
630 PostMessageW(psmd->hwnd, WM_COMMAND, psmd->uId, 0);
631 break;
632 case SMC_SFEXEC:
633 BrowseInplaceOrExecute(psmd->hwnd, psmd->psf, psmd->pidlItem, pSite);
634 break;
635 case SMC_SFSELECTITEM:
636 break;
637 case 13:
638 // return tooltip
639 break;
640 case SMC_REFRESH:
641 break;
642 case SMC_DEMOTE:
643 break;
644 case SMC_PROMOTE:
645 break;
646 case 0x13:
647 break;
648 case SMC_DEFAULTICON:
649 break;
650 case SMC_NEWITEM:
651 break;
652 case SMC_CHEVRONEXPAND:
653 break;
654 case SMC_DISPLAYCHEVRONTIP:
655 break;
656 case SMC_SETSFOBJECT:
657 break;
658 case SMC_SHCHANGENOTIFY:
659 break;
660 case SMC_CHEVRONGETTIP:
661 break;
662 case SMC_SFDDRESTRICTED:
663 break;
664 case 0x35:
665 break;
666 case 49:
667 break;
668 case 0x10000000:
669 break;
670 }
671 return S_FALSE;
672}
IUnknown * pSite
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static HRESULT BrowseInplaceOrExecute(HWND hWnd, IShellFolder *psf, LPCITEMIDLIST pidlChild, IUnknown *pSite)
#define S_OK
Definition: intsafe.h:52
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_COMMAND
Definition: winuser.h:1768
#define FCIDM_MENU_FAVORITES
Definition: shlobj.h:675
@ SMIM_ICON
Definition: shobjidl.idl:2844
@ SMIM_FLAGS
Definition: shobjidl.idl:2843
@ SMIF_DROPCASCADE
Definition: shobjidl.idl:2860
@ SMIF_TRACKPOPUP
Definition: shobjidl.idl:2863
PUITEMID_CHILD pidlItem
Definition: shobjidl.idl:2814
IShellFolder * psf
Definition: shobjidl.idl:2815
DWORD dwMask
Definition: shobjidl.idl:2825
DWORD dwFlags
Definition: shobjidl.idl:2827
#define SMC_EXEC
Definition: undocshell.h:872
#define S_FALSE
Definition: winerror.h:3451
#define GetObject
Definition: wingdi.h:4914

◆ CallbackSM() [2/2]

HRESULT STDMETHODCALLTYPE CMenuCallback::CallbackSM ( LPSMDATA  psmd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
inline

Implements IShellMenuCallback.

Definition at line 244 of file menu.cpp.

245 {
246 /*trace ("callback type %d\n", uMsg);*/
247
248 /*
249 * it seems callback 0x10000000 is called for every item added so
250 * we will ignore callbacks of this type
251 * Note: this callback is invoked by shell32.dll!CMenuSFToolbar::_FilterPidl
252 */
253 if (uMsg == 0x10000000 && m_results[m_iCallback-1].uMsg == 0x13)
254 {
255 return S_OK;
256 }
257
258 m_iCallback++;
260 {
261 ok(FALSE, "Got more callbacks than expected! (%d not %d). uMsg: %d\n", m_iCallback, m_testsCount, uMsg);
262 return S_OK;
263 }
264
266
267 if (!g_bVista || uMsg != 0x38) // Vista bug
268 ok(psmd != NULL, "Got NULL psmd\n");
269 ok(m_iTest == result->iTest, "Wrong test number (%d not %d)\n", m_iTest, result->iTest);
270 ok(result->uMsg == uMsg, "%d: Got wrong uMsg (%d instead of %d)\n", m_iCallback, uMsg, result->uMsg);
271
272 if (uMsg == SMC_CREATE)
273 {
274 ok(psmd->dwFlags == 0, "wrong dwFlags\n");
275 ok(psmd->dwMask == 0, "wrong dwMask\n");
276 ok(psmd->hmenu == 0, "wrong hmenu\n");
277 ok(psmd->hwnd == 0, "wrong hwnd\n");
278 ok(psmd->punk != NULL, "punk is null\n");
279 }
280
281 if (uMsg == SMC_GETSFOBJECT)
282 {
283 ok(psmd->psf != 0, "wrong dwFlags\n");
284 }
285
286 return S_FALSE;
287 }
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
GLuint64EXT * result
Definition: glext.h:11304
static const BOOL g_bVista
Definition: shelltest.h:18
DWORD dwMask
Definition: shobjidl.idl:2805
IUnknown * punk
Definition: shobjidl.idl:2812
HMENU hmenu
Definition: shobjidl.idl:2807
DWORD dwFlags
Definition: shobjidl.idl:2806

◆ GetObject()

HRESULT STDMETHODCALLTYPE CMenuCallback::GetObject ( LPSMDATA  psmd,
REFIID  riid,
void **  ppvObject 
)

Definition at line 531 of file internettoolbar.cpp.

532{
533 CComPtr<IShellMenu> parentMenu;
534 CComPtr<IShellMenu> newMenu;
535 CComPtr<IShellFolder> favoritesFolder;
536 LPITEMIDLIST favoritesPIDL;
537 HWND ownerWindow;
538 HMENU parentHMenu;
539 HMENU favoritesHMenu;
540 HKEY orderRegKey;
541 DWORD disposition;
542 HRESULT hResult;
543 static const TCHAR szFavoritesKey[] =
544 _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MenuOrder\\Favorites");
545
546 if (!IsEqualIID(riid, IID_IShellMenu))
547 return E_FAIL;
548 if (psmd->uId != FCIDM_MENU_FAVORITES)
549 return E_FAIL;
550
551 // create favorites menu
552 hResult = psmd->punk->QueryInterface(IID_PPV_ARG(IShellMenu, &parentMenu));
553 if (FAILED_UNEXPECTEDLY(hResult))
554 return hResult;
555 hResult = parentMenu->GetMenu(&parentHMenu, &ownerWindow, NULL);
556 if (FAILED_UNEXPECTEDLY(hResult))
557 return hResult;
558 favoritesHMenu = GetSubMenu(parentHMenu, 3);
559 if (favoritesHMenu == NULL)
560 return E_FAIL;
561
562 if (fFavoritesMenu.p == NULL)
563 {
564 hResult = CMenuBand_CreateInstance(IID_PPV_ARG(IShellMenu, &newMenu));
565 if (FAILED_UNEXPECTEDLY(hResult))
566 return hResult;
567 hResult = newMenu->Initialize(this, FCIDM_MENU_FAVORITES, -1, SMINIT_VERTICAL | SMINIT_CACHED);
568 if (FAILED_UNEXPECTEDLY(hResult))
569 return hResult;
570
571 RegCreateKeyEx(HKEY_CURRENT_USER, szFavoritesKey,
572 0, NULL, 0, KEY_READ | KEY_WRITE, NULL, &orderRegKey, &disposition);
573
574 hResult = GetFavoritesFolder(&favoritesFolder, &favoritesPIDL);
575 if (FAILED_UNEXPECTEDLY(hResult))
576 return hResult;
577
578 hResult = newMenu->SetShellFolder(favoritesFolder, favoritesPIDL, orderRegKey, SMSET_BOTTOM | SMSET_USEBKICONEXTRACTION | SMSET_HASEXPANDABLEFOLDERS);
579 if (favoritesPIDL)
580 ILFree(favoritesPIDL);
581
582 if (FAILED(hResult))
583 return hResult;
584
585 fFavoritesMenu = newMenu;
586 }
587
588 hResult = fFavoritesMenu->SetMenu(favoritesHMenu, ownerWindow, SMSET_TOP | SMSET_DONTOWN);
589 if (FAILED_UNEXPECTEDLY(hResult))
590 return hResult;
591
592 return fFavoritesMenu->QueryInterface(riid, ppvObject);
593}
#define IID_PPV_ARG(Itype, ppType)
CComPtr< IShellMenu > fFavoritesMenu
#define E_FAIL
Definition: ddrawi.h:102
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
unsigned long DWORD
Definition: ntddk_ex.h:95
char TCHAR
Definition: tchar.h:1402
REFIID riid
Definition: atlbase.h:39
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
static HRESULT GetFavoritesFolder(IShellFolder **ppsfFavorites, LPITEMIDLIST *ppidl)
#define FAILED(hr)
Definition: intsafe.h:51
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
#define KEY_READ
Definition: nt_native.h:1026
#define KEY_WRITE
Definition: nt_native.h:1034
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define CMenuBand_CreateInstance
Definition: shellmenu.h:80
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define _T(x)
Definition: vfdio.h:22
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegCreateKeyEx
Definition: winreg.h:532

◆ GetQITab()

const QITAB * CMenuCallback::GetQITab ( )
inlineprotectedvirtual

Implements CUnknownBase< IShellMenuCallback >.

Definition at line 223 of file menu.cpp.

224 {
225 static const QITAB tab[] = {{ &IID_IShellMenuCallback, OFFSETOFCLASS(IShellMenuCallback, CMenuCallback) }, {0}};
226 return tab;
227 }
#define OFFSETOFCLASS(base, derived)
Definition: shlwapi.h:148
Definition: shlwapi.h:139
static struct wctab tab[]

◆ SetSite()

void CMenuCallback::SetSite ( IUnknown *  pNewSite)
inline

Definition at line 54 of file internettoolbar.h.

54{ pSite = pNewSite; }

◆ SetTest()

void CMenuCallback::SetTest ( int  i)
inline

Definition at line 239 of file menu.cpp.

240 {
241 m_iTest = i;
242 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248

Member Data Documentation

◆ fFavoritesMenu

CComPtr<IShellMenu> CMenuCallback::fFavoritesMenu
private

Definition at line 49 of file internettoolbar.h.

Referenced by GetObject().

◆ m_iCallback

int CMenuCallback::m_iCallback
protected

Definition at line 219 of file menu.cpp.

Referenced by CallbackSM(), and CMenuCallback().

◆ m_iTest

int CMenuCallback::m_iTest
protected

Definition at line 218 of file menu.cpp.

Referenced by CallbackSM(), CMenuCallback(), and SetTest().

◆ m_results

struct _test_info* CMenuCallback::m_results
protected

Definition at line 220 of file menu.cpp.

Referenced by CallbackSM(), and CMenuCallback().

◆ m_testsCount

int CMenuCallback::m_testsCount
protected

Definition at line 221 of file menu.cpp.

Referenced by CallbackSM(), and CMenuCallback().

◆ pSite

IUnknown* CMenuCallback::pSite = NULL
private

Definition at line 50 of file internettoolbar.h.

Referenced by CallbackSM(), and SetSite().


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