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