用Visual C#打造多页面网页浏览器
http://tech.ddvip.com 2006年08月02日 社区交流
本文详细介绍用Visual C#打造多页面网页浏览器
注意,每一个WebBrowser控件都有一个tag,我定义成一个简单的class,它用来包含一些该控件相关的独有信息。请看:
public class HE_WebBrowserTag
{
public int _TabIndex = 0;
public bool _CanBack = false;
public bool _CanForward = false;
}
三、实现“查找”、“查看页面源文件”、“选项”对话框等功能
注意 本例程中使用了一个未公开的GUID,其在将来的系统中可以发生变更。
1、定义 IOleCommandTarget 接口
为定义一个.NET接口以获得关于一个COM接口的参考,请遵从下列步骤:
1) 赋予.NET接口相应的COM接口的GUID值;
2) 包含对接口中所有方法的类型声明;
3) 包含对Mshtml.dll和Shdocvw.dll文件的参考,在Visual C# .NET工程中操作,请遵从:
A. 在项目菜单下单击“添加引用”;
B. 单击“COM” 选项卡;
C. 双击“Microsoft HTML Object Library” 和“Microsoft Internet Controls”。
4) 应该在程序命名空间声明之前,包含下面的接口声明以添加对Microsoft HTML (MSHTML) IOleCommandTarget接口的参照引用:
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
public struct OLECMDTEXT
{
public uint cmdtextf;
public uint cwActual;
public uint cwBuf;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=100)]public char rgwz;
}
[StructLayout(LayoutKind.Sequential)]
public struct OLECMD
{
public uint cmdID;
public uint cmdf;
}
// IOleCommandTarget的Interop定义
[ComImport,
Guid("b722bccb-4e68-101b-a2bc-00aa00404770"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleCommandTarget
{
//重要: 下面方法的顺序非常重要,因为本示例中我们使用的是早期绑定,详见MSDN中有关.NET/COM互操作的参考。
void QueryStatus(ref Guid pguidCmdGroup, UInt32 cCmds,
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] OLECMD[] prgCmds, ref OLECMDTEXT CmdText);
void Exec(ref Guid pguidCmdGroup, uint nCmdId, uint nCmdExecOpt, ref object pvaIn, ref object pvaOut);
}
作者:朱先忠 责编:豆豆技术应用