CExplorer启用XP样式按钮

实现方式

若使CExplorer控件启动xp样式按钮,必须借助COleControlSite派生类的IDocHostUIHandler::GetHostInfo函数来实现。

HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::GetHostInfo( DOCHOSTUIINFO* pInfo )
{

    METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)

    pInfo->dwFlags = DOCHOSTUIFLAG_THEME
                    |DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE
                    |DOCHOSTUIFLAG_NO3DOUTERBORDER
                    |DOCHOSTUIFLAG_NO3DBORDER
                    |DOCHOSTUIFLAG_THEME
                    |DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK;

    pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;

    return S_OK;
}

Custsit.h

//=--------------------------------------------------------------------------=
//  (C) Copyright 1996-1999 Microsoft Corporation. All Rights Reserved.
//=--------------------------------------------------------------------------=
#ifndef __CUSTOMSITEH__
#define __CUSTOMSITEH__

#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 read me of this
// sample for more information 
// 

class CCustomControlSite:public COleControlSite
{
public:
    CCustomControlSite(COleControlContainer *pCnt):COleControlSite(pCnt){}


BEGIN_INTERFACE_PART(DocHostShowUI, IDocHostShowUI)
        INIT_INTERFACE_PART(CDocHostSite, DocHostShowUI)
        STDMETHOD(ShowHelp)(
            /* [in ] */ HWND hwnd,
            /* [in ] */ LPOLESTR pszHelpFile,
            /* [in ] */ UINT uCommand,
            /* [in ] */ DWORD dwData,
            /* [in ] */ POINT ptMouse,
            /* [out] */ IDispatch __RPC_FAR *pDispatchObjectHit);
        STDMETHOD(ShowMessage)(
            /* [in ] */ HWND hwnd,
            /* [in ] */ LPOLESTR lpstrText,
            /* [in ] */ LPOLESTR lpstrCaption,
            /* [in ] */ DWORD dwType,
            /* [in ] */ LPOLESTR lpstrHelpFile,
            /* [in ] */ DWORD dwHelpContext,
            /* [out] */ LRESULT __RPC_FAR *plResult);
    END_INTERFACE_PART(DocHostShowUI)

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)


// Implement IInternetSecurityManager
BEGIN_INTERFACE_PART(InternetSecurityManager, IInternetSecurityManager)
    STDMETHOD(SetSecuritySite)(IInternetSecurityMgrSite*);
    STDMETHOD(GetSecuritySite)(IInternetSecurityMgrSite**);
    STDMETHOD(MapUrlToZone)(LPCWSTR,DWORD*,DWORD);
    STDMETHOD(GetSecurityId)(LPCWSTR,BYTE*,DWORD*,DWORD);
    STDMETHOD(ProcessUrlAction)(
        /* [in] */ LPCWSTR pwszUrl,
        /* [in] */ DWORD dwAction,
        /* [size_is][out] */ BYTE __RPC_FAR *pPolicy,
        /* [in] */ DWORD cbPolicy,
        /* [in] */ BYTE __RPC_FAR *pContext,
        /* [in] */ DWORD cbContext,
        /* [in] */ DWORD dwFlags,
        /* [in] */ DWORD dwReserved = 0);
    STDMETHOD(QueryCustomPolicy)(LPCWSTR,REFGUID,BYTE**,DWORD*,BYTE*,DWORD,DWORD);
    STDMETHOD(SetZoneMapping)(DWORD,LPCWSTR,DWORD);
    STDMETHOD(GetZoneMappings)(DWORD,IEnumString**,DWORD);
END_INTERFACE_PART(InternetSecurityManager)


///
 Implement IServiceProvider
BEGIN_INTERFACE_PART(ServiceProvider, IServiceProvider)
    STDMETHOD(QueryService)(REFGUID,REFIID,void**);
END_INTERFACE_PART(ServiceProvider)
};


class CCustomOccManager :public COccManager
{
public:
    CCustomOccManager(){}
    COleControlSite* CreateSite(COleControlContainer* pCtrlCont)
    {
        CCustomControlSite *pSite = new CCustomControlSite(pCtrlCont);
        return pSite;
    }
};

#endif

Custsit.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 read me of this
// sample for more information 
// 

#include "stdafx.h"
#include "custsite.h"


BEGIN_INTERFACE_MAP(CCustomControlSite, COleControlSite)
    INTERFACE_PART(CCustomControlSite, IID_IDocHostShowUI, DocHostShowUI)
    INTERFACE_PART(CCustomControlSite, IID_IDocHostUIHandler, DocHostUIHandler)
    INTERFACE_PART(CCustomControlSite, IID_IInternetSecurityManager, InternetSecurityManager)
    INTERFACE_PART(CCustomControlSite, IID_IServiceProvider, ServiceProvider)
END_INTERFACE_MAP() 


ULONG CCustomControlSite::XDocHostShowUI::AddRef()
{
    METHOD_PROLOGUE(CCustomControlSite, DocHostShowUI);

    return pThis->ExternalAddRef();
}

