ReactOS 0.4.16-dev-2293-g4d8327b
COpenWithMenu Class Reference

#include <COpenWithMenu.h>

Inheritance diagram for COpenWithMenu:
Collaboration diagram for COpenWithMenu:

Public Member Functions

 COpenWithMenu ()
 
 ~COpenWithMenu ()
 
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
 
STDMETHOD() Initialize (PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID) 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 ()
 
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidlFolder, [in] IDataObject *pdtobj, [in] HKEY hkeyProgID)
 

Private Member Functions

HBITMAP IconToBitmap (HICON hIcon)
 
VOID AddChooseProgramItem ()
 
VOID AddApp (PVOID pApp)
 

Private Attributes

UINT m_idCmdFirst
 
UINT m_idCmdLast
 
WCHAR m_wszPath [MAX_PATH]
 
HMENU m_hSubMenu
 
COpenWithListm_pAppList
 

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
 
- Public Types inherited from IShellExtInit
typedef IShellExtInitLPSHELLEXTINIT
 
- 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 28 of file COpenWithMenu.h.

Constructor & Destructor Documentation

◆ COpenWithMenu()

COpenWithMenu::COpenWithMenu ( )

Definition at line 1260 of file COpenWithMenu.cpp.

1261{
1262 m_idCmdFirst = 0;
1263 m_idCmdLast = 0;
1265}
COpenWithList * m_pAppList
Definition: COpenWithMenu.h:38

◆ ~COpenWithMenu()

COpenWithMenu::~COpenWithMenu ( )

Definition at line 1267 of file COpenWithMenu.cpp.

1268{
1269 TRACE("Destroying COpenWithMenu(%p)\n", this);
1270
1271 if (m_hSubMenu)
1272 {
1273 INT Count, Index;
1274 MENUITEMINFOW mii;
1275
1276 /* get item count */
1278 if (Count == -1)
1279 return;
1280
1281 /* setup menuitem info */
1282 ZeroMemory(&mii, sizeof(mii));
1283 mii.cbSize = sizeof(mii);
1285
1286 for(Index = 0; Index < Count; Index++)
1287 {
1289 {
1290 if (mii.hbmpChecked)
1292 }
1293 }
1294 }
1295
1296 if (m_pAppList)
1297 delete m_pAppList;
1298}
#define TRUE
Definition: types.h:120
pKey DeleteObject()
#define ZeroMemory
Definition: minwinbase.h:31
int Count
Definition: noreturn.cpp:7
#define TRACE(s)
Definition: solgame.cpp:4
HBITMAP hbmpChecked
Definition: winuser.h:3368
int32_t INT
Definition: typedefs.h:58
_In_ WDFCOLLECTION _In_ ULONG Index
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
#define MIIM_CHECKMARKS
Definition: winuser.h:735
#define MIIM_FTYPE
Definition: winuser.h:740
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
#define MIIM_DATA
Definition: winuser.h:737

Member Function Documentation

◆ AddApp()

VOID COpenWithMenu::AddApp ( PVOID  pApp)
private

Definition at line 1351 of file COpenWithMenu.cpp.

1352{
1353 MENUITEMINFOW mii;
1354 LPCWSTR pwszName = m_pAppList->GetName((COpenWithList::SApp*)pApp);
1355 if (!pwszName) return;
1356
1357 ZeroMemory(&mii, sizeof(mii));
1358 mii.cbSize = sizeof(mii);
1360 mii.fType = MFT_STRING;
1361 mii.fState = MFS_ENABLED;
1362 mii.wID = m_idCmdLast;
1363 mii.dwTypeData = const_cast<LPWSTR>(pwszName);
1364 mii.dwItemData = (ULONG_PTR)pApp;
1365
1367 if (hIcon)
1368 {
1369 mii.fMask |= MIIM_CHECKMARKS;
1371 }
1372
1373 if (InsertMenuItemW(m_hSubMenu, -1, TRUE, &mii))
1374 m_idCmdLast++;
1375}
static LPCWSTR GetName(SApp *pApp)
static HICON GetIcon(SApp *pApp)
HBITMAP IconToBitmap(HICON hIcon)
#define ULONG_PTR
Definition: config.h:101
static HICON
Definition: imagelist.c:80
HICON hIcon
Definition: msconfig.c:44
ULONG_PTR dwItemData
Definition: winuser.h:3370
LPWSTR dwTypeData
Definition: winuser.h:3371
HBITMAP hbmpUnchecked
Definition: winuser.h:3369
#define MIIM_ID
Definition: winuser.h:733
#define MIIM_STATE
Definition: winuser.h:732
#define MFS_ENABLED
Definition: winuser.h:761
#define MFT_STRING
Definition: winuser.h:757
#define MIIM_TYPE
Definition: winuser.h:736
BOOL WINAPI InsertMenuItemW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by QueryContextMenu().

