windows-nt/Source/XPSP1/NT/shell/osshell/lmui/shareui/menubg.cxx

145 lines
3.2 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1995 - 1995.
//
// File: menubg.cxx
//
// Contents: Implementation of IContextMenu
//
// History: 20-Dec-95 BruceFo Created
//
//----------------------------------------------------------------------------
#include "headers.hxx"
#pragma hdrstop
#include "util.hxx"
#include "menubg.hxx"
#include "menuutil.hxx"
#include "resource.h"
STDMETHODIMP
CSharesCMBG::QueryContextMenu(
HMENU hmenu,
UINT indexMenu,
UINT idCmdFirst,
UINT idCmdLast,
UINT uFlags
)
{
UINT idMainMerge;
if (uFlags & CMF_DVFILE)
{
// This IContextMenu was created to add items to the DefView menu.
// We only want to add a "new" item to the "File" menu, so set don't
// do any "main" merge.
idMainMerge = 0;
}
else
{
// In this case, it's actually a background right-click context menu,
// so merge in the "New" menu.
idMainMerge = POPUP_SHARESBG_POPUPMERGE2;
}
QCMINFO qcm = { hmenu, indexMenu, idCmdFirst, idCmdLast };
switch (m_level)
{
case 1:
MyMergeMenu(
g_hInstance,
0,
POPUP_SHARESBG_POPUPMERGE1,
&qcm);
break;
case 2:
MyMergeMenu(
g_hInstance,
idMainMerge,
POPUP_SHARESBG_POPUPMERGE2,
&qcm);
break;
default: appAssert(FALSE);
}
return ResultFromShort(qcm.idCmdFirst - idCmdFirst);
}
STDMETHODIMP
CSharesCMBG::InvokeCommand(
LPCMINVOKECOMMANDINFO lpici
)
{
if (HIWORD(lpici->lpVerb))
{
// Deal with string commands
return E_INVALIDARG;
}
appAssert(ICOL1_NAME == ICOL2_NAME);
appAssert(ICOL1_COMMENT == ICOL2_COMMENT);
UINT idCmd = (UINT)LOWORD(lpici->lpVerb);
switch (idCmd)
{
case FSIDM_SORTBYNAME:
ShellFolderView_ReArrange(m_hwnd, ICOL2_NAME);
return NOERROR;
case FSIDM_SORTBYCOMMENT:
ShellFolderView_ReArrange(m_hwnd, ICOL2_COMMENT);
return NOERROR;
case FSIDM_SORTBYPATH:
appAssert(m_level >= 2);
ShellFolderView_ReArrange(m_hwnd, ICOL2_PATH);
return NOERROR;
case FSIDM_SORTBYMAXUSES:
appAssert(m_level >= 2);
ShellFolderView_ReArrange(m_hwnd, ICOL2_MAXUSES);
return NOERROR;
case FSIDM_NEWSHARE:
{
appAssert(m_level >= 2);
// pass in a pointer to our own IUnknown
IUnknown* punk;
HRESULT hr = QueryInterface(IID_IUnknown, (LPVOID*)&punk);
if (SUCCEEDED(hr))
{
hr = ShareDoNew(punk, m_pszMachine);
punk->Release();
}
return hr;
}
default:
return E_INVALIDARG;
}
}
STDMETHODIMP
CSharesCMBG::GetCommandString(
UINT_PTR idCmd,
UINT uType,
UINT * pwReserved,
LPSTR pszName,
UINT cchMax
)
{
*((LPWSTR)pszName) = TEXT('\0');
if (uType == GCS_HELPTEXT)
{
LoadStringW(g_hInstance, (UINT)(idCmd + IDS_MH_FSIDM_FIRST), (LPWSTR)pszName, cchMax);
return NOERROR;
}
return E_FAIL;
}