mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
273 lines
6.9 KiB
273 lines
6.9 KiB
//____________________________________________________________________________
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1997 - 1999
|
|
//
|
|
// File: menubtn.cpp
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 5/17/1997 WayneSc Created
|
|
//____________________________________________________________________________
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "menubtn.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// IMenuButton implementation
|
|
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(CMenuButton);
|
|
|
|
CMenuButton::CMenuButton()
|
|
{
|
|
m_pControlbar = NULL;
|
|
m_pMenuButtonsMgr = NULL;
|
|
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(CMenuButton);
|
|
}
|
|
|
|
CMenuButton::~CMenuButton()
|
|
{
|
|
m_pControlbar = NULL;
|
|
m_pMenuButtonsMgr = NULL;
|
|
|
|
DEBUG_DECREMENT_INSTANCE_COUNTER(CMenuButton);
|
|
}
|
|
|
|
void CMenuButton::SetControlbar(CControlbar* pControlbar)
|
|
{
|
|
m_pControlbar = pControlbar;
|
|
}
|
|
|
|
CControlbar* CMenuButton::GetControlbar()
|
|
{
|
|
return m_pControlbar;
|
|
}
|
|
|
|
CMenuButtonsMgr* CMenuButton::GetMenuButtonsMgr(void)
|
|
{
|
|
if ((NULL == m_pMenuButtonsMgr) && (NULL != m_pControlbar) )
|
|
{
|
|
m_pMenuButtonsMgr = m_pControlbar->GetMenuButtonsMgr();
|
|
}
|
|
|
|
return m_pMenuButtonsMgr;
|
|
}
|
|
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Member: AddButton
|
|
//
|
|
// Synopsis: Add a menu button, called by snapin.
|
|
//
|
|
// Arguments: [idCommand] - Command ID for the menu button.
|
|
// [lpButtonText] - The text for menu button.
|
|
// [lpTooltipText] - Status / Tool tip text.
|
|
//
|
|
// Returns: HRESULT
|
|
//
|
|
//--------------------------------------------------------------------
|
|
STDMETHODIMP CMenuButton::AddButton(int idCommand, LPOLESTR lpButtonText, LPOLESTR lpTooltipText)
|
|
{
|
|
DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IMenuButton::AddButton"));
|
|
|
|
if (lpButtonText == NULL || lpTooltipText == NULL)
|
|
{
|
|
sc = E_INVALIDARG;
|
|
TraceSnapinError(_T("Invalid Args"), sc);
|
|
return sc.ToHr();
|
|
}
|
|
|
|
CMenuButtonsMgr* pMenuButtonsMgr = GetMenuButtonsMgr();
|
|
if (NULL == pMenuButtonsMgr)
|
|
{
|
|
sc = E_UNEXPECTED;
|
|
return sc.ToHr();
|
|
}
|
|
|
|
sc = pMenuButtonsMgr->ScAddMenuButton(this, idCommand, lpButtonText, lpTooltipText);
|
|
if (sc)
|
|
return sc.ToHr();
|
|
|
|
return sc.ToHr();
|
|
}
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Member: SetButton
|
|
//
|
|
// Synopsis: Modify a menu button name or status text, called by snapin.
|
|
//
|
|
// Arguments: [idCommand] - Command ID for the menu button.
|
|
// [lpButtonText] - The text for menu button.
|
|
// [lpTooltipText] - Status / Tool tip text.
|
|
//
|
|
// Returns: HRESULT
|
|
//
|
|
//--------------------------------------------------------------------
|
|
STDMETHODIMP CMenuButton::SetButton(int idCommand, LPOLESTR lpButtonText, LPOLESTR lpTooltipText)
|
|
{
|
|
DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IMenuButton::SetButton"));
|
|
|
|
if (lpButtonText == NULL || lpTooltipText == NULL)
|
|
{
|
|
sc = E_INVALIDARG;
|
|
TraceSnapinError(_T("Invalid Args"), sc);
|
|
return sc.ToHr();
|
|
}
|
|
|
|
CMenuButtonsMgr* pMenuButtonsMgr = GetMenuButtonsMgr();
|
|
if (NULL == pMenuButtonsMgr)
|
|
{
|
|
sc = E_UNEXPECTED;
|
|
return sc.ToHr();
|
|
}
|
|
|
|
sc = pMenuButtonsMgr->ScModifyMenuButton(this, idCommand, lpButtonText, lpTooltipText);
|
|
if (sc)
|
|
return sc.ToHr();
|
|
|
|
return sc.ToHr();
|
|
}
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Member: SetButtonState
|
|
//
|
|
// Synopsis: Modify a menu button state, called by snapin.
|
|
//
|
|
// Arguments: [idCommand] - Command ID for the menu button.
|
|
// [nState] - The state to be modified.
|
|
// [bState] - Set or Reset the state.
|
|
//
|
|
// Returns: HRESULT
|
|
//
|
|
//--------------------------------------------------------------------
|
|
STDMETHODIMP CMenuButton::SetButtonState(int idCommand, MMC_BUTTON_STATE nState, BOOL bState)
|
|
{
|
|
DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IMenuButton::SetButtonState"));
|
|
|
|
if (nState == CHECKED || nState == INDETERMINATE)
|
|
{
|
|
sc = E_INVALIDARG;
|
|
TraceSnapinError(_T("Invalid Button States"), sc);
|
|
return sc.ToHr();
|
|
}
|
|
|
|
if (m_pControlbar == NULL)
|
|
{
|
|
sc = E_UNEXPECTED;
|
|
return sc.ToHr();
|
|
}
|
|
|
|
// ENABLED, HIDDEN, BUTTONPRESSED
|
|
CMenuButtonsMgr* pMenuButtonsMgr = GetMenuButtonsMgr();
|
|
if (NULL == pMenuButtonsMgr)
|
|
{
|
|
sc = E_UNEXPECTED;
|
|
return sc.ToHr();
|
|
}
|
|
|
|
sc = pMenuButtonsMgr->ScModifyMenuButtonState(this, idCommand, nState, bState);
|
|
if (sc)
|
|
return sc.ToHr();
|
|
|
|
return sc.ToHr();
|
|
}
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Member: ScAttach
|
|
//
|
|
// Synopsis: Attach this MenuButton object to the UI.
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: SC
|
|
//
|
|
//--------------------------------------------------------------------
|
|
SC CMenuButton::ScAttach(void)
|
|
{
|
|
DECLARE_SC(sc, _T("CMenuButton::ScAttach"));
|
|
|
|
CMenuButtonsMgr* pMenuButtonsMgr = GetMenuButtonsMgr();
|
|
if (NULL == pMenuButtonsMgr)
|
|
return (sc = E_UNEXPECTED);
|
|
|
|
sc = pMenuButtonsMgr->ScAttachMenuButton(this);
|
|
if (sc)
|
|
return sc.ToHr();
|
|
|
|
return sc;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Member: ScDetach
|
|
//
|
|
// Synopsis: Detach this MenuButton object from the UI.
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: SC
|
|
//
|
|
//--------------------------------------------------------------------
|
|
SC CMenuButton::ScDetach(void)
|
|
{
|
|
DECLARE_SC(sc, _T("CMenuButton::ScDetach"));
|
|
|
|
CMenuButtonsMgr* pMenuButtonsMgr = GetMenuButtonsMgr();
|
|
if (NULL == pMenuButtonsMgr)
|
|
return (sc = E_UNEXPECTED);
|
|
|
|
sc = pMenuButtonsMgr->ScDetachMenuButton(this);
|
|
if (sc)
|
|
return sc;
|
|
|
|
SetControlbar(NULL);
|
|
|
|
return sc;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Member: ScNotifyMenuBtnClick
|
|
//
|
|
// Synopsis: Notify the Controbar (snapin) that menu button is clicked.
|
|
//
|
|
// Arguments: [hNode] - The node that owns the result pane.
|
|
// [bScope] - Scope or Result.
|
|
// [lParam] - If result (pane) lParam of result item.
|
|
// [menuButtonData] - MENUBUTTONDATA
|
|
//
|
|
// Returns: SC
|
|
//
|
|
//--------------------------------------------------------------------
|
|
SC CMenuButton:: ScNotifyMenuBtnClick(HNODE hNode, bool bScope,
|
|
LPARAM lParam,
|
|
MENUBUTTONDATA& menuButtonData)
|
|
|
|
{
|
|
DECLARE_SC(sc, _T("CMenuButton::ScNotifyMenuBtnClick"));
|
|
|
|
if (NULL == m_pControlbar)
|
|
return (sc = E_UNEXPECTED);
|
|
|
|
sc = m_pControlbar->ScNotifySnapinOfMenuBtnClick(hNode, bScope, lParam, &menuButtonData);
|
|
if (sc)
|
|
return sc.ToHr();
|
|
|
|
return sc;
|
|
}
|