C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Заменить контекстное меню в CppWebBrowser
GIZMO
Отправлено: 07.02.2005, 14:44


Машинист паровоза

Группа: Участник
Сообщений: 174



Привет!
Проблема следующая, при замене контекстного меню в браузере оно успешно заменяется. но только до первого перехода по ссылке. После чего снова восстанавливается стандартное?
Aptem
Отправлено: 08.02.2005, 19:58


Мастер участка

Группа: Участник
Сообщений: 349



Можешь дать исходники? Тогда посмотрим.
GIZMO
Отправлено: 09.02.2005, 10:29


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Aptem @ 08/02/2005, 21:00)
Можешь дать исходники? Тогда посмотрим.

CODE

//in hpp
class TDocHandler :public IDocHostUIHandler
{
 long refcount;
 TCppWebBrowser* wb;
 void __fastcall MenuItem2Click(TObject *Sender){ShowMessage(toString);};
public:

 TDocHandler(TCppWebBrowser* _wb):refcount(1){
   wb = _wb;
   wb->PopupMenu->Items->Items[0]->OnClick = MenuItem0Click;
   ...
 }

 virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID classid, void** intf) {
   if (classid == IID_IUnknown)
     *intf = (IUnknown*)this;
   else if (classid == IID_IDocHostUIHandler)
     *intf = (IDocHostUIHandler*)this;
   else
     return E_NOINTERFACE;
   return S_OK;
 }

 virtual ULONG STDMETHODCALLTYPE AddRef() {
   InterlockedIncrement(&refcount);
   return refcount;
 }

 virtual ULONG STDMETHODCALLTYPE Release() {
   InterlockedDecrement(&refcount);
   if (refcount == 0)
     delete this;
   return refcount;
 }

 // Чтобы отключить контекстное меню надо вернуть S_OK
 virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(
   /* [in] */ DWORD dwID,
   /* [in] */ POINT __RPC_FAR *ppt,
   /* [in] */ IUnknown __RPC_FAR *pcmdtReserved,
   /* [in] */ IDispatch __RPC_FAR *pdispReserved) {
       wb->PopupMenu->Popup(ppt->x, ppt->y);*/
       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;
   }
};
class TForm1 : public TForm
{
__published: // IDE-managed Components
   TCppWebBrowser *CppWebBrowser1;
   TPopupMenu *PopupMenu1;
   TMenuItem *e1;
   TMenuItem *w1;
   TMenuItem *N1;  
...
private: // User declarations
   TDocHandler* dochandler;
public:  // User declarations
   ...
};
//in cpp
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
   dochandler = new TDocHandler(CppWebBrowser1);
   CppWebBrowser1->GoHome();
   while(CppWebBrowser1->Busy)
     Application->ProcessMessages();
   ICustomDoc *custdoc;
   CppWebBrowser1->Document->QueryInterface(IID_ICustomDoc, (LPVOID*)&custdoc);
   if (custdoc)
     custdoc->SetUIHandler(dochandler);
}

Вернуться в Вопросы программирования в C++Builder