社区
C++ Builder
帖子详情
( BCB_FANS请进)如何实现TCppWebBrowser中的IDocHostUIHandler接口
yinglang
2002-11-22 05:37:40
BCB_FANS 我查了msdn,不过还是不知道如何实现IDocHostUIHandler,希望给我一些启示,谢谢
...全文
420
8
打赏
收藏
( BCB_FANS请进)如何实现TCppWebBrowser中的IDocHostUIHandler接口
BCB_FANS 我查了msdn,不过还是不知道如何实现IDocHostUIHandler,希望给我一些启示,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Lo
2002-12-06
打赏
举报
回复
BCB_FANS(四大名捕之追杀令) :
果然是高手,小弟曾经为这个问题快找遍MSDN了,但还是不知道在BCB里怎么调用,不过后来我用另一种方法解决了我的问题。
不过现在看到你的代码,真的是配服死了。我想问一问,BCB_FANS大哥,你搞BCB有多久了?
yinglang
2002-11-22
打赏
举报
回复
真是好长阿,佩服,佩服,稍后给分,谢谢,
RomanticProgrammer
2002-11-22
打赏
举报
回复
不佩服BCB_FANS大哥真是不行...
bcbsoft
2002-11-22
打赏
举报
回复
收藏
bcb_fans
2002-11-22
打赏
举报
回复
主程序中的代码:
TDocHostUIHandlerImpl *FDocHostUIHandler;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
FDocHostUIHandler = new TDocHostUIHandlerImpl();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete FDocHostUIHandler;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//*/
CppWebBrowser1->Navigate(L"about:blank");
while(CppWebBrowser1->Document == NULL)
{
Sleep(10);
Application->ProcessMessages();
}
//传递接口指针到IHTMLDocument2
ICustomDoc *m_spCustDoc;
HRESULT hr;
hr = CppWebBrowser1->Document->QueryInterface(IID_ICustomDoc,(void**)&m_spCustDoc);
if(SUCCEEDED(hr))
{
hr = m_spCustDoc->SetUIHandler(FDocHostUIHandler);
if(hr != S_OK)
{
MessageBox(NULL,AnsiString(AnsiString("Can not bind IDocHostUIHandler instance to ") +
"IHTMLDocument2.Err = " + SysErrorMessage(hr)).c_str(),
NULL,MB_OK | MB_APPLMODAL | MB_ICONWARNING);
}
else
{
MessageBox(NULL,"Succeeded",NULL,MB_OK | MB_APPLMODAL | MB_ICONWARNING);
}
m_spCustDoc->Release();
}
//*/
}
//---------------------------------------------------------------------------
虽然可以通过这个接口定制一些自己需要的特征,不过好像用处也不太大。上面的代码仅仅是取消3D边框以及在TCppWebBrowser上单击右键时显示一个自己的提示框。如果楼主想定制别的东西,可以参考MSDN(IEREF.CHM),在此不详述。
bcb_fans
2002-11-22
打赏
举报
回复
提前半小时贴代码 :)
=====================================
DocHostUIHandlerImpl.h===============
#ifndef DocHostUIHandlerImplH
#define DocHostUIHandlerImplH
#include <ShDocVw_TLB.h>
#include <exdispid.h>
#include <mshtmhst.h>
//---------------------------------------------------------------------------
class TDocHostUIHandlerImpl : public IDocHostUIHandler
{
private:
ULONG RefCount;
public:
TDocHostUIHandlerImpl():RefCount(0){ }
// IUnknown Method
HRESULT __stdcall QueryInterface(REFIID riid, void **ppv);
ULONG __stdcall AddRef();
ULONG __stdcall Release();
// IDocHostUIHandler Method
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){ return E_NOTIMPL; }
STDMETHOD(HideUI)( void){ return E_NOTIMPL; }
STDMETHOD(UpdateUI)( void){ return E_NOTIMPL; }
STDMETHOD(EnableModeless)(
/* [in] */ BOOL fEnable){ return E_NOTIMPL; }
STDMETHOD(OnDocWindowActivate)(
/* [in] */ BOOL fActivate){ return E_NOTIMPL; }
STDMETHOD(OnFrameWindowActivate)(
/* [in] */ BOOL fActivate){ return E_NOTIMPL; }
STDMETHOD(ResizeBorder)(
/* [in] */ LPCRECT prcBorder,
/* [in] */ IOleInPlaceUIWindow __RPC_FAR *pUIWindow,
/* [in] */ BOOL fRameWindow){ return E_NOTIMPL; }
STDMETHOD(TranslateAccelerator)(
/* [in] */ LPMSG lpMsg,
/* [in] */ const GUID __RPC_FAR *pguidCmdGroup,
/* [in] */ DWORD nCmdID){ return E_NOTIMPL; }
STDMETHOD(GetOptionKeyPath)(
/* [out] */ LPOLESTR __RPC_FAR *pchKey,
/* [in] */ DWORD dw){ return E_NOTIMPL; }
STDMETHOD(GetDropTarget)(
/* [in] */ IDropTarget __RPC_FAR *pDropTarget,
/* [out] */ IDropTarget __RPC_FAR *__RPC_FAR *ppDropTarget){ return E_NOTIMPL; }
STDMETHOD(GetExternal)(
/* [out] */ IDispatch __RPC_FAR *__RPC_FAR *ppDispatch){ return E_NOTIMPL; }
STDMETHOD(TranslateUrl)(
/* [in] */ DWORD dwTranslate,
/* [in] */ OLECHAR __RPC_FAR *pchURLIn,
/* [out] */ OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut){ return E_NOTIMPL; }
STDMETHOD(FilterDataObject)(
/* [in] */ IDataObject __RPC_FAR *pDO,
/* [out] */ IDataObject __RPC_FAR *__RPC_FAR *ppDORet){ return E_NOTIMPL; }
};
//---------------------------------------------------------------------------
#endif
DocHostUIHandlerImpl.cpp=============
#include <Vcl.h>
#pragma hdrstop
#include "DocHostUIHandlerImpl.h"
//---------------------------------------------------------------------------
// IUnknown Method
//---------------------------------------------------------------------------
//QueryInterface
HRESULT __stdcall TDocHostUIHandlerImpl::QueryInterface(REFIID riid, void **ppv)
{
if(IsEqualIID(riid,IID_IUnknown))
{
*ppv = static_cast<IUnknown*>(this);
return S_OK;
}
else if(IsEqualIID(riid,IID_IDocHostUIHandler))
{
*ppv = static_cast<IDocHostUIHandler*>(this);
return S_OK;
}
else
{
*ppv = NULL;
return E_NOINTERFACE;
}
}
//---------------------------------------------------------------------------
//AddRef
ULONG __stdcall TDocHostUIHandlerImpl::AddRef()
{
InterlockedIncrement((long*)&RefCount);
return RefCount;
}
//---------------------------------------------------------------------------
//Release
ULONG __stdcall TDocHostUIHandlerImpl::Release()
{
if(InterlockedDecrement((long*)&RefCount) <= 0)
delete this;
return RefCount;
}
//---------------------------------------------------------------------------
// IDocHostUIHandler Method
//---------------------------------------------------------------------------
STDMETHODIMP TDocHostUIHandlerImpl::ShowContextMenu(DWORD dwID,POINT *ppt,
IUnknown *pcmdtReserved,IDispatch *pdispReserved)
{
MessageBox(NULL,AnsiString("ShowContextMenu ID = " + IntToStr(dwID)).c_str(),
NULL,MB_OK | MB_APPLMODAL | MB_ICONWARNING);
return S_OK;
}
//---------------------------------------------------------------------------
STDMETHODIMP TDocHostUIHandlerImpl::GetHostInfo(DOCHOSTUIINFO *pInfo)
{
pInfo->dwFlags = pInfo->dwFlags | DOCHOSTUIFLAG_NO3DBORDER;
return S_OK;
}
//---------------------------------------------------------------------------
yinglang
2002-11-22
打赏
举报
回复
十分感谢,不过你加班到10点正是辛苦阿^_^
bcb_fans
2002-11-22
打赏
举报
回复
正在上班,晚上10点给你代码。请耐心等待.........
最强悍的 VC VB反编译工具 Hex-Rays
最强悍的反编译工具 Hex-Rays。 可以反编译 VB VC
BCB
Delphi 等等一切 x86/x64 代码为 C 代码。密码参见内附说明文件。 我写了个简单的介绍 http://blog.caozhongyan.com/article.asp?id=19
二、Android
BCB
的作用
这篇很多部分来源于其他博客,我个人进行了总结,可以串联起来整个ota流程 1、问题来源 2、固件内容与开机流程 3、开机
BCB
作用 4、recovery升级交互流程 1、问题来源 查看解密流程和recovery.cpp升级流程,多次提到
BCB
相关 1、从system到recovery需要用到
BCB
文件RecoverySystemService.java //设置
BCB
public bool...
BCB
6.0里没有
TCp
p
Web
Browser
TCp
p
Web
Browser
组件在Intelnet板上没有.可以通过以下步骤解决
Component-->Install Packages-->查看Design Packages列表
中
是否存在Borland C++B
ui
lder Internet Explorer 5 Components Package一项,如果没有,点击Add按钮-->找到$(
BCB
)/bin/
bcb
ie60.bpl添加进来(如果连这个文件也找不到,可能是你的
BCB
安装不太完整)-->如果列表
中
存在这一项,请选
中
对
BCB
中
的RTTI机制
BCB
中
的RTTI机制RTTI在
BCB
中
其实有两个意义。首先,针对一般标准的C++
中
所定义的,RTTI是所谓的Run-Time Type Identification的缩写。传统的程序语言
中
,所谓的数据型态仅在Compile-Time有所作用。举例而言,您宣告了一个变量a,并且指定其型态为整数。您如何在Run-Time期间知道他的型态是整数呢?很遗憾的是,在原来的C/C++
中
您是无法知道这样的
C++B
UI
LDER2010下屏蔽
web
browser
脚本错误对话框
使用
Web
browser
->Silent = True一刀切屏蔽脚本错误对话框(不执行有错误的脚本),但是某些页面需要执行js脚本的。 搜索互联网,很多都是MFC和.NET的,只找到一篇
BCB
的添加右击菜单的。经过学习改进MFC代码,尝试了很多代码,
实现
了继承I
Doc
Host
UI
Handler
、IOleCommandTarget,并
实现
了
接口
。最后几乎要放弃该方法,去使用枚举对象。但是还是不甘心
C++ Builder
13,825
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章