如何实现浏览器接口

    前面已经说过,高级一点的功能都需要接口来完成。现在的问题是如何实现所需要的接口。今后会循序渐进地介绍。

 

    通常在VB6中使用接口的时候一般用类型库来完成。对于浏览器编程,主要使用olelib.tlb和olelib2.tlb两个文件。使用前,必须在项目中引用这两个文件。至于这两个文件去哪里下载,网络上去搜索吧,很容易找到。因为这里似乎不可以上传附件,要不然我直接复制上来好了,呵呵。

 

    现在就如何实现“自动完成表单”来简述如何实现接口。

    首先在声明区写上

Implements olelib.IDocHostUIHandler 'Document文档中的界面接口,处理与用户交互方面的问题

 

之后在代码编辑窗口的左上的下拉列表中即可看到 IDocHostUIHandler,选择这项之后,即可看到右上的下拉列表出现了该接口的全部方法。需要说明的是,在VB6中使用这些接口,除非你看到的接口方法写成了Function,否则在Sub中是无法做到真正的类似C语言中的Return的。也就是说,如果不做特殊处理,是没法准确返回一个什么值的。一般情况下,用类似Err.Raise E_NOTIMPL这样的来表示返回E_NOTIMPL。但是这和真正的返回还是有差别的。这一点,如果可能,将在以后的文章中介绍。但若接口方法中什么都不写,则表示返回S_OK!

至于该接口的各个方法的作用,在MSDN中有详细的介绍。限于篇幅和水平,就不做详细介绍了。代码大致如下:

 

Private Sub IDocHostUIHandler_EnableModeless(ByVal fEnable As olelib.BOOL)
    Err.Raise E_NOTIMPL
End Sub

Private Function IDocHostUIHandler_FilterDataObject(ByVal pDO As olelib.IDataObject) As olelib.IDataObject
    Err.Raise E_NOTIMPL
End Function

Private Function IDocHostUIHandler_GetDropTarget(ByVal pDropTarget As olelib.IDropTarget) As olelib.IDropTarget

End Function

Private Function IDocHostUIHandler_GetExternal() As Object
Set IDocHostUIHandler_GetExternal = Me
End Function

Private Sub IDocHostUIHandler_GetHostInfo(pInfo As olelib.DOCHOSTUIINFO)
'这里是设置自动完成的关键了.DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE就是自动完成
pInfo.dwFlags = DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE Or DOCHOSTUIFLAG_NO3DBORDER
pInfo.dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT
End Sub

Private Sub IDocHostUIHandler_GetOptionKeyPath(pOLESTRchKey As Long, ByVal dw As Long)
    Err.Raise E_NOTIMPL
End Sub

Private Sub IDocHostUIHandler_HideUI()
    Err.Raise E_NOTIMPL
End Sub

Private Sub IDocHostUIHandler_OnDocWindowActivate(ByVal fActivate As olelib.BOOL)
    Err.Raise E_NOTIMPL
End Sub

Private Sub IDocHostUIHandler_OnFrameWindowActivate(ByVal fActivate As olelib.BOOL)
    Err.Raise E_NOTIMPL
End Sub

Private Sub IDocHostUIHandler_ResizeBorder(prcBorder As olelib.RECT, ByVal pUIWindow As olelib.IOleInPlaceUIWindow, ByVal fRameWindow As olelib.BOOL)
    Err.Raise E_NOTIMPL
End Sub

Private Sub IDocHostUIHandler_ShowContextMenu(ByVal dwContext As olelib.ContextMenuTarget, pPOINT As olelib.POINT, ByVal pCommandTarget As olelib.IOleCommandTarget, ByVal HTMLTagElement As Object)
Err.Raise E_NOTIMPL
End Sub

Private Sub IDocHostUIHandler_ShowUI(ByVal dwID As Long, ByVal pActiveObject As olelib.IOleInPlaceActiveObject, ByVal pCommandTarget As olelib.IOleCommandTarget, ByVal pFrame As olelib.IOleInPlaceFrame, ByVal pDoc As olelib.IOleInPlaceUIWindow)
    Err.Raise E_NOTIMPL
End Sub

Private Sub IDocHostUIHandler_TranslateAccelerator(lpmsg As olelib.MSG, pguidCmdGroup As olelib.UUID, ByVal nCmdID As Long)
'这里还原了键盘消息,需要判断之后转发键盘消息。
   
End Sub

Private Function IDocHostUIHandler_TranslateUrl(ByVal dwTranslate As Long, ByVal pchURLIn As Long) As Long
    Err.Raise E_NOTIMPL
End Function

Private Sub IDocHostUIHandler_UpdateUI()
    Err.Raise E_NOTIMPL
End Sub

 

 

 

但到目前为止,这些代码并没机会执行。因为这个接口并没有与WebBrowser实现“连接”。

在Form_Load等地方,需要让WebBrowser实现“连接”。

Dim tMSG As olelib.MSG
Dim tRect As olelib.RECT

Dim objOleObject As IOleObject

Set objOleObject = WebBrowser1.Object

objOleObject.SetClientSite Me
objOleObject.DoVerb OLEIVERB_INPLACEACTIVATE, tMSG, Me, 0, Me.hwnd, tRect

 

这样,自动完成就基本可以工作了。然而革命的道路从来就不是平坦的,比如,你会发现,在WebBrowser打开的网页中,所有快捷键均失效了……。

这可怎么办呢?请听下回分解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值