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兩次就沒有邊框了。
另:也可以用此方法禁用菜單等。