html触发页面上其他按钮,如何在htmlview中触发页面中的按钮?

回答(8)

在你的stdafx.h里加上下面这行:

#import "c:/windows/system/mshtml.tlb" no_namespace rename("UINT_PTR","wbUINT_PTR") rename("IHTMLControlElement","wbIHTMLControlElement")

编译后可以自动导入mshtml的类库,其实htmlview就是封装的mshtml啦。

你需要学习一些DHTML的知识,MSDN里是用VBScript描述的

Document.form1.button.OnClick就是click button了

至于捕获事件需要使用Sink或者ActiveX组件连接

Sink的好处是不需要额外的DLL组件,但作起来复杂

下面spDoc是GetDocument得到的IHTMLDocument2

在OnDocumentCompleteWb(LPDISPATCH pDisp, VARIANT FAR* URL) 里面:

try{

IUnknown *pUnk;

HRESULT hr = spDoc->QueryInterface(__uuidof(IConnectionPointContainer),

(void **)&pCPC);

if(FAILED(hr)) return;

hr = pCPC->FindConnectionPoint(__uuidof(HTMLDocumentEvents), &pCP);

pCPC->Release();

if (FAILED(hr)) return;

if(!pDocEvent) {

pDocEvent=new IHTMLDocCon();

pDocEvent->Init(GetSafeHwnd(), WM_USER_WB);

}

hr = pDocEvent->QueryInterface(__uuidof(IUnknown), (void **) &pUnk);

if (FAILED(hr)) return;

hr = pCP->Advise(pUnk, &dwConnEvt);

pCP->Release();

pDocEvent->Release();

if (FAILED(hr)) return;

}catch(...){

}

pDocEvent就是你作的sink,基类是HTMLDocumentEvents,主要需要实现Invoke方法:

switch(dispIdMember){

case DISPID_HTMLDOCUMENTEVENTS_ONCLICK:

vRet=onclick();

vRet.ChangeType(VT_BOOL);

break;

.............

这里就是实现的捕获点击事件,用个方法,比如sendmessage传回主windows,然后:得到事件类型和事件源:

IHTMLWindow2Ptr curWin=spDoc->GetparentWindow();

IHTMLEventObjPtr event=curWin->Getevent();

IHTMLElementPtr ele=event->GetsrcElement();

然后你就处理吧。

另外一种方法比较简单,是做个activex dll,用向导就成,做个class, 有个

回答人:

软界网友  我来回答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值