◆ AddChooseProgramItem()

VOID COpenWithMenu::AddChooseProgramItem ( )
private

Definition at line 1323 of file COpenWithMenu.cpp.

1324{
1325 MENUITEMINFOW mii;
1326 WCHAR wszBuf[128];
1327
1328 ZeroMemory(&mii, sizeof(mii));
1329 mii.cbSize = sizeof(mii);
1330 mii.fMask = MIIM_TYPE | MIIM_ID;
1331 mii.fType = MFT_SEPARATOR;
1332 mii.wID = -1;
1333 InsertMenuItemW(m_hSubMenu, -1, TRUE, &mii);
1334
1336 {
1337 ERR("Failed to load string\n");
1338 return;
1339 }
1340
1342 mii.fType = MFT_STRING;
1343 mii.fState = MFS_ENABLED;
1344 mii.wID = m_idCmdLast;
1345 mii.dwTypeData = (LPWSTR)wszBuf;
1346 mii.cch = wcslen(wszBuf);
1347
1348 InsertMenuItemW(m_hSubMenu, -1, TRUE, &mii);
1349}
#define shell32_hInstance
#define ERR(fmt,...)
Definition: precomp.h:57
INT WINAPI DECLSPEC_HOTPATCH LoadStringW(HINSTANCE instance, UINT resource_id, LPWSTR buffer, INT buflen)
Definition: string.c:1220
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2983
#define IDS_OPEN_WITH_CHOOSE
Definition: shresdef.h:135
#define _countof(array)
Definition: sndvol32.h:70
#define MFT_SEPARATOR
Definition: winuser.h:755
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by QueryContextMenu().

◆ GetCommandString()

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

Implements IContextMenu.

Definition at line 1498 of file COpenWithMenu.cpp.

1500{
1501 TRACE("%p %lu %u %p %p %u\n", this,
1502 idCmd, uType, pwReserved, pszName, cchMax );
1503
1504 const SIZE_T idChooseApp = m_idCmdLast;
1505 if (m_idCmdFirst + idCmd == idChooseApp)
1506 return SHELL_GetCommandStringImpl(0, uType, pszName, cchMax, g_VerbMap);
1507
1508 return E_NOTIMPL;
1509}
static const CMVERBMAP g_VerbMap[]
UINT cchMax
#define E_NOTIMPL
Definition: ddrawi.h:99
HRESULT SHELL_GetCommandStringImpl(SIZE_T CmdId, UINT uFlags, LPSTR Buf, UINT cchBuf, const CMVERBMAP *pMap)
Definition: utils.cpp:1792
ULONG_PTR SIZE_T
Definition: typedefs.h:80

◆ HandleMenuMsg()

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

Implements IContextMenu2.

Definition at line 1511 of file COpenWithMenu.cpp.

1515{
1516 TRACE("This %p uMsg %x\n", this, uMsg);
1517
1518 return E_NOTIMPL;
1519}

◆ IconToBitmap()

HBITMAP COpenWithMenu::IconToBitmap ( HICON  hIcon)
private

Definition at line 1300 of file COpenWithMenu.cpp.

1301{
1302 HDC hdc, hdcScr;
1303 HBITMAP hbm, hbmOld;
1304 RECT rc;
1305
1306 hdcScr = GetDC(NULL);
1307 hdc = CreateCompatibleDC(hdcScr);
1309 hbm = CreateCompatibleBitmap(hdcScr, rc.right, rc.bottom);
1310 ReleaseDC(NULL, hdcScr);
1311
1312 hbmOld = (HBITMAP)SelectObject(hdc, hbm);
1313 FillRect(hdc, &rc, (HBRUSH)(COLOR_MENU + 1));
1314 if (!DrawIconEx(hdc, 0, 0, hIcon, rc.right, rc.bottom, 0, NULL, DI_NORMAL))
1315 ERR("DrawIcon failed: %x\n", GetLastError());
1316 SelectObject(hdc, hbmOld);
1317
1318 DeleteDC(hdc);
1319
1320 return hbm;
1321}
#define NULL
Definition: types.h:112
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
_In_ HBITMAP hbm
Definition: ntgdi.h:2776
LONG right
Definition: windef.h:108
LONG bottom
Definition: windef.h:109
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
#define DI_NORMAL
Definition: wingdi.h:72
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
BOOL WINAPI DeleteDC(_In_ HDC)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define COLOR_MENU
Definition: winuser.h:928
#define SM_CXMENUCHECK
Definition: winuser.h:1042
#define SM_CYMENUCHECK
Definition: winuser.h:1043
BOOL WINAPI DrawIconEx(_In_ HDC, _In_ int, _In_ int, _In_ HICON, _In_ int, _In_ int, _In_ UINT, _In_opt_ HBRUSH, _In_ UINT)
Definition: cursoricon.c:2397
HDC WINAPI GetDC(_In_opt_ HWND)
int WINAPI GetSystemMetrics(_In_ int)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)

