文書番号: 236312 - 最終更新日: 2006年11月21日 - リビジョン: 3.2

Visual C++ で CHtmlView の既定のポップアップ メニューを無効にする方法

目次

すべて展開する | すべて折りたたむ

概要

デフォルト CHtmlView Appwizard アプリケーションを作成します。 Microsoft Internet Explorer 内の任意の Web サイトを右クリックすると、既定のポップアップ メニューが表示されます。 ポップアップ メニューが表示されないように Web ブラウザー コントロールのこの動作をオーバーライドする方法をマイクロソフトから driller (MFC) のサンプルに示します。 ユーザーを Web ページのソースやプロパティを表示またはその他の機能を [戻る] ボタンと [進む] ボタンなどを使用したくない場合は、このポップアップ メニューを無効に可能性があります。 または、既定のポップアップ メニューを無効にもする必要がありますポップアップ メニューに、独自の機能を追加する場合は、します。

メモ WebBrowser コントロールに対してのみこの動作をオーバーライドする方法を driller (MFC) のサンプルに示します。 CHtmlView クラスは使用されません。

詳細

この資料は、次のマイクロソフト Web サイトから利用できるの油田 (MFC)、サンプルに基づいています。
http://msdn.microsoft.com/downloads/samples/Internet/browser/driller/Default.asp (http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=ae22e7a9-611f-4112-8b17-0980412d07a5&displaylang=en)
driller には Custsite.h、Custsite.cpp、Idispimp.h、Idispimp.cpp ここで使用されるコードが含まれます。 これらのメソッドは Internet Explorer ではサポート 4 および Internet Explorer 5。

