204 lines
5 KiB
C++
204 lines
5 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) 1996-2000 Microsoft Corporation
|
|
//
|
|
// Module Name:
|
|
// ExtMenu.cpp
|
|
//
|
|
// Abstract:
|
|
// Implementation of the CExtMenuItem class.
|
|
//
|
|
// Author:
|
|
// David Potter (davidp) August 28, 1996
|
|
//
|
|
// Revision History:
|
|
//
|
|
// Notes:
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "ExtMenu.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CExtMenuItem
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
IMPLEMENT_DYNAMIC( CExtMenuItem, CObject );
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CExtMenuItem::CExtMenuItem
|
|
//
|
|
// Routine Description:
|
|
// Default constructor.
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Value:
|
|
// None.
|
|
//
|
|
//--
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
CExtMenuItem::CExtMenuItem( void )
|
|
{
|
|
CommonConstruct();
|
|
|
|
} //*** CExtMenuItem::CExtMenuItem()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CExtMenuItem::CExtMenuItem
|
|
//
|
|
// Routine Description:
|
|
// Constructor. Caller must check range on ID and flags.
|
|
//
|
|
// Arguments:
|
|
// lpszName [IN] Name of item.
|
|
// lpszStatusBarText [IN] Text to appear on the status bar when the
|
|
// item is highlighted.
|
|
// nExtCommandID [IN] Extension's ID for the command.
|
|
// nCommandID [IN] ID for the command when menu item is invoked.
|
|
// nMenuItemID [IN] Index in the menu of the item.
|
|
// uFlags [IN] Menu flags.
|
|
// bMakeDefault [IN] TRUE = Make this item the default item.
|
|
// piCommand [IN OUT] Command interface.
|
|
//
|
|
// Return Value:
|
|
// None.
|
|
//
|
|
//--
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
CExtMenuItem::CExtMenuItem(
|
|
IN LPCTSTR lpszName,
|
|
IN LPCTSTR lpszStatusBarText,
|
|
IN ULONG nExtCommandID,
|
|
IN ULONG nCommandID,
|
|
IN ULONG nMenuItemID,
|
|
IN ULONG uFlags,
|
|
IN BOOL bMakeDefault,
|
|
IN OUT IWEInvokeCommand * piCommand
|
|
)
|
|
{
|
|
CommonConstruct();
|
|
|
|
ASSERT( piCommand != NULL );
|
|
|
|
m_strName = lpszName;
|
|
m_strStatusBarText = lpszStatusBarText;
|
|
m_nExtCommandID = nExtCommandID;
|
|
m_nCommandID = nCommandID;
|
|
m_nMenuItemID = nMenuItemID;
|
|
m_uFlags = uFlags;
|
|
m_bDefault = bMakeDefault;
|
|
m_piCommand = piCommand;
|
|
|
|
// will throw its own exception if it fails
|
|
if ( uFlags & MF_POPUP )
|
|
{
|
|
m_plSubMenuItems = new CExtMenuItemList;
|
|
if ( m_plSubMenuItems == NULL )
|
|
{
|
|
AfxThrowMemoryException();
|
|
} // if: error allocating memory
|
|
} // if: popup menu
|
|
|
|
ASSERT_VALID( this );
|
|
|
|
} //*** CExtMenuItem::CExtMenuItem()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CExtMenuItem::~CExtMenuItem
|
|
//
|
|
// Routine Description:
|
|
// Default constructor.
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Value:
|
|
// None.
|
|
//
|
|
//--
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
CExtMenuItem::~CExtMenuItem( void )
|
|
{
|
|
delete m_plSubMenuItems;
|
|
|
|
// Nuke data so it can't be used again
|
|
CommonConstruct();
|
|
|
|
} //*** CExtMenuItem::~CExtMenuItem()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CExtMenuItem::CommonConstruct
|
|
//
|
|
// Routine Description:
|
|
// Common object construction.
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Value:
|
|
// None.
|
|
//
|
|
//--
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
void CExtMenuItem::CommonConstruct( void )
|
|
{
|
|
m_strName.Empty();
|
|
m_strStatusBarText.Empty();
|
|
m_nExtCommandID = (ULONG) -1;
|
|
m_nCommandID = (ULONG) -1;
|
|
m_nMenuItemID = (ULONG) -1;
|
|
m_uFlags = (ULONG) -1;
|
|
m_bDefault = FALSE;
|
|
m_piCommand = NULL;
|
|
|
|
m_plSubMenuItems = NULL;
|
|
m_hmenuPopup = NULL;
|
|
|
|
} //*** CExtMenuItem::CommonConstruct()
|
|
|
|
#ifdef _DEBUG
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CExtMenuItem::AssertValid
|
|
//
|
|
// Routine Description:
|
|
// Assert that the object is valid.
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Value:
|
|
// None.
|
|
//
|
|
//--
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
void CExtMenuItem::AssertValid( void )
|
|
{
|
|
CObject::AssertValid();
|
|
|
|
if ( ( m_nExtCommandID == -1 )
|
|
|| ( m_nCommandID == -1 )
|
|
|| ( m_nMenuItemID == -1 )
|
|
|| ( m_uFlags == -1 )
|
|
|| ( ( ( m_uFlags & MF_POPUP ) == 0 ) && ( m_plSubMenuItems != NULL ) )
|
|
|| ( ( ( m_uFlags & MF_POPUP ) != 0 ) && ( m_plSubMenuItems == NULL ) )
|
|
)
|
|
{
|
|
ASSERT( FALSE );
|
|
}
|
|
|
|
} //*** CExtMenuItem::AssertValid()
|
|
#endif
|