Cara menonaktifkan default pop-up menu untuk CHtmlView in Visual C++

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 236312 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Membuat default aplikasi CHtmlView Appwizard. Ketika Anda Klik kanan pada situs Web di dalam Microsoft Internet Explorer, default pop-up menu muncul. Pembor (MFC) sampel dari Microsoft menunjukkan bagaimana untuk mengganti ini perilaku untuk kontrol browser web sehingga menu pop-up yang muncul. Anda mungkin menonaktifkan menu pop-up ini jika Anda tidak ingin pengguna untuk melihat halaman Web sumber atau properti, atau menggunakan fitur lainnya seperti Back dan Forward tombol. Atau, jika Anda ingin menambahkan fungsi Anda sendiri ke pop-up menu, Anda juga harus menonaktifkan default pop-up menu.

Catatan Pembor (MFC) sampel menunjukkan bagaimana untuk mengesampingkan perilaku ini hanya untuk Kontrol browser web. Tidak menggunakan CHtmlView kelas.

INFORMASI LEBIH LANJUT

Artikel ini didasarkan pada sampel pembor (MFC), yang tersedia dari Website Microsoft berikut:
http://MSDN.Microsoft.com/downloads/Samples/Internet/browser/driller/default.asp
Driller termasuk kode yang digunakan di sini untuk Custsite.h, Custsite.cpp, Idispimp.h, dan Idispimp.cpp. Metode ini didukung di Internet Explorer 4 dan Internet Explorer 5.

Langkah-langkah untuk menonaktifkan default pop-up menu

  1. Membuat aplikasi SDI AppWizard yang dihasilkan disebut MySample. Pada langkah 6/6 berubah CHtmlView.
  2. Buka MySample.h dan menambahkan variabel anggota publik seperti yang ditunjukkan di bawah ini untuk CMySampleApp kelas:
    public:
             class CImpIDispatch* m_pDispOM;
    					
  3. Menambahkan file header baru untuk proyek yang disebut "Custsite.h". Copy dan paste kode berikut ini:
    //=--------------------------------------------------------------------------=
    //  (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. Menambahkan file CPP baru yang disebut "Custsite.cpp" dan tambahkan kode di bawah ini untuk itu:
    //=--------------------------------------------------------------------------=
    //  (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. Menambahkan file header baru yang disebut "Idispimp.h" dan tambahkan kode berikut untuk itu:
    /*
     * 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. Menambahkan file CPP baru yang disebut "Idispimp.cpp" dan tambahkan kode berikut untuk itu:
    /*
     * 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. Buka MySample.cpp dan, di InitInstance CMySample, Tambahkan kode berikut. Juga komentar keluar panggilan untuk 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. Juga menambahkan berikut daftar berkas untuk MySample.cpp:
    #include "afxpriv.h"
    #include <..\src\occimpl.h>
    #include "CustSite.h"
    						
  9. Pergi ke MySample.h dan menambahkan pernyataan berikut pada bawah file.
    extern CMySampleApp theApp;
    						
  10. Sekarang pergilah ke ClassView tab dan menimpa fungsi menciptakan virtual untuk CMySampleView. Menggantikan fungsi tubuh dengan kode yang ditunjukkan di bawah ini, sehingga fungsi harus terlihat seperti:
    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. Membangun kembali dan menjalankan aplikasi. Ketika Anda klik kanan, default pop-up menu akan muncul. Hal ini karena dalam CCustomControlSite::XDocHostUIHandler::ShowContextMenu metode, prosedur hanya mengembalikan S_OK sehingga Mshtml.dll tidak lagi mencoba untuk menampilkan sendiri pop-up menu. Pada titik ini, Anda juga bisa menambahkan menu pop-up sendiri untuk menggantikan default pop-up menu.
Catatan Jika versi masa depan MFC mengubah pelaksanaan COleControlSite atau COccManager, teknik ini untuk menonaktifkan pop-up menu mungkin tidak bekerja. Jika Anda menggunakan teknik ini untuk merancang kode Anda, silakan menjadi disarankan bahwa Anda mungkin harus mengubah kode Anda di masa depan.

REFERENSI

Driller (MFC) Sampel
http://www.Microsoft.com/downloads/details.aspx?FamilyID = ae22e7a9-611f-4112-8b17-0980412d07a5 & displaylang = en

Properti

ID Artikel: 236312 - Kajian Terakhir: 20 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Foundation Class Library 4.2
Kata kunci: 
kbdhtml kbhowto kbieobj kbmenu kbwebbrowser kbmt KB236312 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:236312

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com