mfc 内嵌ie - CSDN
精华内容
参与话题
  • C++中嵌入IE浏览器(一)

    千次阅读 2015-08-20 10:19:01
    最近项目中用html 来做界面,也就折腾了一下在wxwidget中嵌入浏览器的若干细节工作,mfc也基本是类似的,由于wxwidget中已经做了一个封装wxie,但是开发过程中也遇到了不少问题,在此做一下总结:  ie边框 及...

        最近项目中用html 来做界面,也就折腾了一下在wxwidget中嵌入浏览器的若干细节工作,mfc也基本是类似的,由于wxwidget中已经做了一个封装wxie,但是开发过程中也遇到了不少问题,在此做一下总结: 

    1. ie边框 及上下文菜单
         普通嵌入到程序里面的浏览器页面都会有一个灰色的边框,这样放到程序里面就很难看。目前网上流行的办法添加css:
      body{
        border
      :0;
      }

           但是这个方法的缺点是,必须要把页面头部的dtd申明去掉。网上的错误提法是类似以下链接的:    http://www.faceker.com/200801/webbrowser-no-border.html   这里面讲,只要把头部改成:
       

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

         但是目前很多页面用了比较新的css,改成这样后,页面就无法正常显示了。让网页美工改样式? 真是有点困难。
        后来继续查阅了资料,发现比较好的办法,那就是重载  IDocHostUIHandler 接口,其中,实现以下部分: 


    HRESULT STDMETHODCALLTYPE FrameSite::GetHostInfo(DOCHOSTUIINFO *pInfo)
    {
        pInfo->cbSize = sizeof(DOCHOSTUIINFO);
        pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER|DOCHOSTUIFLAG_SCROLL_NO;
        pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;
        return S_OK;

    }

           其中  DOCHOSTUIFLAG_NO3DBORDER 就表示不要生成边框,DOCHOSTUIFLAG_SCROLL_NO 表示不要生成滚动条
    这样就可以比较完美的解决边框和滚动条的问题,不用依赖页面的调整 。让设计师爱用什么用什么。
         另外一个就是禁用右键菜单,网上也有不少办法,但是用这个接口可以很简单的实现: 
     

    HRESULT STDMETHODCALLTYPE FrameSite::ShowContextMenu(DWORD dwID, POINT *ppt, 
                                                                 IUnknown *pcmdtReserved, IDispatch *pdispReserved)
    {
        HRESULT result    = S_FALSE; //Dont Interfere
        BOOL    handled    = FALSE;

        switch ( m_contextMenuMode )
        {
        case kDefaultMenuSupport:
            break;

        case kNoContextMenu:
            result    = S_OK;
            handled    = TRUE;
            break;

        case kTextSelectionOnly:
            if (dwID != CONTEXT_MENU_TEXTSELECT)
            {
                result    = S_OK;
                handled    = TRUE;
            }

            break;

        case kAllowAllButViewSource:
            if (dwID == CONTEXT_MENU_DEFAULT)
            {
                //result    = ModifyContextMenu(dwID, ppt, pcmdtReserved);
                handled    = TRUE;
            }

            break;

        case kCustomMenuSupport:
            if (dwID == CONTEXT_MENU_DEFAULT)
            {
                //result = CustomContextMenu(ppt, pcmdtReserved);
                handled    = TRUE;
            }

            break;
        }


        if (! handled)
        {
             result = S_FALSE;
        }


        return result;
    }

        这里不仅可以控制右键菜单显示,m_contextMenuMode  = kNoContextMenu,还可以做到自定义菜单显示,m_contextMenuMode  =其他值。因为暂时还不需要自定义菜单,所以这里没有实现。
       
       如果用wxie,就在FrameSite类增加这个接口即可,不关注的接口直接返回S_FALSE 或E_NOTIMPL;

      如果用sdk或mfc,可以 调用IOleObject 的SetClientSite 方法,设置一个继承了IOleClientSite 和 IDocHostUIHandler 的接口。

    展开全文
  • MFC浏览器(内嵌IE

    热门讨论 2020-07-16 23:34:07
    一个比较完整的MFC浏览器,可以基本实现常用的需求,还有一点遗憾是有时点击链接会调起IE,我会尽快完善
  • MFC内嵌cef3浏览器内核

    千次阅读 2019-07-09 09:18:12
    一、cef3内核的下载 可以从http://opensource.spotify.com/cefbuilds/index.html下载,注意:很多版本编译都可以通过 但是运行的时候会崩溃,以cef_binary_3.2704.1414.g185cd6c_windows32为例,该版本debug编译都...

    一、cef3内核的下载

    可以从http://opensource.spotify.com/cefbuilds/index.html下载,注意:很多版本编译都可以通过 但是运行的时候会崩溃,以cef_binary_3.2704.1414.g185cd6c_windows32为例,该版本debug编译都可以通过,运行的时候加载本地网页会出现错误,原因未知,加载www.baidu.com,关闭的时候会出现崩溃的情况,release版本完全正常,

     

    二、使用cmake创建成vs工程

    本文创建为vs2015,

    打开vs工程文件,,编译libcef_all_wrapper,另外编译自带cefsimple,从libcef_dll_wrapper文件下的生成目录debug或者release获取libcef_dll_wrapper.lib,另外要把cefsimple需要的依赖都拷出来,后面作为我们demo必要的依赖。

    三、cef相关文件夹介绍

     

    文件夹介绍

    (1)cmake,该文件夹包含Cmake的一些宏定义,配置信息。

    (2)include,使用该库的所有头文件

    (3)libcef_dll,库的源代码

    (4)tests,测试程序demo源代码

    (5)Resource,资源文件

    该资源文件是程序运行需要依赖的资源文件,含语言包,unicode支持等

    (6)Debug/Release,程序依赖的动态库/静态库。但不包括C++库:libcef_dll_wrapper.lib。

    1、必须文件,缺少任意一个CEF将无法运行:
    libcef.dll
        这个不用多说,CEF的核心库文件,js引擎、网页加载渲染逻辑等都在其中,也是size最大的一个文件(Release版将近50M,Debug版超过500M)。
    icudtl.dat 
        用来支持unicode,缺少这些文件虽然编译能通过,但是执行CefInitialize();的时候就会崩溃,在这个坑趴了很久还以为是代码问题。
    natives_blob.bin
    snapshot_blob.bin

        V8引擎快照数据。
    2、可选文件:
    locales/
        该目录包含CEF,Chromium和Blink使用的本地化资源。 CefSettings.locale指定需要加载的.pak文件。 只需要发布配置的区域对应的.pak文件。

    如果没有区域设置将配置默认语言环境“en-US”。如果没有这些文件任意Web组件可能显示不正确。
    cef.pak
    cef_100_percent.pak
    cef_200_percent.pak

        这些文件包含了供CEF使用的区域无关资源,缺少这些文件任意Web组件可能显示不正确。(笔者当时缺少cef_100_percent.pak

    cef_200_percent.pak两文件,导致视频控件不显示音量和最大化按钮)。
    cef_extensions.pak

        此文件包含扩展加载所需的非本地化资源传递`--disable-extensions`命令行标志来禁止使用文件。没有这个文件,依赖于扩展系统的组件将不起作用,如PDF查看器。

    devtools_resources.pak

        此文件包含Chrome开发者工具所需的非本地化资源,缺少这个文件,Chrome开发者工具将无法运行。
    d3dcompiler_43.dll (Windows XP需要该文件)
    d3dcompiler_47.dll (Windows Vista和更高版本的系统需要该文件)
    libEGL.dll
    libGLESv2.dll

        Direct3D支持文件,如果缺少这些文件,HTML5在渲染2D画布,3D CSS,WebGL时将不起作用。
    wow_helper.exe

        用来支持Windows Vista 64位沙箱。如果没有这个文件,32位的CEF将无法在开启了沙箱的64位的Vista机器上运行。

     

    四、测试demo的创建

    1、创建mfc对话框工程,将cef_sandbox.lib、libcef.lib、libcef_dll_wrapper.lib拷到项目中,并添加相应依赖,将源码中的include文件夹添加到项目中。

    2、将本人上传的的文件资源https://download.csdn.net/download/venice0708/11285714下载并添加到工程中,作为后面c++调用js和JS调用c++的依赖。

    3、创建CTestWeb继承IWebEventCallBackBase。

    4、在BOOL CnewCef3DemoDlg::OnInitDialog(),添加

    
     

    关闭的时候需要调用GetCefInstance()->ExitInstance();

    五、c++调用js

    在本人的依赖中有 GetCefInstance()->RunJS(pTestWeb->GetWebID(), L"sendMessage", 1, JsDataStr.GetBuffer());

    第一个参数为该网页的ID号,第二个为js的函数名,第三个为总的参数个数,第四个为参数,详情请看源代码。

    六、JS调用c++

    在上文的依赖代码中需要进行c++函数的注册

    在js代码中只需要CallWkeWebkit("CCjsCallCpp", "666");即可,详细的可以参照一些网友的做法。

     

    本文只要是写了一些项目中研究的大体思路,方便以后查阅,类似的博文网上很多,详细可以参考其他网友的!

    展开全文
  • 我有MFC做了一个简单的基于对话框显示网页,我想问下MFC的这个内嵌IE用的是IE几的内核,要怎么给呢?因为我没怎么接触MFC所以求大神告知
    我有MFC做了一个简单的基于对话框显示网页,我想问下MFC的这个内嵌IE用的是IE几的内核,要怎么给呢?因为我没怎么接触MFC所以求大神告知
    
    展开全文
  • MFC内嵌web页面

    千次阅读 2014-12-20 17:44:48
    MFC内嵌web页面 方法一: 1.新建工程,插入ActiveX控件Microsoft Web Browser 2.添加关联变量WebDlg 3.添加代码WebDlg.Navigate(_T("http://www.baidu.com"),NULL,NULL,NULL,NULL);  就可以打开网页了。 此...
    MFC内嵌web页面
    方法一:
    1.新建工程,插入ActiveX控件Microsoft Web Browser
    2.添加关联变量WebDlg
    3.添加代码WebDlg.Navigate(_T("http://www.baidu.com"),NULL,NULL,NULL,NULL);
      就可以打开网页了。
    此方法的局限:MFC程序无法获得用户在网页上的点击

    方法二:
    CDHtmlDialog的基本使用
    1.新建工程,勾选使用HTML对话框
    2.初始化时候写上Navigate(_T("http://www.baidu.com"));
    3.在消息绑定处绑定ID和函数,这样做就可以把IE控件和MFC绑定了
    // CttDlg 对话框
    BEGIN_DHTML_EVENT_MAP(CttDlg)
        DHTML_EVENT_ONCLICK(_T("su"), OnButtonOK)
        DHTML_EVENT_ONCLICK(_T("ButtonCancel"), OnButtonCancel)
    END_DHTML_EVENT_MAP()







    展开全文
  • 原文地址:http://blog.163.com/fyz_seven/blog/static/1552536302011520105756360/ 直接上代码: 后面附带注释 (代码是我从网上搜下来的,然后经过我的机器调试,并且编译通过的) 本文用到了COM组件的相关... ...#i
  • mfc 利用htmlview类 实现内嵌浏览器 并控制网页只在当前页面弹出,mfc完美封装一个简易浏览器实现
  • 直接上代码: 后面附带注释 (代码是我从网上搜下来的,然后经过我的机器调试,并且编译通过的) 本文用到了COM组件的相关知识,ATL的相关知识 #include CComModule _Module; #include #include ...L
  • 其实是用方式很简单,就是把ActiveX Control整合到自己的窗口类中 MSDN目录:Web开发>Internet Explorer Development>Hosting and Reuse>WebBrowser Control>Overviews/Tutories>Reusing the WebBrowser Control ...
  • MFC内嵌CEF打开网页巨慢解决办法

    千次阅读 2019-06-21 09:22:58
    默认CEF是使用了电脑IE浏览器的代理,使用代理会导致CEF打开网页非常慢,但是在浏览器中打开网页是很快的,为了解决这个问题,本人总结了两种办法: ①直接修改注册表,将IE浏览器的代理模式全部去掉,代码如下: ...
  • 在DLL里加载IE控件

    2009-05-18 15:00:00
    在DLL里加载IE控件 原文地址:http://qzone.qq.com/blog/61960104-1241083040 以前写MFC的DLL的时候,总会在自动生成的代码框架里看到提示,需要在每一个输出的函数开始添加上AFX_MANAGE_STATE...
  • rt,小菜鸟一枚,刚来报到,老板让在框架中内嵌IE,可是不懂啊,他说是什么SDK里面有?谢谢帮忙了
  • 随着人们对客户端软件界面要求的不断提高,软件开发商面临着一个问题:如何快速廉价开发出各种丰富效果的UI界面。设计出一套丰富控件的界面库是不容易的,且产品经理丰富的想法和UED对效果的追求,往往会使程序员疲...
  • mfc中浏览器会发现脚本错误,这个需要屏蔽掉, 我刚刚开始学所以不是很了解,我看到那个代码m_dwProperty |= DLCTL_SILENT;//DLCTL_SILENT不谈出脚本错误 BOOL CMyiew::OnAmbientProperty(COleControlSite* pSite, ...
  • 之前也做过一些含内嵌IE控件的东西,只是一直用MFC/ATL等框架,对于里面的原理其实一知半解,只有脱离它们写一遍,才算能真正懂。前不久在写一个SkyDriveClient的时候正好有一个需求,就练习了一下。技术含量没有,...
  • MFC中使用浏览器

    千次阅读 2006-03-28 15:38:00
    前言 由于本人在开发中经常要在程序中嵌入... 在MFC中使用浏览器 在MFC中微软为我们提供了CHtmlView、CDHtmlDialog类让我们的程序很方便的嵌入浏览器和进行浏览器的二次开发,这比直 接使用WebBrowser控件要方便
  • source: http://files.cnblogs.com/satng/TestPopWindow.7z 内嵌IE的滚动条显示控制在 html里 body scroll='no'即可。 ...
  • VC开了一个项目,在UI层显示用xml显示信息 所以搜到了IE内嵌的技术,通过调用WebBrowser控件在MFC的对话框中加载html文件。 具体的实例步骤在文档中。
  • 很多应用程序内嵌IE来加载网页,使用MFC的CWebBrowser2自动生成的控件,自动生成的IE控件的代码基本不可读,函数调用都是这种:void GoBack() { InvokeHelper(0x64, DISPATCH_METHOD, VT_EMPTY, NULL, NULL); } ...
1 2 3 4 5 ... 20
收藏数 506
精华内容 202
热门标签
关键字:

mfc 内嵌ie