C++中嵌入ie瀏覽器總結(jié)(1) - ie邊框 及上下文菜單
最近項(xiàng)目中用html 來做界面,也就折騰了一下在wxwidget中嵌入瀏覽器的若干細(xì)節(jié)工作,mfc也基本是類似的,由于wxwidget中已經(jīng)做了一個(gè)封裝wxie,但是開發(fā)過程中也遇到了不少問題,在此做一下總結(jié):
- ie邊框 及上下文菜單
普通嵌入到程序里面的瀏覽器頁面都會(huì)有一個(gè)灰色的邊框,這樣放到程序里面就很難看。目前網(wǎng)上流行的辦法添加css:
body{
border:0;
}
但是這個(gè)方法的缺點(diǎn)是,必須要把頁面頭部的dtd申明去掉。網(wǎng)上的錯(cuò)誤提法是類似以下鏈接的: http://www.faceker.com/200801/webbrowser-no-border.html 這里面講,只要把頭部改成:

但是目前很多頁面用了比較新的css,改成這樣后,頁面就無法正常顯示了。讓網(wǎng)頁美工改樣式? 真是有點(diǎn)困難。
后來繼續(xù)查閱了資料,發(fā)現(xiàn)比較好的辦法,那就是重載 IDocHostUIHandler 接口,其中,實(shí)現(xiàn)以下部分:











其中 DOCHOSTUIFLAG_NO3DBORDER 就表示不要生成邊框,DOCHOSTUIFLAG_SCROLL_NO 表示不要生成滾動(dòng)條
這樣就可以比較完美的解決邊框和滾動(dòng)條的問題,不用依賴頁面的調(diào)整 。讓設(shè)計(jì)師愛用什么用什么。
另外一個(gè)就是禁用右鍵菜單,網(wǎng)上也有不少辦法,但是用這個(gè)接口可以很簡單的實(shí)現(xiàn):




























































這里不僅可以控制右鍵菜單顯示,m_contextMenuMode = kNoContextMenu,還可以做到自定義菜單顯示,m_contextMenuMode =其他值。因?yàn)闀簳r(shí)還不需要自定義菜單,所以這里沒有實(shí)現(xiàn)。
如果用wxie,就在FrameSite類增加這個(gè)接口即可,不關(guān)注的接口直接返回S_FALSE 或E_NOTIMPL;
如果用sdk或mfc,可以 調(diào)用IOleObject 的SetClientSite 方法,設(shè)置一個(gè)繼承了IOleClientSite 和 IDocHostUIHandler 的接口。
posted on 2008-12-20 22:00 jerrychan 閱讀(4380) 評論(12) 編輯 收藏 引用 所屬分類: C++