zoukankan      html  css  js  c++  java
  • 用Visual C#打造多页面网页浏览器_2

      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);
    }

      2、为CGID_IWebBrowser定义一个GUID

      必须定义CGI_IWebBrowser的GUID以通知MSHTML如何来处理你的命令ID。在.NET中实现如下:

    private Guid cmdGuid = new Guid("ED016940-BD5B-11CF-BA4E-00C04FD70816");
    private enum MiscCommandTarget { Find = 1, ViewSource, Options }

      3、调用Exec()方法

      注意,下列三个过程成功调用Exec()的前提是,已经存在名为webBrowser的浏览器控件的被包容实例。

    private mshtml.HTMLDocument GetDocument()
    {
     try
     {
      mshtml.HTMLDocument htm = (mshtml.HTMLDocument)axWebBrowser2.Document;
      return htm;
     }
     catch
     {
      throw (new Exception("不能从WebBrowser控件中获取文件对象"));
     }
    }

    //查看源码的方法

    public void ViewSource()
    {
     IOleCommandTarget cmdt;
     Object o = new object();
     try
     {
      cmdt = (IOleCommandTarget)GetDocument();
      cmdt.Exec(ref cmdGuid, (uint)MiscCommandTarget.ViewSource,
    (uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
     }
     catch(Exception e)
     {
      System.Windows.Forms.MessageBox.Show(e.Message);
     }
    }

    public void Find()
    {
     IOleCommandTarget cmdt;
     Object o = new object();
     try
     {
      cmdt = (IOleCommandTarget)GetDocument();
      cmdt.Exec(ref cmdGuid, (uint)MiscCommandTarget.Find,
    (uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
     }
     catch(Exception e)
     {
      System.Windows.Forms.MessageBox.Show(e.Message);
     }
    }

    //显示“选项”对话框的方法

    public void InternetOptions()
    {
     IOleCommandTarget cmdt;
     Object o = new object();
     try
     {
      cmdt = (IOleCommandTarget)GetDocument();
      cmdt.Exec(ref cmdGuid, (uint)MiscCommandTarget.Options,
    (uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
     }
     catch
     {
      // 注意:因为该过程相应的CMDID是在Internet Explorer处理
      // ,所以此处的异常代码块将总被激活,即使该对话框及其操作成功。
      //当然,你可以通过浏览器选择设置来禁止这种错误的出现。
      //不过,即使出现这种提示,对你的主机也无任何损害。
     }
    }

      四、总结

      本文通过C#编例,详细介绍如何实现一种多页面浏览程序的基本原理。欢迎同仁批评指正。 另外,本文所附源程序在Windows 2000/.Net 2003/Internet Explorer 6平台上调试通过。
  • 相关阅读:
    现代软件工程 第一章 概论 第4题——邓琨
    现代软件工程 第一章 概论 第9题——邓琨
    现代软件工程 第一章 概论 第7题——张星星
    现代软件工程 第一章 概论 第5题——韩婧
    hdu 5821 Ball 贪心(多校)
    hdu 1074 Doing Homework 状压dp
    hdu 1074 Doing Homework 状压dp
    hdu 1069 Monkey and Banana LIS变形
    最长上升子序列的初步学习
    hdu 1024 Max Sum Plus Plus(m段最大子列和)
  • 原文地址:https://www.cnblogs.com/King0502/p/2019381.html
Copyright © 2011-2022 走看看