ULONG CCustomControlSite::XDocHostShowUI::Release()
{
    METHOD_PROLOGUE(CCustomControlSite, DocHostShowUI);

    return pThis->ExternalRelease();
}

HRESULT CCustomControlSite::XDocHostShowUI::QueryInterface(REFIID riid, void ** ppvObj)
{
    METHOD_PROLOGUE(CCustomControlSite, DocHostShowUI);

    return pThis->ExternalQueryInterface( &riid, ppvObj );
}


HRESULT CCustomControlSite::XDocHostShowUI::ShowHelp(HWND hwnd,
                                               LPOLESTR pszHelpFile,
                                               UINT nCommand,
                                               DWORD dwData,
                                               POINT ptMouse,
                                               IDispatch * pDispatchObjectHit)
{
    METHOD_PROLOGUE(CCustomControlSite, DocHostShowUI);

    return S_OK;
}

HRESULT CCustomControlSite::XDocHostShowUI::ShowMessage(HWND hwnd,
                                                  LPOLESTR lpstrText,
                                                  LPOLESTR lpstrCaption,
                                                  DWORD dwType,
                                                  LPOLESTR lpstrHelpFile,
                                                  DWORD dwHelpContext,
                                                  LRESULT * plResult)
{
    METHOD_PROLOGUE(CCustomControlSite, DocHostShowUI);

//  extern CString g_sTitle;
//  *plResult = MessageBox(hwnd, (CString)lpstrText, g_sTitle, dwType);

    return S_OK;
}


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;
}

#ifndef DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE
#   define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x4000
#endif

#ifndef DOCHOSTUIFLAG_THEME
#   define DOCHOSTUIFLAG_THEME  0x00040000
#endif

#ifndef DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK
#   define DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK  0x00800000
#endif

#ifndef DOCHOSTUIFLAG_CODEPAGELINKEDFONTS
#   define DOCHOSTUIFLAG_CODEPAGELINKEDFONTS  0x00000800
#endif


// * CImpIDocHostUIHandler::GetHostInfo
// *
// * Purpose: Called at initialization
// *
HRESULT FAR EXPORT  CCustomControlSite::XDocHostUIHandler::GetHostInfo( DOCHOSTUIINFO* pInfo )
{

    METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)

    pInfo->dwFlags = DOCHOSTUIFLAG_THEME
    |DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE
    |DOCHOSTUIFLAG_NO3DOUTERBORDER
    |DOCHOSTUIFLAG_NO3DBORDER
    |DOCHOSTUIFLAG_THEME
    |DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK;

    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)

    switch (dwID)
    {
    case CONTEXT_MENU_TEXTSELECT:   //选择文本
    case CONTEXT_MENU_CONTROL:      //选择控件
    case CONTEXT_MENU_TABLE:        //选择表格
        return S_FALSE; //显示系统默认菜单
    }

    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)

        //disable F5
        if(lpMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_F5) < 0)
            return S_OK;

        if(GetKeyState(VK_CONTROL) & 0x8000)
        {
            //disable ctrl + O
            if(lpMsg->message == WM_KEYDOWN && GetAsyncKeyState(0x4F) < 0)
                return S_OK;
            //disable ctrl + p
            if(lpMsg->message == WM_KEYDOWN && GetAsyncKeyState(0x50) < 0)
                return S_OK;
            //disable ctrl + N
            if(lpMsg->message == WM_KEYDOWN && GetAsyncKeyState(0x4E) < 0)
                return S_OK;
        }

        //disable back space
        /*
        if(lpMsg->wParam == VK_BACK)
                    return S_OK;*/


        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
    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;
}


HRESULT FAR EXPORT CCustomControlSite::XInternetSecurityManager
                                    ::QueryInterface(REFIID riid, void** ppvObj)
{

    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)
        HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj);
    return hr;
}

ULONG FAR EXPORT CCustomControlSite::XInternetSecurityManager::AddRef()
{
    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)
    return pThis->ExternalAddRef();
}

ULONG FAR EXPORT CCustomControlSite::XInternetSecurityManager::Release()
{                            

    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)
    return pThis->ExternalRelease();
}

HRESULT CCustomControlSite::XInternetSecurityManager
                            ::SetSecuritySite (IInternetSecurityMgrSite *pSite)
{
    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)
    return INET_E_DEFAULT_ACTION;
}

HRESULT CCustomControlSite::XInternetSecurityManager
                            ::GetSecuritySite(IInternetSecurityMgrSite **ppSite)
{

    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)
    return INET_E_DEFAULT_ACTION;
}

HRESULT CCustomControlSite::XInternetSecurityManager
                            ::MapUrlToZone(LPCWSTR pwszUrl,DWORD *pdwZone,DWORD dwFlags)
{
    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)
    return INET_E_DEFAULT_ACTION;
}


HRESULT  FAR EXPORT CCustomControlSite::XInternetSecurityManager
                                        ::GetSecurityId(LPCWSTR pwszUrl,
                                        BYTE *pbSecurityId,
                                        DWORD *pcbSecurityId, 
                                        DWORD dwReserved)
{

    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)
    return INET_E_DEFAULT_ACTION;
}

