windows-nt/Source/XPSP1/NT/multimedia/media/sndrec32/o2base/iputils.cxx
2020-09-26 16:20:57 +08:00

109 lines
3.2 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//+---------------------------------------------------------------------
//
// File: iputils.hxx
//
// Contents: Helper functions for in-place activation
//
//----------------------------------------------------------------------
#include "headers.hxx"
#pragma hdrstop
#define MAXLABELLEN 32
//+---------------------------------------------------------------
//
// Function: InsertServerMenus
//
// Synopsis: Inserts the objects menus into a shared menu after
// the top-level application has inserted its menus
//
// Arguments: [hmenuShared] -- the shared menu to recieve the objects menus
// [hmenuObject] -- all of the objects menus
// [lpmgw] -- menu group widths indicating where the menus
// should be inserted
//
// Returns: Success if the menus were merged successfully
//
// Notes: The function does most of the shared menu work
// by the object between the IOleInPlaceFrame::InsertMenus and
// IOleInPlaceFrame::SetMenu method calls.
// c.f. RemoveServerMenus
//
//----------------------------------------------------------------
HRESULT
InsertServerMenus(HMENU hmenuShared,
HMENU hmenuObject,
LPOLEMENUGROUPWIDTHS lpmgw)
{
int i, j;
HMENU hmenuXfer;
TCHAR szLabel[MAXLABELLEN];
UINT iServer = 0;
UINT iShared = 0;
// for each of the Edit, Object, and Help menu groups
for (j = 1; j <= 5; j += 2)
{
// advance over container menus
iShared += (UINT)lpmgw->width[j-1];
// pull out the popup menus from servers menu
for (i = 0; i < lpmgw->width[j]; i++)
{
GetMenuString(hmenuObject,
iServer,
szLabel,
MAXLABELLEN,
MF_BYPOSITION);
hmenuXfer = GetSubMenu(hmenuObject, iServer++);
if (!InsertMenu(hmenuShared,
iShared++,
MF_BYPOSITION|MF_POPUP,
(UINT_PTR)hmenuXfer,
szLabel))
{
return HRESULT_FROM_WIN32(GetLastError());
}
}
}
return NOERROR;
}
//+---------------------------------------------------------------
//
// Function: RemoveServerMenus
//
// Synopsis: Removes the objects menus from a shared menu
//
// Arguments: [hmenuShared] -- the menu contain both the application's
// and the object's menus
// [lpmgw] -- menu group widths indicating which menus should
// be removed
//
// Notes: c.f. InsertServerMenus
//
//----------------------------------------------------------------
void
RemoveServerMenus(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpmgw)
{
int i, j;
UINT iShared = 0;
// for each of the Edit, Object, and Help menu groups
for (j = 1; j <= 5; j += 2)
{
// advance over container menus
iShared += (UINT)lpmgw->width[j-1];
// pull out the popup menus from shared menu
for (i = 0; i < lpmgw->width[j]; i++)
{
RemoveMenu(hmenuShared, iShared, MF_BYPOSITION);
}
}
}