老問題,新解法:關於去掉WebBrowser的邊框和滾動條

關於去掉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兩次就沒有邊框了。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章