#ifndef URLACTION_CROSS_DOMAIN_DATA
#   define URLACTION_CROSS_DOMAIN_DATA  0x00001406
#endif

STDMETHODIMP CCustomControlSite::XInternetSecurityManager
                ::ProcessUrlAction( /* [in] */ LPCWSTR pwszUrl,
                                    /* [in] */ DWORD dwAction,
                                    /* [size_is][out] */ BYTE __RPC_FAR *pPolicy,
                                    /* [in] */ DWORD cbPolicy,
                                    /* [in] */ BYTE __RPC_FAR *pContext,
                                    /* [in] */ DWORD cbContext,
                                    /* [in] */ DWORD dwFlags,
                                    /* [in] */ DWORD dwReserved)
{

    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)

    DWORD dwPolicy=URLPOLICY_ALLOW;

    BOOL bNoActiveX=FALSE;
    BOOL bNoJava=FALSE;
    BOOL bNoScript=FALSE;
    BOOL bCrossData=FALSE;

    if (dwAction <= URLACTION_ACTIVEX_MAX && dwAction >= URLACTION_ACTIVEX_MIN)
        dwPolicy = bNoActiveX ? URLPOLICY_DISALLOW : URLPOLICY_ALLOW;
    else if ((dwAction <= URLACTION_JAVA_MAX && dwAction >= URLACTION_JAVA_MIN) ||
                URLACTION_HTML_JAVA_RUN == dwAction)
        if (bNoJava)
            dwPolicy = URLPOLICY_JAVA_PROHIBIT;
        else
            return INET_E_DEFAULT_ACTION;
    else if (dwAction <= URLACTION_SCRIPT_MAX && dwAction >= URLACTION_SCRIPT_MIN)
        dwPolicy = bNoScript ? URLPOLICY_DISALLOW : URLPOLICY_ALLOW;
// !! If the compiler can't find URLACTION_CROSS_DOMAIN_DATA, make sure you are building with
// !! the latest version of the IE headers -- URLMON.H specifically -- from MSDN Downloads for the 
// !! Web Workshop or the Platform SDK
    else if (URLACTION_CROSS_DOMAIN_DATA == dwAction)
        dwPolicy = bCrossData ? URLPOLICY_ALLOW : URLPOLICY_DISALLOW;
    else
        return INET_E_DEFAULT_ACTION;

    if ( cbPolicy >= sizeof (DWORD))
    {
        *(DWORD*) pPolicy = dwPolicy;
        return S_OK;
    } 
    else 
    {
        return S_FALSE;
    }
}

HRESULT CCustomControlSite::XInternetSecurityManager
                            ::QueryCustomPolicy(LPCWSTR pwszUrl,
                                                REFGUID guidKey,
                                                BYTE **ppPolicy,
                                                DWORD *pcbPolicy,
                                                BYTE *pContext,
                                                DWORD cbContext,
                                                DWORD dwReserved)
{
    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)
    return INET_E_DEFAULT_ACTION;
}

HRESULT CCustomControlSite::XInternetSecurityManager
                            ::SetZoneMapping(DWORD dwZone,
                                            LPCWSTR lpszPattern,
                                            DWORD dwFlags)
{
    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)
    return INET_E_DEFAULT_ACTION;
}

HRESULT CCustomControlSite::XInternetSecurityManager
                            ::GetZoneMappings(DWORD dwZone,
                                            IEnumString **ppenumString, 
                                            DWORD dwFlags)
{
    METHOD_PROLOGUE(CCustomControlSite, InternetSecurityManager)
    return INET_E_DEFAULT_ACTION;
}


// ServiceProvider Methods
ULONG FAR EXPORT CCustomControlSite::XServiceProvider::AddRef()
{
    METHOD_PROLOGUE(CCustomControlSite, ServiceProvider)
    return pThis->ExternalAddRef();
}

ULONG FAR EXPORT CCustomControlSite::XServiceProvider::Release()
{                            
    METHOD_PROLOGUE(CCustomControlSite, ServiceProvider)
    return pThis->ExternalRelease();
}

HRESULT FAR EXPORT CCustomControlSite::XServiceProvider
                                        ::QueryInterface(REFIID riid, 
                                                        void** ppvObj)
{
    METHOD_PROLOGUE(CCustomControlSite, ServiceProvider)
    HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj);
    return hr;
}
STDMETHODIMP CCustomControlSite::XServiceProvider
                                ::QueryService(REFGUID guidService,  
                                                REFIID riid,
                                                void** ppvObject)
{

    if (guidService == SID_SInternetSecurityManager && 
                    riid == IID_IInternetSecurityManager)
    {
        METHOD_PROLOGUE(CCustomControlSite, ServiceProvider)
        HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObject);
        return hr;
    } 
    else 
    {
        *ppvObject = NULL;

    }
    return E_NOINTERFACE;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sdhongjun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值