C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)
先说实在的:最终解决办法是实现IDocHostUIHandler接口,在GetHostInfo方法里解决,但“实现接口”意味着QueryInterface、AddRef、Release三个方法必须实现,所以相关代码是:
class CMyWebBrowser : public IDocHostUIHandler
{
public:
CMyWebBrowser() { m_cRef = 0; }
virtual ~CMyWebBrowser() {}
LONG m_cRef;
private:
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject)
{
HRESULT result = S_OK;
if (IsBadWritePtr(ppvObject, sizeof(LPVOID)))
result = E_INVALIDARG;
if (result == S_OK)
{
*ppvObject = NULL;
if ( IsEqualIID( riid, IID_IUnknown ) )
*ppvObject = this;
// else if ( IsEqualIID( riid, IID_IOleClientSite ) )
// *ppvObject = (IOleClientSite *) this;
else if ( IsEqualIID( riid, IID_IDocHostUIHandler ) )
*ppvObject = (IDocHostUIHandler *) this;
else
result = E_NOINTERFACE;
}
if (result == S_OK)
this->AddRef();
return result;
}
ULONG STDMETHODCALLTYPE AddRef(){
InterlockedIncrement(&m_cRef);
return m_cRef;
}
ULONG STDMETHODCALLTYPE Release() {
ULONG ulRefCount = InterlockedDecrement(&m_cRef);
return ulRefCount;
}
HRESULT STDMETHODCALLTYPE EnableModeless(BOOL fEnable) { return S_OK; }
HRESULT STDMETHODCALLTYPE FilterDataObject(IDataObject *pDO,IDataObject **ppDORet){return S_OK;}
HRESULT STDMETHODCALLTYPE GetDropTarget(IDropTarget *pDropTarget, IDropTarget **ppDropTarget){return S_OK;}
HRESULT STDMETHODCALLTYPE GetExternal(IDispatch **ppDispatch){return S_OK;}
HRESULT STDMETHODCALLTYPE GetOptionKeyPath(LPOLESTR *pchKey,DWORD dw){return S_OK;}
STDMETHOD(GetHostInfo)(DOCHOSTUIINFO *pInfo) {
pInfo->cbSize = sizeof(DOCHOSTUIINFO);
pInfo->dwFlags |= DOCHOSTUIFLAG_NO3DBORDER;
pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;
pInfo->pchHostCss = 0;
pInfo->pchHostNS = 0;
return S_OK;
}
HRESULT STDMETHODCALLTYPE HideUI(VOID){return S_OK;}
HRESULT STDMETHODCALLTYPE OnDocWindowActivate(BOOL fActivate){return S_OK;}
HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(BOOL fActivate){return S_OK;}
HRESULT STDMETHODCALLTYPE ResizeBorder(LPCRECT prcBorder,IOleInPlaceUIWindow *pUIWindow,BOOL fFrameWindow){return S_OK;}
HRESULT STDMETHODCALLTYPE ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved,IDispatch *pdispReserved){return S_OK;}
HRESULT STDMETHODCALLTYPE ShowUI(DWORD dwID,
IOleInPlaceActiveObject *pActiveObject,
IOleCommandTarget *pCommandTarget,
IOleInPlaceFrame *pFrame,
IOleInPlaceUIWindow *pDoc
){return S_OK;}
HRESULT STDMETHODCALLTYPE TranslateAccelerator(LPMSG lpMsg,
const GUID *pguidCmdGroup,
DWORD nCmdID
)
{return S_OK;}
HRESULT STDMETHODCALLTYPE TranslateUrl(DWORD dwTranslate,
OLECHAR *pchURLIn,
OLECHAR **ppchURLOut
)
{return S_OK;}
HRESULT STDMETHODCALLTYPE UpdateUI(VOID) {return S_OK;}
};
1.要写的更通用一点,就是上述类就这么些内容,然后WEBBrowser从这个类继承。
2.除了实现这个接口外,别忘了SetUIHandler,这个不难查到,这里就不写了。
牢骚一下:项目中用到WEBBrowser,由于项目组中只有我一个人做过WEB,所以这玩意一直是我维护,最近由于我给里面的Html加了DocType,导致WEBBrowser出现了3D边框,不管是css的border:0还是body的leftmargin和topmargin,都不管用,查了很多资料(主要是google外国人的),都说实现IDocHostUIHandler接口,在GetHostInfo方法里能干掉3D边框,但我按照网上做的,结果要么报错,要么GetHostInfo不走,郁闷了我,折腾了两天,最后几乎不懂COM的我还是觉得QueryInterface等3个方法要实现,结果去查,果然如此,实现之后,搞定~~~
C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)的更多相关文章
- C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)控制 WebBrowser 控件的外观和行为
在 CSDN 上经常看到以下两个问题:1.在 MFC 应用程序中,如果创建了一个 WebBrowser 控件(包括 CHtmlView 在内),如何可以把该控件的三维边框禁止掉?2.在 MFC 应用程 ...
- MFC中CTime获取日期时间的方法
MFC中CTime类的功能非常强大,可以获取年.月.日.小时.分钟.秒.星期等等,最最重要的是可根据需要去格式化.下面是具体的使用方式: ① 定义一个CTime类对象 CTime time; ② 得到 ...
- 【转载】JAVA中线程的两种实现方法-实现Runnable接口和继承Thread类
转自: http://blog.csdn.net/sunguangran/article/details/6069317 非常感谢原作者,整理的这么详细. 在java中可有两种方式实现多线程,一种是继 ...
- VC6.0 MFC中WebBrowser控件禁止新窗口弹出的解决办法
http://blog.csdn.net/gnorth/article/details/7258293 分类: WebBrowser MFC 禁止新窗口2012-02-14 15:25 1787人阅读 ...
- c#中WebBrowser控件的使用方法
首先先来简单介绍一下webbrowser控件,这个控件是可以实现在form窗体中添加网页内容的.如图,我在form中加入了百度api,(百度地图api调用博客里有讲) 使用这个控件其实很简单 (1)第 ...
- MFC中CListCtrl控件的使用方法
定义一个派生类CViewList 派生于CListCtrl 在要包含该控件的类(CView)中定义一个CViewList类型的变量 CViewList m_wndListView; 在CView响应的 ...
- mfc中CString转化为string的方法
LL(1)分析法实验的mfc做到最后因为CString转化为string的问题卡了一个多小时,也是惨,网上各种方法找过都不行.幸亏最后还是找到几行代码搞定了.特此mark一下. USES_CONVER ...
- MFC中的几种播放声音的方法
一.播放声音文件的简单方法 在VC++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数.利用这些函数可以方便地播放声音.最简单的播放声音方法就是直接调用VC++中提供的声音播放函 数BOOL s ...
- MFC中线程相关知识
MFC中把线程分为两种类型,UI线程和工作者线程. MFC中启动一个线程的最好方法是调用AfxBeginThread,有两个版本,一个用于启动Ui线程,另外一个用于启动工作者线程.在MFC程序中,只有 ...
随机推荐
- Sqlite ContentProvider Loader 上下文 对话框
一.整体工程图 二.activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...
- [置顶] hdu3018解题报告--也是白话几笔画学习总结
1.题意 2.分析难点(结合图形) 1.首先说说题意吧...题意很简单...但是一开始很菜的我就很迷惑..在想啊...题目怎么就会有没有连接边的点呢....因为你每次给出一条边..就把 a,b连接啦. ...
- phantomjs环境搭建已经运行
1.下载phantomjs http://phantomjs.org/ 2.运行 新建phantomjs.bat,记得改目录路径 里面内容为: D:\java\phantomjs\phantomjs. ...
- First_1
#region 练习题 1.4 (1) ///*求一个N阶方阵所有原素的和.(改进:二维数组的大小可以自己输入)*/ //Console.WriteLine("请输入i和j的值:" ...
- Sql 参数的使用
代码片段: a)声明实例 1.声明SQLCommand实例. SqlCommand cmd = new SqlCommand(); 2.声明SqlDataAdapter实例. SqlDataAdapt ...
- webform--常用的控件
一.简单控件 1.Lable——标签:在网页中呈现出来的时候会变成span标签 属性:Text——标签上的文字 BackColor,ForeColor——背景色,前景色 Font——字体 Bold- ...
- BZOJ 1704: [Usaco2007 Mar]Face The Right Way 自动转身机( 贪心 )
贪心...先枚举k, 然后从左往右扫一遍, 发现位置p的牛的状态不符合就将 [p, p + k ) 的牛都转身, 假如p + k - 1 已经超过了最右边牛的位置那这个k就不符合要求. 符合要求的就可 ...
- jQuery Mobile 入门基础教程
jQuery Mobile是jQuery在手机上和平板设备上的版本.jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架. jQue ...
- java--继承的一些笔记
public class Person { public void display(){ System.out.println("Play Person..."); } stati ...
- 基于visual Studio2013解决算法导论之007优先队列(堆实现)
题目 优先队列 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...