Makale numarası: 236312 - Son Gözden Geçirme: 21 Kasım 2006 Salı - Gözden geçirme: 3.2

Visual C++, CHtmlView için varsayılan açılır menüsünü devre dışı bırakma

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Varsayılan CHtmlView Appwizard uygulama oluşturun. Microsoft ınternet Explorer'da bir Web sitesinde sağ tıklattığınızda, varsayılan bir kısayol menüsü görüntülenir. Microsoft'tan driller (MFC) örnek; bu nedenle, bu açılan menü görüntülenmezse, WebBrowser denetimi için bu davranışı değiştirmek gösterilmiştir. Kullanıcıların Web sayfasının kaynak ya da özelliklerini görüntülemek veya geri ve ileri düğmelerini gibi diğer özelliklerini kullanmak istiyorsanız, bu açılır menüsünü devre dışı bırakabilirsiniz. Ya da açılır menüyü kendi işlevleri eklemek isterseniz, varsayılan açılır menüyü de devre dışı bırakmalısınız.

Not Driller (MFC) örnek WebBrowser denetimi için yalnızca bu davranışı değiştirmek gösterilmiştir. CHtmlView sınıfı kullanmaz.

Daha fazla bilgi

Bu makalede aşağıdaki Microsoft Web sitesinden edinilebilir Driller (MFC) örnek dayanır:
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 burada da Custsite.h Custsite.cpp, Idispimp.h ve Idispimp.cpp için kullanılan kodu içerir. Bu yöntemler ınternet Explorer'ın desteklenen 4 ve ınternet Explorer 5.

Varsayılan açılır menüsünü devre dışı bırakmak için adımları

  1. MySample adlı bir SDI AppWizard oluşturulan uygulama oluşturun. 6/6. Adımda CHtmlView için değiştirin.
  2. MySample.h açın ve aşağıdaki CMySampleApp sınıfına gibi bir ortak üye değişkeni ekleyin:
    public:
             class CImpIDispatch* m_pDispOM;
    					
  3. Yeni bir üstbilgi dosyası "Custsite.h" adlı projeye ekleyin. Kopyalama ve aşağıdaki kodu içine yapıştırın:
    //=--------------------------------------------------------------------------=
    //  (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" adlı yeni bir CPP dosya ekleme ve aşağıdaki kodu ekleyin:
    //=--------------------------------------------------------------------------=
    //  (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" adlı yeni bir üstbilgi dosyası olarak ekleyin ve aşağıdaki kodu ekleyin:
    /*
     * 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" adlı yeni bir CPP dosya ekleme ve aşağıdaki kodu ekleyin:
    /*
     * 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 açın ve InitInstance, CMySample içinde aşağıdaki kodu ekleyin. Ayrıca AfxEnableControlContainer() çağrısı aç?klama:
    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. Ayrıca aşağıdaki MySample.cpp dosya içerme listesine ekleyin:
    #include "afxpriv.h"
    #include <..\src\occimpl.h>
    #include "CustSite.h"
    						
  9. Için MySample.h gidin ve dosyanın en altında aşağıdaki ifadeyi ekleyin.
    extern CMySampleApp theApp;
    						
  10. Şimdi ClassView sekmesine gidin ve sanal oluşturma işlevi için CMySampleView geçersiz kılar. Işlev gibi görünür; böylece işlev gövdesi, aşağıda gösterilen kodu yerine:
    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. Yeniden oluşturup, uygulamayı çalıştırın. Sağ tıklattığınızda, varsayılan açılır menüsü görünmez. Böylece kendi açılan menüyü görüntülemek artık Mshtml.dll çalışır CCustomControlSite::XDocHostUIHandler::ShowContextMenu yönteminde, yordamın yalnızca bir S_OK döndürür olmasıdır. Bu noktada, varsayılan açılır menü yerine kendi açılır menü ekleyebilirsiniz.
Not MFC sürümleri gelecekte COleControlSite veya COccManager uygulaması değiştirirseniz, açılır menüyü devre dışı bırakmak için bu yöntem işe yaramayabilir. Bu teknik, kodunuzu tasarlamak için kullanıyorsanız, lütfen daha sonra kodunuzu değiştirmeniz gerekebilir belirlemeleri.

Referanslar

Driller (MFC) örneği
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)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ 6.0 Enterprise Edition
Anahtar Kelimeler: 
kbmt kbdhtml kbhowto kbieobj kbmenu kbwebbrowser KB236312 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:236312  (http://support.microsoft.com/kb/236312/en-us/ )