既定のポップアップ メニューを無効にする手順

  1. MySample と呼ばれる AppWizard で生成された SDI アプリケーションを作成します。 手順 6/6 で CHtmlView に変更します。
  2. MySample.h を開き、CMySampleApp クラスに次のように、パブリック メンバー変数を追加:
    public:
             class CImpIDispatch* m_pDispOM;
    					
  3. "Custsite.h"と呼ばれるプロジェクトに新しいヘッダー ファイルを追加します。 コピーし、次のコードを貼り付けます:
    //=--------------------------------------------------------------------------=
    //  (C) Copyright 1996-1999 Microsoft Corporation. All Rights Reserved.
    //=--------------------------------------------------------------------------=
    #ifndef __CUSTOMSITEH__
    #define __CUSTOMSITEH__
    
    #include "idispimp.h"
    #include <mshtmhst.h>
    
    // 
    // NOTE: 
    // Some of the code in this file is MFC implementation specific.
    // Changes in future versions of MFC implementation may require
    // the code to be changed. Please check the readme of this
    // sample for more information 
    // 
    
    class CCustomControlSite:public COleControlSite
    {
    public:
    	CCustomControlSite(COleControlContainer *pCnt):COleControlSite(pCnt){}
    
    protected:
    
    	DECLARE_INTERFACE_MAP();
    BEGIN_INTERFACE_PART(DocHostUIHandler, IDocHostUIHandler)
    	STDMETHOD(ShowContextMenu)(/* [in] */ DWORD dwID,
                /* [in] */ POINT __RPC_FAR *ppt,
                /* [in] */ IUnknown __RPC_FAR *pcmdtReserved,
                /* [in] */ IDispatch __RPC_FAR *pdispReserved);
    	STDMETHOD(GetHostInfo)( 
                /* [out][in] */ DOCHOSTUIINFO __RPC_FAR *pInfo);
    	STDMETHOD(ShowUI)( 
                /* [in] */ DWORD dwID,
                /* [in] */ IOleInPlaceActiveObject __RPC_FAR *pActiveObject,
                /* [in] */ IOleCommandTarget __RPC_FAR *pCommandTarget,
                /* [in] */ IOleInPlaceFrame __RPC_FAR *pFrame,
                /* [in] */ IOleInPlaceUIWindow __RPC_FAR *pDoc);
    	STDMETHOD(HideUI)(void);
    	STDMETHOD(UpdateUI)(void);
    	STDMETHOD(EnableModeless)(/* [in] */ BOOL fEnable);
    	STDMETHOD(OnDocWindowActivate)(/* [in] */ BOOL fEnable);
    	STDMETHOD(OnFrameWindowActivate)(/* [in] */ BOOL fEnable);
    	STDMETHOD(ResizeBorder)( 
                /* [in] */ LPCRECT prcBorder,
                /* [in] */ IOleInPlaceUIWindow __RPC_FAR *pUIWindow,
                /* [in] */ BOOL fRameWindow);
    	STDMETHOD(TranslateAccelerator)( 
                /* [in] */ LPMSG lpMsg,
                /* [in] */ const GUID __RPC_FAR *pguidCmdGroup,
                /* [in] */ DWORD nCmdID);
    	STDMETHOD(GetOptionKeyPath)( 
                /* [out] */ LPOLESTR __RPC_FAR *pchKey,
                /* [in] */ DWORD dw);
    	STDMETHOD(GetDropTarget)(
                /* [in] */ IDropTarget __RPC_FAR *pDropTarget,
                /* [out] */ IDropTarget __RPC_FAR *__RPC_FAR *ppDropTarget);
        STDMETHOD(GetExternal)( 
                /* [out] */ IDispatch __RPC_FAR *__RPC_FAR *ppDispatch);
        STDMETHOD(TranslateUrl)( 
                /* [in] */ DWORD dwTranslate,
                /* [in] */ OLECHAR __RPC_FAR *pchURLIn,
                /* [out] */ OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut);
        STDMETHOD(FilterDataObject)( 
                /* [in] */ IDataObject __RPC_FAR *pDO,
                /* [out] */ IDataObject __RPC_FAR *__RPC_FAR *ppDORet);
    END_INTERFACE_PART(DocHostUIHandler)
    };
    
    
    class CCustomOccManager :public COccManager
    {
    public:
    	CCustomOccManager(){}
    	COleControlSite* CreateSite(COleControlContainer* pCtrlCont)
    	{
    		CCustomControlSite *pSite = new CCustomControlSite(pCtrlCont);
    		return pSite;
    	}
    };
    
    #endif
    						
  4. "Custsite.cpp"と呼ばれる新しい CPP ファイルを追加しを下のコードを追加:
    //=--------------------------------------------------------------------------=
    //  (C) Copyright 1996-1999 Microsoft Corporation. All Rights Reserved.
    //=--------------------------------------------------------------------------=
    
    
    // 
    // NOTE: 
    // Some of the code in this file is MFC implementation specific.
    // Changes in future versions of MFC implementation may require
    // the code to be changed. Please check the readme of this
    // sample for more information 
    // 
    
    #include "stdafx.h"
    #undef AFX_DATA
    #define AFX_DATA AFX_DATA_IMPORT
    #include "MySample.h"
    
    
    // NOTE: This line is a hardcoded reference to an MFC header file
    //  this path may need to be changed to refer to the location of VC5 install
    //  for successful compilation.
    
    
    #include <..\src\occimpl.h>
    #undef AFX_DATA
    #define AFX_DATA AFX_DATA_EXPORT
    #include "custsite.h"
    
    
    
    BEGIN_INTERFACE_MAP(CCustomControlSite, COleControlSite)
    	INTERFACE_PART(CCustomControlSite, IID_IDocHostUIHandler, DocHostUIHandler)
    END_INTERFACE_MAP()
    
    	
    
    ULONG FAR EXPORT  CCustomControlSite::XDocHostUIHandler::AddRef()
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
    	return pThis->ExternalAddRef();
    }
    
    
    ULONG FAR EXPORT  CCustomControlSite::XDocHostUIHandler::Release()
    {                            
        METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
    	return pThis->ExternalRelease();
    }
    
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::QueryInterface(REFIID riid, void **ppvObj)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj);
    	return hr;
    }
    
    // * CImpIDocHostUIHandler::GetHostInfo
    // *
    // * Purpose: Called at initialization
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::GetHostInfo( DOCHOSTUIINFO* pInfo )
    {
    
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
    	pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER;
        pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;
    
        return S_OK;
    }
    
    // * CImpIDocHostUIHandler::ShowUI
    // *
    // * Purpose: Called when MSHTML.DLL shows its UI
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::ShowUI(
    				DWORD dwID, 
    				IOleInPlaceActiveObject * /*pActiveObject*/,
    				IOleCommandTarget * pCommandTarget,
    				IOleInPlaceFrame * /*pFrame*/,
    				IOleInPlaceUIWindow * /*pDoc*/)
    {
    
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
    	// We've already got our own UI in place so just return S_OK
        return S_OK;
    }
    
    // * CImpIDocHostUIHandler::HideUI
    // *
    // * Purpose: Called when MSHTML.DLL hides its UI
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::HideUI(void)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        return S_OK;
    }
    
    // * CImpIDocHostUIHandler::UpdateUI
    // *
    // * Purpose: Called when MSHTML.DLL updates its UI
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::UpdateUI(void)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
    	// MFC is pretty good about updating it's UI in it's Idle loop so I don't do anything here
    	return S_OK;
    }
    
    // * CImpIDocHostUIHandler::EnableModeless
    // *
    // * Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::EnableModeless
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::EnableModeless(BOOL /*fEnable*/)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        return E_NOTIMPL;
    }
    
    // * CImpIDocHostUIHandler::OnDocWindowActivate
    // *
    // * Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::OnDocWindowActivate
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::OnDocWindowActivate(BOOL /*fActivate*/)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        return E_NOTIMPL;
    }
    
    // * CImpIDocHostUIHandler::OnFrameWindowActivate
    // *
    // * Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::OnFrameWindowActivate
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::OnFrameWindowActivate(BOOL /*fActivate*/)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        return E_NOTIMPL;
    }
    
    // * CImpIDocHostUIHandler::ResizeBorder
    // *
    // * Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::ResizeBorder
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::ResizeBorder(
    				LPCRECT /*prcBorder*/, 
    				IOleInPlaceUIWindow* /*pUIWindow*/,
    				BOOL /*fRameWindow*/)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        return E_NOTIMPL;
    }
    
    // * CImpIDocHostUIHandler::ShowContextMenu
    // *
    // * Purpose: Called when MSHTML.DLL would normally display its context menu
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::ShowContextMenu(
    				DWORD /*dwID*/, 
    				POINT* /*pptPosition*/,
    				IUnknown* /*pCommandTarget*/,
    				IDispatch* /*pDispatchObjectHit*/)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        return S_OK; // We've shown our own context menu. MSHTML.DLL will no longer try to show its own.
    }
    
    // * CImpIDocHostUIHandler::TranslateAccelerator
    // *
    // * Purpose: Called from MSHTML.DLL's TranslateAccelerator routines
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::TranslateAccelerator(LPMSG lpMsg,
                /* [in] */ const GUID __RPC_FAR *pguidCmdGroup,
                /* [in] */ DWORD nCmdID)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        return S_FALSE;
    }
    
    // * CImpIDocHostUIHandler::GetOptionKeyPath
    // *
    // * Purpose: Called by MSHTML.DLL to find where the host wishes to store 
    // *	its options in the registry
    // *
    HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::GetOptionKeyPath(BSTR* pbstrKey, DWORD)
    {
    
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
    	return E_NOTIMPL;
    }
    
    STDMETHODIMP CCustomControlSite::XDocHostUIHandler::GetDropTarget( 
                /* [in] */ IDropTarget __RPC_FAR *pDropTarget,
                /* [out] */ IDropTarget __RPC_FAR *__RPC_FAR *ppDropTarget)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        return E_NOTIMPL;
    }
    
    
    STDMETHODIMP CCustomControlSite::XDocHostUIHandler::GetExternal( 
                /* [out] */ IDispatch __RPC_FAR *__RPC_FAR *ppDispatch)
    {
    	// return the IDispatch we have for extending the object Model
    	IDispatch* pDisp = (IDispatch*)theApp.m_pDispOM;
    	pDisp->AddRef();
    	*ppDispatch = pDisp;
        return S_OK;
    }
            
    STDMETHODIMP CCustomControlSite::XDocHostUIHandler::TranslateUrl( 
                /* [in] */ DWORD dwTranslate,
                /* [in] */ OLECHAR __RPC_FAR *pchURLIn,
                /* [out] */ OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        return E_NOTIMPL;
    }
            
    STDMETHODIMP CCustomControlSite::XDocHostUIHandler::FilterDataObject( 
                /* [in] */ IDataObject __RPC_FAR *pDO,
                /* [out] */ IDataObject __RPC_FAR *__RPC_FAR *ppDORet)
    {
    	METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
        return E_NOTIMPL;
    }
    
    						
  5. "Idispimp.h"と呼ばれる新しいヘッダー ファイルを追加しを次のコードを追加:
    /*
     * IDispimp.H
     * IDispatch
     *
     * Copyright (c)1995-1999 Microsoft Corporation, All Rights Reserved
     */ 
    
    
    #ifndef _IDISPIMP_H_
    #define _IDISPIMP_H_
    
    class CImpIDispatch : public IDispatch
    {
        protected:
            ULONG               m_cRef;
    
        public:
            CImpIDispatch(void);
            ~CImpIDispatch(void);
    
            STDMETHODIMP QueryInterface(REFIID, void **);
            STDMETHODIMP_(ULONG) AddRef(void);
            STDMETHODIMP_(ULONG) Release(void);
    
    		//IDispatch
            STDMETHODIMP GetTypeInfoCount(UINT* pctinfo);
            STDMETHODIMP GetTypeInfo(/* [in] */ UINT iTInfo,
                /* [in] */ LCID lcid,
                /* [out] */ ITypeInfo** ppTInfo);
    		STDMETHODIMP GetIDsOfNames(
                /* [in] */ REFIID riid,
                /* [size_is][in] */ LPOLESTR *rgszNames,
                /* [in] */ UINT cNames,
                /* [in] */ LCID lcid,
                /* [size_is][out] */ DISPID *rgDispId);
    		STDMETHODIMP Invoke(
                /* [in] */ DISPID dispIdMember,
                /* [in] */ REFIID riid,
                /* [in] */ LCID lcid,
                /* [in] */ WORD wFlags,
                /* [out][in] */ DISPPARAMS  *pDispParams,
                /* [out] */ VARIANT  *pVarResult,
                /* [out] */ EXCEPINFO *pExcepInfo,
                /* [out] */ UINT *puArgErr);
    
    };
    #endif //_IDISPIMP_H_
    						
  6. "Idispimp.cpp"と呼ばれる新しい CPP ファイルを追加しを次のコードを追加:
    /*
     * idispimp.CPP
     * IDispatch for Extending Dynamic HTML Object Model
     *
     * Copyright (c)1995-1999 Microsoft Corporation, All Rights Reserved
     */ 
    
    #include "stdafx.h"
    #include "idispimp.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    
    // Hardcoded information for extending the Object Model 
    // Typically this would be supplied through a TypeInfo
    // In this case the name "xxyyzz" maps to DISPID_Extend 
    const	WCHAR pszExtend[10]=L"xxyyzz";
    #define DISPID_Extend 12345
    
    
    
    /*
     * CImpIDispatch::CImpIDispatch
     * CImpIDispatch::~CImpIDispatch
     *
     * Parameters (Constructor):
     *  pSite           PCSite of the site we're in.
     *  pUnkOuter       LPUNKNOWN to which we delegate.
     */ 
    
    CImpIDispatch::CImpIDispatch( void )
    {
        m_cRef = 0;
    }
    
    CImpIDispatch::~CImpIDispatch( void )
    {
    	ASSERT( m_cRef == 0 );
    }
    
    
    /*
     * CImpIDispatch::QueryInterface
     * CImpIDispatch::AddRef
     * CImpIDispatch::Release
     *
     * Purpose:
     *  IUnknown members for CImpIDispatch object.
     */ 
    
    STDMETHODIMP CImpIDispatch::QueryInterface( REFIID riid, void **ppv )
    {
        *ppv = NULL;
    
    
        if ( IID_IDispatch == riid )
    	{
            *ppv = this;
    	}
    	
    	if ( NULL != *ppv )
        {
            ((LPUNKNOWN)*ppv)->AddRef();
            return NOERROR;
        }
    
    	return E_NOINTERFACE;
    }
    
    
    STDMETHODIMP_(ULONG) CImpIDispatch::AddRef(void)
    {
        return ++m_cRef;
    }
    
    STDMETHODIMP_(ULONG) CImpIDispatch::Release(void)
    {
        return --m_cRef;
    }
    
    
    //IDispatch
    STDMETHODIMP CImpIDispatch::GetTypeInfoCount(UINT* /*pctinfo*/)
    {
    	return E_NOTIMPL;
    }
    
    STDMETHODIMP CImpIDispatch::GetTypeInfo(/* [in] */ UINT /*iTInfo*/,
                /* [in] */ LCID /*lcid*/,
                /* [out] */ ITypeInfo** /*ppTInfo*/)
    {
    	return E_NOTIMPL;
    }
    
    STDMETHODIMP CImpIDispatch::GetIDsOfNames(
                /* [in] */ REFIID riid,
                /* [size_is][in] */ OLECHAR** rgszNames,
                /* [in] */ UINT cNames,
                /* [in] */ LCID lcid,
                /* [size_is][out] */ DISPID* rgDispId)
    {
    	HRESULT hr;
    	UINT	i;
    
    	// Assume some degree of success
    	hr = NOERROR;
    
    	// Hardcoded mapping for this sample
    	// A more usual procedure would be to use a TypeInfo
    	for ( i=0; i < cNames; i++)
    	{
    		if (  2 == CompareString( lcid, NORM_IGNOREWIDTH, (char*)pszExtend, 3, (char*)rgszNames[i], 3 ) )
    		{
    			rgDispId[i] = DISPID_Extend;
    		}
    		else
    		{
    			// One or more are unknown so set the return code accordingly
    			hr = ResultFromScode(DISP_E_UNKNOWNNAME);
    			rgDispId[i] = DISPID_UNKNOWN;
    		}
    	}
    	return hr;
    }
    
    STDMETHODIMP CImpIDispatch::Invoke(
                /* [in] */ DISPID dispIdMember,
                /* [in] */ REFIID /*riid*/,
                /* [in] */ LCID /*lcid*/,
                /* [in] */ WORD wFlags,
                /* [out][in] */ DISPPARAMS* pDispParams,
                /* [out] */ VARIANT* pVarResult,
                /* [out] */ EXCEPINFO* /*pExcepInfo*/,
                /* [out] */ UINT* puArgErr)
    {
    
    	// For this sample we only support a Property Get on DISPID_Extend
    	// returning a BSTR with "Wibble" as the value
    	if ( dispIdMember == DISPID_Extend )
    	{
    		if ( wFlags & DISPATCH_PROPERTYGET )
    		{
    			if ( pVarResult != NULL )
    			{
    				WCHAR buff[10]=L"Wibble";
    				BSTR bstrRet = SysAllocString( buff );
    				VariantInit(pVarResult);
    				V_VT(pVarResult)=VT_BSTR;
    				V_BSTR(pVarResult) = bstrRet;
    			}
    		}
    	}
    
    	return S_OK;
    }
    						
  7. MySample.cpp] を開き、CMySample の InitInstance で、次のコード追加します。 AfxEnableControlContainer() の呼び出しもコメント:
    BOOL CMySampleApp::InitInstance()
    {
    	CCustomOccManager *pMgr = new CCustomOccManager;
    
    	// Create an IDispatch class for extending the Dynamic HTML Object Model 
    	m_pDispOM = new CImpIDispatch;
    
    	// Set our control containment up but using our control container 
    	// management class instead of MFC's default
    	AfxEnableControlContainer(pMgr);
    
    
    //	AfxEnableControlContainer();
    //... rest of the code here
    }
    						
  8. また次の MySample.cpp をインクルード ファイルの一覧に追加:
    #include "afxpriv.h"
    #include <..\src\occimpl.h>
    #include "CustSite.h"
    						
  9. MySample.h に移動し、ファイルの一番下に次のステートメントを追加します。
    extern CMySampleApp theApp;
    						
  10. 今すぐ、 ClassView ] タブに移動し、CMySampleView の作成仮想関数をオーバーライドします。 関数のように、関数本体を次に示すコードで置き換えます:
    BOOL CMySampleView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
    {
    // create the view window itself
    	m_pCreateContext = pContext;
    	if (!CView::Create(lpszClassName, lpszWindowName,
    				dwStyle, rect, pParentWnd,  nID, pContext))
    	{
    		return FALSE;
    	}
    
    	RECT rectClient;
    	GetClientRect(&rectClient);
    
    	// create the control window
    	// AFX_IDW_PANE_FIRST is a safe but arbitrary ID
    	if (!m_wndBrowser.CreateControl(CLSID_WebBrowser, lpszWindowName,
    				WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))
    	{
    		DestroyWindow();
    		return FALSE;
    	}
    
    	LPUNKNOWN lpUnk = m_wndBrowser.GetControlUnknown();
    	HRESULT hr = lpUnk->QueryInterface(IID_IWebBrowser2, (void**) &m_pBrowserApp);
    	if (!SUCCEEDED(hr))
    	{
    		m_pBrowserApp = NULL;
    		m_wndBrowser.DestroyWindow();
    		DestroyWindow();
    		return FALSE;
    	}
    
    	return TRUE;
    }
    						
  11. 再構築アプリケーションして実行します。 右クリックし場合、既定のポップアップ メニューは表示されません。 これは、CCustomControlSite::XDocHostUIHandler::ShowContextMenu メソッドでプロシージャだけ返します、S_OK Mshtml.dll は独自のポップアップ メニューを表示しようしないようにためです。 この時点を既定のポップアップ メニューを置き換える独自のポップアップ メニューを追加することもできます。
メモ MFC の将来のバージョンが COleControlSite または COccManager の実装を変更この手法をポップアップ メニューの [無効にする可能性があります機能しません。 この手法を使用して、コードをデザインするが場合、くださいは通知コードを今後変更する必要することがあります。

関連情報

driller (MFC) のサンプル
http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=ae22e7a9-611f-4112-8b17-0980412d07a5&displaylang=en (http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=ae22e7a9-611f-4112-8b17-0980412d07a5&displaylang=en)

この資料は以下の製品について記述したものです。
  • Microsoft Foundation Class Library 4.2?を以下の環境でお使いの場合
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ 6.0 Enterprise Edition
キーワード:?
kbmt kbdhtml kbhowto kbieobj kbmenu kbwebbrowser KB236312 KbMtja
機械翻訳機械翻訳
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:236312? (http://support.microsoft.com/kb/236312/en-us/ )
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"
 

サポート技術情報の翻訳