Referenced by AddApp().

◆ Initialize()

HRESULT WINAPI COpenWithMenu::Initialize ( PCIDLIST_ABSOLUTE  pidlFolder,
IDataObject pdtobj,
HKEY  hkeyProgID 
)
override

Implements IShellExtInit.

Definition at line 1522 of file COpenWithMenu.cpp.

1525{
1526 LPCITEMIDLIST pidlFolder2;
1527 LPCITEMIDLIST pidlChild;
1528
1529 TRACE("This %p\n", this);
1530
1531 if (pdtobj == NULL)
1532 return E_INVALIDARG;
1533
1534 CDataObjectHIDA pida(pdtobj);
1535 if (FAILED(pida.hr()))
1536 {
1537 ERR("pdtobj->GetData failed with 0x%x\n", pida.hr());
1538 return pida.hr();
1539 }
1540
1541 ASSERT(pida->cidl >= 1);
1542
1543 pidlFolder2 = HIDA_GetPIDLFolder(pida);
1544 pidlChild = HIDA_GetPIDLItem(pida, 0);
1545
1546 if (!_ILIsValue(pidlChild))
1547 {
1548 TRACE("pidl is not a file\n");
1549 return E_FAIL;
1550 }
1551
1552 CComHeapPtr<ITEMIDLIST> pidl(ILCombine(pidlFolder2, pidlChild));
1553 if (!pidl)
1554 {
1555 ERR("no mem\n");
1556 return E_OUTOFMEMORY;
1557 }
1558
1559 if (!SHGetPathFromIDListW(pidl, m_wszPath))
1560 {
1561 ERR("SHGetPathFromIDListW failed\n");
1562 return E_FAIL;
1563 }
1564
1565 TRACE("szPath %s\n", debugstr_w(m_wszPath));
1566
1568 if (PathIsExeW(pwszExt) || !_wcsicmp(pwszExt, L".lnk"))
1569 {
1570 TRACE("file is a executable or shortcut\n");
1571 return E_FAIL;
1572 }
1573
1574 return S_OK;
1575}
EXTERN_C BOOL PathIsExeW(LPCWSTR lpszPath)
Definition: shellpath.c:539
WCHAR m_wszPath[MAX_PATH]
Definition: COpenWithMenu.h:36
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_FAIL
Definition: ddrawi.h:102
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
Definition: path.c:1274
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:159
#define L(x)
Definition: resources.c:13
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_w
Definition: kernel32.h:32
#define ASSERT(a)
Definition: mode.c:44
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1496
BOOL _ILIsValue(LPCITEMIDLIST pidl)
Definition: pidl.c:2151
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:713
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
Definition: shellutils.h:708
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42

◆ InvokeCommand()

HRESULT WINAPI COpenWithMenu::InvokeCommand ( LPCMINVOKECOMMANDINFO  lpcmi)
override

Implements IContextMenu.

Definition at line 1459 of file COpenWithMenu.cpp.

1460{
1461 const SIZE_T idChooseApp = m_idCmdLast;
1462 HRESULT hr = E_FAIL;
1463
1464 TRACE("This %p idFirst %u idLast %u idCmd %u\n", this, m_idCmdFirst, m_idCmdLast, m_idCmdFirst + LOWORD(lpici->lpVerb));
1465
1466 if (!IS_INTRESOURCE(lpici->lpVerb) && SHELL_MapContextMenuVerbToCmdId(lpici, g_VerbMap) == 0)
1467 goto DoChooseApp;
1468
1469 if (IS_INTRESOURCE(lpici->lpVerb) && m_idCmdFirst + LOWORD(lpici->lpVerb) <= m_idCmdLast)
1470 {
1471 if (m_idCmdFirst + LOWORD(lpici->lpVerb) == idChooseApp)
1472 {
1473DoChooseApp:
1475 }
1476 else
1477 {
1478 /* retrieve menu item info */
1479 MENUITEMINFOW mii;
1480 ZeroMemory(&mii, sizeof(mii));
1481 mii.cbSize = sizeof(mii);
1482 mii.fMask = MIIM_DATA | MIIM_FTYPE;
1483
1484 if (GetMenuItemInfoW(m_hSubMenu, LOWORD(lpici->lpVerb), TRUE, &mii) && mii.dwItemData)
1485 {
1486 /* launch item with specified app */
1489 hr = S_OK;
1490 }
1491 }
1492 }
1493
1494 return hr;
1495}
HRESULT SH32_InvokeOpenWith(_In_ PCWSTR pszPath, _In_ LPCMINVOKECOMMANDINFO pici, _Out_ HANDLE *phProcess)
static BOOL Execute(SApp *pApp, LPCWSTR pwszFilePath)
#define IS_INTRESOURCE(x)
Definition: loader.c:613
HRESULT SHELL_MapContextMenuVerbToCmdId(LPCMINVOKECOMMANDINFO pICI, const CMVERBMAP *pMap)
Definition: utils.cpp:1758
#define LOWORD(l)
Definition: pedump.c:82
HRESULT hr
Definition: shlfolder.c:183

