老问题,新解法:关于去掉WebBrowser的边框和滚动条

15 篇文章 0 订阅
12 篇文章 0 订阅

关于 去掉WebBrowser的边框和滚动条确实是个老问题了,网上的解决方法也是一坨一坨的,基本上比较一致。方法如下:

1. 写网页的时候,设置body样式,这不是我们讨论的范围。

2.OnDocumentComplete的时候修改body,等于对于方法1的补救,不是我们的讨论范围。

3.HtmlView::Create的时候修改属性。

有时候,貌似三种方法有时不大管用哦,比较正确的方法

4.OnNavigateComplete2的时候,调用ICustomDoc::SetUIHandler实现IDocHostUIHandler2。

5.通过IOleClientSite实现IDocHostUIHandler2

以上两种方法有个缺点,对第一个文档失效,所以一般现about:blank一下。


今天IE控件,同样要解决上述问题。但是。。。

不能用MFC,方法4被禁用了,

另外引入一个界面库,IOleClientSite已经被占用,不想改人家代码,方法5被禁用了。

so,不就是COM组件吗,连接点上。


首先完成这个类

class CDocHostUIHandler : 
  public IDocHostUIHandler2,
  public IOleCommandTarget
{
//...
};

然后完成这个类

class WebbrowserEventSinker : public IDispatch
{
//...
};

最后,创建好IE后,通过连接点设置WebbrowserEventSinker实例关注事件。


注意的是时机:

Invoke中,id=DISPID_NAVIGATECOMPLETE2的时候,设置SetUIHandler

Invoke中,id=DISPID_DOCUMENTCOMPLETE的时候,为第一次blank设置

pBody->put_scroll((BSTR)L"no");
IHTMLStylePtr pStyle;
pElement->get_style(&pStyle);
pStyle->put_border((BSTR)L"none");

也可以不用,因为blink给用户看没有意义,或者blank两次就没有边框了。

另:也可以用此方法禁用菜单等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值