牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

如何对webbrowser和IE编程(二)

调用 Navigate 方法比GoBack 以及 GoForward  要困难,但如果你正仅仅导航到URL 且并不传递任何附加参数, 它的调用很容易。 举例来说, VB中导航到 Microsoft 主页, 可如下:

WebBrowser1.Navigate "http://www.microsoft.com"

VB代码调用Navigate 如此容易因为所有参数出第一个参数外都可以是可选. 如此相对照,VC++不可以省略任何参数. 如果你想使用VC++不是勇任何特别的参数导航到 Microsoft的 home page, 你必须传递空的VARIANT 结构。 MFC 应用程序,你必须如下调用 Navigate

COleVariant vtEmpty;

m_webBrowser.Navigate(_T(
"http://www.microsoft.com"), &vtEmpty, &vtEmpty, &vtEmpty, &vtEmpty);

该例子展示了在MFC应用程序中控制WebBrowser控件. 我传递一个普通的字符串而替代 BSTR 因为 MFC 提供了一个 WebBrowser 控件的包装类,第一个载包装类中是LPCTSTR, 一个普通的字符串. 其他参数为指向 VARIANT 结构的指针。 如果你不想指定任何特别的参数, 别仅仅传递 NULL —那样做, 你的应用程序会招来崩溃。你必须传递一个空的VARIANT 结构的指针. 前面的代码使用了 COleVariant 类, 那是一个与 CComVariant 类相似的类COleVariant 简单包装了 VARIANT 使得VARIANT 结构易于使用.

属性 现在你看到了所有的 IwebBrowser 的方法,你大概向了解其属性。(我是不是太苛求了?)  IWebBrowser 接口有30个属性,描述于表6-2. 我一已按照IWebBrowser  的Vtable中的字母序列出。

Table 6-2. IWebBrowser 属性按照vtable排序

属性

 

描述

 

Application

 

返回宿主 WebBrowser 控件的自动化对象 (IDispatch) 实现,如果对象不可用,则返回的 WebbOrwser 控件的自动化对象

 

Parent

 

返回 WebBrowser 控件的父控件的自动化实现 (IDispatch) ,通常是容器 举例来讲 , ,您的宿主或者 Internet Explorer 窗口。

 

Container

 

返回 WebBrowser 控件容器的自动化对象 (IDispatch) 。通常,该值返回同 Parent 属性一样的值。 .

 

Document

 

返回活动文档的自动化实现 (IDispatch) 。如果 HTML 当前显示在 WebBrowser Document 属性给出你存取 DHTML 对象模型的途径 .

 

TopLevelContainer

 

返回一个布尔值指示 IE 是否是 WebBRowser 控件的顶级容器。在 words 中,如果 IE 是宿主应用承需则返回 true

 

Type

 

返回已经在 WebBrowser 中装载的对象的类型。举例,如果 HTML document 被装载 , Type 将返回 Microsoft HTML Document 5.0 . 如果文档是 Word 文档 , Type 返回 Microsoft Word Document .

 

Left

 

. 返回或设置控件在容器窗口左边距

 

Top

 

. 返回或设置控件在容器窗口顶部边距

 

Width

 

返回或设置 webbrowser 控件在窗口中的水平方向的向苏为单位宽度

 

Height

 

返回或设置 webbrowser 控件在窗口中的处置方向的向像素为单位高度

 

LocationName

 

返回一个 WebBrowser 当前显示的资源名称的字符串 ( 换句话讲 , HTML , Word 文档 , folder, 诸如此类 ) 如果资源是 HTML 页,字符串是标题。如果资源是文件或者文件夹,字符串为文件名或者文件夹名。 举例 , foo.doc Word 文档)或者   Temp temp directory.

 

LocationURL

 

返回 WebBrowser 正在显示的资源的 URL

 

Busy

 

返回一个布尔值指示 WebBrowser 当前是否正在装入 URL. 。如果当前属性返回 true , 你可以使用 Stop 方法取消代掉导航。

 

看完表 6-2, 清晰展示了你可使用的属性. 当中的一些可能需要更多的解释. IWebBrowser 使用的相当多的一个属性是 LocationURL, 给出了当前你装入WebBrowser窗口的 URL。 获取 LocationURL 值在VB中相当容易:

Dim strLocation

strLocation 
= WebBrowser1.LocationURL

Visual C++的MFC应用,  MFC 包装类使的访问LocationURL 很容易. 你简单调用 GetLocationURL 方法,该方法返回一个 CString 对象. 当你想在自动化IE中或者webBrowser的MFC应用中访问 LocationURL when automating Internet Explorer or when hosting the WebBrowser control in a C++ application that's not built by using MFC, 你必须调用携带一指向BSTR的指针BSTR 将包含返回值. 此处展示如何在 C++中使用:

BSTR bstrURL;

m_pInternetExplorer
->get_LocationURL(&bstrURL);

 

存取 Document 属性在VB中相当容易,当定义一个变量后(举例, HtmlDoc), 值需要 set 为 Document 属性:

Set HtmlDoc = WebBrowser1.Document

MFC 中也很容易,使用 MFC 包装类的GetDocument方法:

IDispatch* pDisp;

pDisp 
= m_webBrowser.GetDocument();
GetDocument 返回指向代表文档 IDispatch 接口的指针. 如果 GetDocument 失败, 该对象将为NULL.

MFC C++ 应用或者任何自动化IE的C++ 应用访问Document 属性就只能够采用调用COM的方法—通过属性的get_方法. (注艺属性实只读,所以这里无put_ 方法.) 当调用 Document  get_ 方法,你传递一个接受 IDispatch 的指针.此处展示了如何调用:

IDispatch* pDisp;
HRESULT hr 
= m_pInternetExplorer->get_Document(&pDisp);                    

当使用这些代码,你可以使用 SUCCEEDED 宏( Win32 API的一部分), 以监测调用是否成功。在尝试使用Idispatch接口前你应当确信调用成功。

posted on 2006-06-23 21:40 杨粼波 阅读(1082) 评论(0)  编辑 收藏 引用 所属分类: Windows编程


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理