◆ QueryContextMenu()

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

Implements IContextMenu.

Definition at line 1383 of file COpenWithMenu.cpp.

1389{
1390 TRACE("hMenu %p indexMenu %u idFirst %u idLast %u uFlags %u\n", hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
1391
1392 INT DefaultPos = GetMenuDefaultItem(hMenu, TRUE, 0);
1393
1394 WCHAR wszName[100];
1395 UINT NameId = (DefaultPos == -1 ? IDS_OPEN : IDS_OPEN_WITH);
1396 if (!LoadStringW(shell32_hInstance, NameId, wszName, _countof(wszName)))
1397 {
1398 ERR("Failed to load string\n");
1399 return E_FAIL;
1400 }
1401
1402 /* Init first cmd id and submenu */
1403 m_idCmdFirst = m_idCmdLast = idCmdFirst;
1404 m_hSubMenu = NULL;
1405
1406 /* We can only be a submenu if we are not the default */
1407 if (DefaultPos != -1)
1408 {
1409 /* Load applications list */
1410 m_pAppList->Load();
1412
1413 /* Create submenu only if there is more than one application and menu has a default item */
1415 {
1417
1418 for(UINT i = 0; i < m_pAppList->GetCount(); ++i)
1419 {
1421 if (pApp->bRecommended)
1422 AddApp(pApp);
1423 }
1424
1426 }
1427 }
1428
1429 /* Insert menu item */
1430 MENUITEMINFOW mii;
1431 ZeroMemory(&mii, sizeof(mii));
1432 mii.cbSize = sizeof(mii);
1434 if (m_hSubMenu)
1435 {
1436 mii.fMask |= MIIM_SUBMENU;
1437 mii.hSubMenu = m_hSubMenu;
1438 mii.wID = -1;
1439 }
1440 else
1441 mii.wID = m_idCmdLast;
1442
1443 mii.fType = MFT_STRING;
1444 mii.dwTypeData = (LPWSTR)wszName;
1445 mii.fState = MFS_ENABLED;
1446 if (DefaultPos == -1)
1447 {
1448 mii.fState |= MFS_DEFAULT;
1449 indexMenu = 0;
1450 }
1451
1452 if (!InsertMenuItemW(hMenu, indexMenu, TRUE, &mii))
1453 return E_FAIL;
1454
1456}
#define IDS_OPEN
Definition: resource.h:18
BOOL LoadRecommended(LPCWSTR pwszFilePath)
UINT GetRecommendedCount()
VOID AddChooseProgramItem()
VOID AddApp(PVOID pApp)
UINT uFlags
Definition: api.c:59
#define MAKE_HRESULT(sev, fac, code)
Definition: dmerror.h:29
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
unsigned int UINT
Definition: ndis.h:50
#define IDS_OPEN_WITH
Definition: shresdef.h:134
#define SEVERITY_SUCCESS
Definition: winerror.h:177
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
UINT WINAPI GetMenuDefaultItem(_In_ HMENU hMenu, _In_ UINT fByPos, _In_ UINT gmdiFlags)
#define MFS_DEFAULT
Definition: winuser.h:759
#define MIIM_SUBMENU
Definition: winuser.h:734

Member Data Documentation

◆ m_hSubMenu

HMENU COpenWithMenu::m_hSubMenu
private

◆ m_idCmdFirst

UINT COpenWithMenu::m_idCmdFirst
private

Definition at line 35 of file COpenWithMenu.h.

Referenced by COpenWithMenu(), GetCommandString(), InvokeCommand(), and QueryContextMenu().

◆ m_idCmdLast

UINT COpenWithMenu::m_idCmdLast
private

◆ m_pAppList

COpenWithList* COpenWithMenu::m_pAppList
private

Definition at line 38 of file COpenWithMenu.h.

Referenced by AddApp(), COpenWithMenu(), QueryContextMenu(), and ~COpenWithMenu().

◆ m_wszPath

WCHAR COpenWithMenu::m_wszPath[MAX_PATH]
private

Definition at line 36 of file COpenWithMenu.h.

Referenced by Initialize(), InvokeCommand(), and QueryContextMenu().


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