如何使用 WebBrowser 控件打开 Office 文档
也就是说,在调用 WebBrowser1.Navigate 时,该调用会在文档被完全加载之前 将控件返回到 Visual Basic 应用程序。
如果打算为所包含的文档实现自动操作,则需要使用 NavigateComplete2 事件在文档完成加载后发出通知。
使用传入的 WebBrowser 对象的文档属性获取对 Office 文档对象的引用,该对象在前述代码中设置为 oDocument。
WebBrowser 控件不支持菜单合并。
如果需要将文档的菜单项与 Visual Basic 菜单一起显示,则必须改用 OLE 容器控件。
WebBrowser 控件在显示 Office 文档之前通常会隐藏所有停靠工具栏。
您可以使用“自动化”功能通过类似下面的代码来显示浮动工具栏:With oDocument.Application.CommandBars("Standard") .Position = 4 '[msoBarFloating] .Visible = True End With 较新版本的 Internet Explorer(5.0 和更高版本)还允许您使用以下代码来显示停靠工具栏:' This is a toggle option, so call it once to show the ' toolbars and once to hide them. This works with Internet Explorer 5 ' but often fails to work properly with earlier versions... WebBrowser1.ExecWB OLECMDID_HIDETOOLBARS, OLECMDEXECOPT_DONTPROMPTUSER 已知在一个项目中有多个 WebBrowser 控件,并且每个控件都加载了相同类型的 Office 文档(即,全部都是 Word 文档或者全部都是 Excel 电子表格)时,会出现多种问题。
建议一个项目只使用一个控件,并且一次只浏览到一个文档。
最常见的问题发生在 Office 命令栏上(命令栏显示为禁用)。
如果在同一个窗体上有两个 WebBrowser 控件,且两个控件都加载了 Word 文档,而您使用了前面某一种技术显示了工具栏,那么只有一组工具栏将是活动的,且只有该工具栏能正常工作。
另一个则被禁用,且无法使用。
如何对webbrowser和IE编程 / 蓝讯
首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。
我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用(ReUse)webbrowser control的应用程序,可以是vb程序,也可以是vc或者任何其他语言的应用程序。
应用程序必须是可容纳activex控件的容器。
Webbrowser control既是activex control也是activex document 的宿主。
作为控件,它可以置于任何activex容器,作为文档容器,它针对特殊的类型,调用特殊类型注册的文档server以显示文档。
如果你想显示一个.doc文档,webbrowser control装载windows word,,对于html文档,webbrowser装载名为mshtml的组件(如图所示)。
针对不同的文档,你不需要开发不同的应用,仅仅是调用webbrowser control即可。
ShdocvwShdocvw.dll包含了webbrowser control ,控制webbrowser control (就像控制其他任何activex com 控件一样),提供浏览能力给上层宿主。
请注意webbrowser control位于第二级中。
甚至IE也不直接而是通过shdocw.dll来使用webbrowser control的。
尽管shdocvw提供了大部分的浏览功能,但是并不提供IE窗口的呈现功能。
尽管如此,shdocvw还是提供了简单创建web 应用程序的能力。
之后章节会讲到如何将ie的高级特性加入到你的应用程序。
MSHTML早期的mshtml具有读取显示html的功能。
MSHTML实际上是一个active 文档服务器,但是却可以作为其他控件的容器(如图中所示的)。
记得吗,你可以将activex控件置于html中,此时mshtml就是一个activex宿主,还可以控制其他的控件如vbscript 脚本引擎和javascript脚本引擎,java applet ,geszhong,各种插件—别意外,plug-in都是按照ie activex规范写的。
二、WebBrowser Control 与 Internet Explorer二者又太多的共同点,你都是通过COM接口来访问其功能。
当调用webbrowser控件时,使用的是webbrowser对象,在vc中是使用class ID CLSID_WebBrowser的接口类。
当自动化ie时,必须建立名为 InternetExplorer的对象,vc等语言中使用名为class ID CLSID_InternetExplorer的接口类。
接口webbrowser有4个接口(如图),其中3个提供全部的功能,第4个DWebBrowserEvents2接口暴露事件ie4 之前,仅有IwebBrowser和IwebBrowserApp两个接口,且二者共享相同的功能,当开发ie4时候,决定加入第三个接口IWebBrowser2扩展webbrowser的功能。
该接口派生于第二个接口。
IWebBrowserIWebBrowser 仅仅是WebBrowser control的最初接口, 提供基本的例如导航web页面的功能。
作为其他派生接口的基础接口,有8个方法和30个属性。
如何在winform中显示office文档
用delphi写的,测试有效,你把语法改下应该能跑:procedure Tfrm_developManage.wb_contentNewWindow2(ASender: TObject;var ppDisp: IDispatch; var Cancel: WordBool);beginif ASender = wb_content thenbeginif Assigned(wb_content2) then FreeAndNil(wb_content2); //创建新的WebBrowser来显示新窗口wb_content2 := TEmbeddedWB.Create(Self);wb_content2.Align := alClient; //把新的WebBrowser 放进Panel容器里pnl2.InsertControl(wb_content2); //给新的WebBrowser 的新窗口事件指定事件处理方法wb_content2.OnNewWindow2 := wb_contentNewWindow2;wb_content2.OnScriptError := wb_content2ScriptError;//关键句 ppDisp := wb_content2.Application;pnl1.Visible := False;pnl2.Visible := True;pnl2.BringToFront;end elsebeginif Assigned(wb_content) then FreeAndNil(wb_content);wb_content := TEmbeddedWB.Create(Self);wb_content.Align := alClient;pnl1.InsertControl(wb_content);wb_content.OnNewWindow2 := wb_contentNewWindow2;wb_content.OnScriptError := wb_content2ScriptError; ppDisp := wb_content.Application;pnl2.Visible := False;pnl1.Visible := True;pnl1.BringToFront;end;end;
如何屏蔽webBrowser打开网页的所有声音
可以通过浏览器控件来设置下载,显示设置和执行的控制权。
为了要得到这些控制,实现宿主的IDispatch接口,使得它处理DISPID_AMBIENT_DLCONTROL。
当浏览器控件被实例化的时候,它将会以这一个ID调用的IDispatch::Invoke。
将pvarResult设置为下列的标识的一个位与的组合,指明的配置。
DLCTL_DLIMAGES , DLCTL_VIDEOS 和 DLCTL_BGSOUNDS: 如果这些标识被设定,图像,视频和背景音乐将会被从服务器下载并且显示或播放,否则将不被下载和显示。
DLCTL_NO_SCRIPTS 和 DLCTL_NO_JAVA: 脚本和Java小程序将不被运行。
DLCTL_NO_DLACTIVEXCTLS 和 DLCTL_NO_RUNACTIVEXCTLS: ActiveX 控件将不被下载或者运行。
DLCTL_DOWNLOADONLY: 网页只将会被下载,不显示。
DLCTL_NO_FRAMEDOWNLOAD:浏览器控件将会下载并且解析框架集页面,但是不会下载和解析框架集中单独的框架。
DLCTL_RESYNCHRONIZE 和 DLCTL_PRAGMA_NO_CACHE: 这些标志导致Internet缓冲的刷新。
通过 DLCTL_RESYNCHRONIZE,服务器将会被请求更新状态。
如果服务器指出缓存信息是最新的,将会使用 缓存文件。
通过DLCTL_PRAGMA_NO_CACHE,不管文件的更新状态如何,文件都会被从服务器重新下载。
DLCTL_NO_BEHAVIORS: 行为不被下载并且在文件中被禁用。
DLCTL_NO_METACHARSET_HTML: 忽略在META元素中指明的字符集。
DLCTL_URL_ENCODING_DISABLE_UTF8 和 DLCTL_URL_ENCODING_ENABLE_UTF8: 这些标志的功能类似于IDocHostUIHandler::GetHostInfo中使用的DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8 和DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8标志。
不同是只有在浏览器控件被初始化的时候,DOCHOSTUIFLAG标志才会被检查。
这里的环境特性变化的下载标志在每当浏览器控件需要运行一个下载时被检查。
DLCTL_NO_CLIENTPULL: 不运行客户端重定位页面操作(译者注:例如 的默认行为)。
DLCTL_SILENT: 在下载期间没有用户界面显示。
DLCTL_FORCEOFFLINE: 浏览器控件总是在脱机模式中操作。
DLCTL_OFFLINEIFNOTCONNECTED 和 DLCTL_OFFLINE: 这些标志是相同的。
如果不连接到英特网,浏览器控件将会在脱机模式中操作。
DISPID_AMBIENT_DLCONTROL和标志的数值是在mshtmdid.h被定义的。
最初,当对IDispatch::Invoke调用开始的时候, pvarResult参数指向的VARIANT是VT_EMPTY类型。
必须为任何有效的设定设置它为VT_I4类型。
可以在VARIANT的lVal成员中存储标志数值。
大部份标志数值有否定的效果,也就是说,他们避免行为正常地发生。
举例来说,如果不自定义浏览器控件行为,那么通常脚本会被执行。
但是如果设定DLCTL_NOSCRIPTS 标志,脚本将不会在控制的那个实例中运行。
然而,三个标志— DLCTL_DLIMAGES , DLCTL_VIDEOS 和 DLCTL_BGSOUNDS的作用正好相反。
必须全部设置标志,使得浏览器控件以它的默认行为执行关于图像,视频和声音的处理。
下列示例代码使得一个浏览器控件实例下载并且显示图像和视频,但是不处理背景音乐,因为DLCTL_BGSOUNDS没有被明确地设定。
浏览器控件显示的页上的脚本运行被禁用。
例子STDMETHODIMP CAtlBrCon::Invoke(DISPID dispidMember, REFIID riid,LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,VARIANT* pvarResult, EXCEPINFO* pExcepInfo,UINT* puArgErr){switch (dispidMember){case DISPID_AMBIENT_DLCONTROL:pvarResult->vt = VT_I4;pvarResult->lVal = DLCTL_DLIMAGES DLCTL_VIDEOS DLCTL_NO_SCRIPTS;break;default:return DISP_E_MEMBERNOTFOUND;}return S_OK;}
c# webBrowser1.Url 中出现乱码怎么解决?
在 Visual C# .NET 中新建一个 Windows 应用程序项目。
默认情况下会创建 Form1。
在工具菜单上,单击自定义工具箱以打开自定义工具箱对话框。
在 COM 组件选项卡上,添加一个对 Microsoft WebBrowser 的引用。
单击确定,将 WebBrowser 控件添加到 Windows 窗体工具箱。
WebBrowser 控件会显示出来,并且在工具箱中带有 Explorer(资源管理器)字样。
使用该工具箱向 Form1 添加一个 WebBrowser 控件、一个 OpenFileDialog 控件和一个 CommandButton 按钮。
这就会向 Form1 类添加 AxWebBrowser1、OpenFileDialog1 和 Button1 成员变量。
在 Form1 上,双击 button1。
这就会向 Form1 添加 Button1_Click 事件。
在 Form1 的代码窗口中,向列表添加以下命名空间:using System.Reflection; 如下所示在 Form1 类中定义一个私有成员:private Object oDocument; 在 Form1 类的 InitializeComponent 方法的末尾,添加以下代码以处理 Form1_Load、Form1_Closed 和 axWebBrowser1_NavigateComplete2 事件:this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2); this.Load += new System.EventHandler(this.Form1_Load); this.Closed += new System.EventHandler(this.Form1_Closed); 将下面的代码private void button1_Click(object sender, System.EventArgs e) { } 替换为: private void button1_Click(object sender, System.EventArgs e) { String strFileName; //Find the Office document. openFileDialog1.FileName = ""; openFileDialog1.ShowDialog(); strFileName = openFileDialog1.FileName; //If the user does not cancel, open the document. if(strFileName.Length != 0) { Object refmissing = System.Reflection.Missing.Value; oDocument = null; axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing); } } public void Form1_Load(object sender, System.EventArgs e) { button1.Text = "Browse"; openFileDialog1.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt" ; openFileDialog1.FilterIndex = 1; } public void Form1_Closed(object sender, System.EventArgs e) { oDocument = null; } public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e) { //Note: You can use the reference to the document object to // automate the document server. Object o = e.pDisp; oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null); Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null); Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null); MessageBox.Show("File opened by: " + oName.ToString() ); } 按 F5 键运行该项目。
单击浏览后,会出现打开对话框,您可以使用该对话框浏览到 Word 文档、Excel 工作表或 PowerPoint 演示文稿。
选择任一文件,然后单击打开。
文档在 WebBrowser 控件内打开,并出现一个显示有 Office 文档服务器名称的消息框。
转载请注明出处51数据库 » webbrowser显示word