🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: borland.public.cppbuilder.internet.web
Article #1238

IOleClientSite implementation (subclass)

#1238
From: SD
Date: Tue, 29 Mar 2005 16:34
275 lines
7186 bytes
Hi to all,
I isn't able to understand if the following is the right way to implement
the
IDocHostUIHander with the IOleClientSite. I've tried to paste code found on
internet and create the bottom class. The code don't work very fine,
I've alvays got Access Error when program exit...

Usage:

<snip from Form1.h>

__published:
 TCppWebBrowser *Browser;
private...
 QCppWebBrowserWrapper *FCppWebBrowserWrapper;

<snip from Form1.cpp>

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
  // sets default members data values
  FCppWebBrowserWrapper = new QCppWebBrowserWrapper;
  FCppWebBrowserWrapper->Initialize(Browser);
}

__fastcall TForm1::~TForm1()
{
  // frees objects
  delete FCppWebBrowserWrapper;
}

class QCppWebBrowserWrapper : public IOleClientSite, IDocHostUIHandler
{
  long FRefCount;
  TCppWebBrowser *FWebBrowser;
  IOleClientSite *FIOleClientSite;

public:
  QCppWebBrowserWrapper()
  {
    FRefCount = 1;
    FWebBrowser = NULL;
    FIOleClientSite = NULL;
  }

  ~QCppWebBrowserWrapper()
  {
    IOleObject* OleObject = NULL;
    ((IDispatch *) FWebBrowser->OleObject)->QueryInterface(IID_IOleObject,
(void **) &OleObject);
    OleObject->SetClientSite(FIOleClientSite);
  }

  virtual void STDMETHODCALLTYPE Initialize(TCppWebBrowser *WebBrowser)
  {
    FWebBrowser = WebBrowser;
    IOleObject* OleObject = NULL;
    ((IDispatch *) FWebBrowser->OleObject)->QueryInterface(IID_IOleObject,
(void **) &OleObject);
    OleObject->GetClientSite(&FIOleClientSite);
    OleObject->SetClientSite((IOleClientSite *) this);
  }

  // ======================= //
  // IUnknown implementation //
  // ======================= //

  virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID classid, void**
intf)
  {
//      return FIOleClientSite->QueryInterface(classid, intf);
    if (classid == IID_IDocHostUIHandler)
    {
      *intf = (IDocHostUIHandler *) this;
      return S_OK;
    }
    else
      return FIOleClientSite->QueryInterface(classid, intf);
  }

  virtual ULONG STDMETHODCALLTYPE AddRef()
  {
//    return FIOleClientSite->AddRef();
//    InterlockedIncrement(&FRefCount);
    return FRefCount;
  }

  virtual ULONG STDMETHODCALLTYPE Release()
  {
//    return FIOleClientSite->Release();
//    InterlockedDecrement(&FRefCount);
    if (FRefCount == 0)
      delete this;
    return FRefCount;
  }

  // ============================= //
  // IOleClientSite implementation //
  // ============================= //

  virtual HRESULT STDMETHODCALLTYPE SaveObject(void)
  {
    return FIOleClientSite->SaveObject();
  }

  virtual HRESULT STDMETHODCALLTYPE GetMoniker
  (
    /* [in] */ DWORD dwAssign,
    /* [in] */ DWORD dwWhichMoniker,
    /* [out] */ IMoniker __RPC_FAR *__RPC_FAR *ppmk
  )
  {
    return FIOleClientSite->GetMoniker(dwAssign, dwWhichMoniker, ppmk);
  }

  virtual HRESULT STDMETHODCALLTYPE GetContainer
  (
    /* [out] */ IOleContainer __RPC_FAR *__RPC_FAR *ppContainer
  )
  {
    return FIOleClientSite->GetContainer(ppContainer);
  }

  virtual HRESULT STDMETHODCALLTYPE ShowObject(void)
  {
    return FIOleClientSite->ShowObject();
  }

  virtual HRESULT STDMETHODCALLTYPE OnShowWindow
  (
    /* [in] */ BOOL fShow
  )
  {
    return FIOleClientSite->OnShowWindow(fShow);
  }

  virtual HRESULT STDMETHODCALLTYPE RequestNewObjectLayout(void)
  {
    return FIOleClientSite->RequestNewObjectLayout();
  }

  // =================================//
  // IDocHostUIHandler implementation //
  // ================================ //

  virtual HRESULT STDMETHODCALLTYPE ShowContextMenu
  (
    /* [in] */ DWORD dwID,
    /* [in] */ POINT __RPC_FAR *ppt,
    /* [in] */ IUnknown __RPC_FAR *pcmdtReserved,
    /* [in] */ IDispatch __RPC_FAR *pdispReserved
  )
  {
    return S_OK;
  }

  virtual HRESULT STDMETHODCALLTYPE GetHostInfo
  (
    /* [out][in] */ DOCHOSTUIINFO __RPC_FAR *pInfo
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE ShowUI
  (
    /* [in] */ DWORD dwID,
    /* [in] */ IOleInPlaceActiveObject __RPC_FAR *pActiveObject,
    /* [in] */ IOleCommandTarget __RPC_FAR *pCommandTarget,
    /* [in] */ IOleInPlaceFrame __RPC_FAR *pFrame,
    /* [in] */ IOleInPlaceUIWindow __RPC_FAR *pDoc
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE HideUI(void)
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE UpdateUI(void)
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE EnableModeless
  (
    /* [in] */ BOOL fEnable
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE OnDocWindowActivate
  (
    /* [in] */ BOOL fActivate
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE OnFrameWindowActivate
  (
    /* [in] */ BOOL fActivate
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE ResizeBorder
  (
    /* [in] */ LPCRECT prcBorder,
    /* [in] */ IOleInPlaceUIWindow __RPC_FAR *pUIWindow,
    /* [in] */ BOOL fRameWindow
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator
  (
    /* [in] */ LPMSG lpMsg,
    /* [in] */ const GUID __RPC_FAR *pguidCmdGroup,
    /* [in] */ DWORD nCmdID
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE GetOptionKeyPath
  (
    /* [out] */ LPOLESTR __RPC_FAR *pchKey,
    /* [in] */ DWORD dw
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE GetDropTarget
  (
    /* [in] */ IDropTarget __RPC_FAR *pDropTarget,
    /* [out] */ IDropTarget __RPC_FAR *__RPC_FAR *ppDropTarget
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE GetExternal
  (
    /* [out] */ IDispatch __RPC_FAR *__RPC_FAR *ppDispatch
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE TranslateUrl
  (
    /* [in] */ DWORD dwTranslate,
    /* [in] */ OLECHAR __RPC_FAR *pchURLIn,
    /* [out] */ OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut
  )
  {
    return E_NOTIMPL;
  }

  virtual HRESULT STDMETHODCALLTYPE FilterDataObject
  (
    /* [in] */ IDataObject __RPC_FAR *pDO,
    /* [out] */ IDataObject __RPC_FAR *__RPC_FAR *ppDORet
  )
  {
    return E_NOTIMPL;
  }
};
Technical Details
Message-ID: <424983a3@newsgroups.borland.com>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!gatel-ffm!gatel-ffm!194.25.134.126.MISMATCH!newsfeed01.sul.t-online.de!t-online.de!newsgroups.borland.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Thread: feeec,9599a9d64bd580a8,start
X-Google-Attributes: gidfeeec,public
X-Google-Language: ENGLISH,ASCII-7-bit
From: "SD" <nospawm@please.it>
Newsgroups: borland.public.cppbuilder.internet.web
Subject: IOleClientSite implementation (subclass)
Date: Tue, 29 Mar 2005 18:34:42 +0200
Lines: 277
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
NNTP-Posting-Host: 217.168.230.137
Message-ID: <424983a3@newsgroups.borland.com>
X-Trace: newsgroups.borland.com 1112114083 217.168.230.137 (29 Mar 2005 08:34:43 -0800)
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!gatel-ffm!gatel-ffm!194.25.134.126.MISMATCH!newsfeed01.sul.t-online.de!t-online.de!newsgroups.borland.com!not-for-mail