Thanks to Cody for the following answer to my post

http://mono.1490590.n4.nabble.com/Embedding-an-IE-Window-td4662025.html

I decided to tackle the problem from a slightly different angle. If my app
was running on Windows then embed IE as the web browser, and if I was
running Linux then embed WebKit. Below is my undocumented code that I wrote
in #Develop (Windows 7) and tested on openSUSE 13.1

My main references for this project are:

http://shana.worldofcoding.com/en/browser.html
https://github.com/bratsche/gtkie

I hope that others find this code of use.

Chris

TWGTKWeb.cs (wrapper for IE and WebKit)
#############################

/*
 * Created by SharpDevelop.
 * User: Chris
 * Date: 04/03/2014
 * Time: 13:43
 * 
 * To change this template use Tools | Options | Coding | Edit Standard
Headers.
 */
using System;
using System.Windows.Forms;
using Gtk;
using WebKit; //Add reference to project, set "Aliases" to global and "Copy
Local" to false (webkit-sharp.dll).

//http://shana.worldofcoding.com/en/browser.html
//https://github.com/bratsche/gtkie

namespace TottleWare.LinuxGUI.WebBrowser
{
        public class TWWebBrowserIE
        {
                [System.Runtime.InteropServices.DllImportAttribute("user32.dll",
EntryPoint = "SetParent")]
                internal static extern System.IntPtr
SetParent([System.Runtime.InteropServices.InAttribute()] System.IntPtr
hWndChild, [System.Runtime.InteropServices.InAttribute()] System.IntPtr
hWndNewParent);

                public System.Windows.Forms.WebBrowser wb = null;
                public Gtk.Socket socket = new Gtk.Socket();

                public void InitIE(Gtk.Window w)
                {

                        wb = new System.Windows.Forms.WebBrowser ();
                        wb.Height = 600;
                        wb.Width  = 600;

                        w.Add (socket);
                        socket.SetSizeRequest(600, 600);
                        socket.Realize();
                        socket.Show();

                        var browser_handle = wb.Handle;
                        IntPtr window_handle = (IntPtr) socket.Id;
                        SetParent(browser_handle, window_handle);
                }

                public void Navigate(string uri)
                {
                        wb.Navigate(uri);
                }

                public TWWebBrowserIE(Gtk.Window w)
                {
                        InitIE (w);
                }
    }

        
//=======================================================================

    public class TWWebBrowserWK
    {
        public WebView wb = null;
        public ScrolledWindow scrollWindow = new ScrolledWindow();

        public void InitWebKit(Gtk.Window w)
        {
            wb = new WebView();
            scrollWindow.Add(wb);
            w.Add(scrollWindow);
            w.ShowAll();
        }

        public void Navigate(string uri)
        {
            wb.Open(uri);
        }

        public TWWebBrowserWK(Gtk.Window w)
        {
            InitWebKit(w);
        }
    }

   
//=======================================================================
}


Program.cs (main program)
##################

/*
 * Created by SharpDevelop.
 * User: Chris
 * Date: 04/03/2014
 * Time: 13:43
 * 
 * To change this template use Tools | Options | Coding | Edit Standard
Headers.
 */
using System;
using Gtk;
using TottleWare.LinuxGUI.WebBrowser;

namespace TestWeb
{
        public partial class MainWindow: Gtk.Window
        {
                protected virtual void Build ()
                {
                        this.Name = "MainWindow";
                        this.WindowPosition = ((global::Gtk.WindowPosition)(1));
                        if ((this.Child != null)) {     this.Child.ShowAll (); }
                        this.DefaultWidth = 976;
                        this.DefaultHeight = 667;
                        this.Show ();
                        this.DeleteEvent += new global::Gtk.DeleteEventHandler
(this.OnDeleteEvent);
                }
                
                public MainWindow () : base (Gtk.WindowType.Toplevel)
                {
                        dynamic web;
                        Build ();
                        
                        if (Environment.OSVersion.Platform.ToString() == 
"Unix") { web = new
TWWebBrowserWK(this); }
                        else { web = new TWWebBrowserIE(this); }
                        
                        web.Navigate("http://www.cardiff.ac.uk";);
                }
                
                protected void OnDeleteEvent (object sender, DeleteEventArgs a)
                {
                        Application.Quit ();
                    a.RetVal = true;
                }
        }

                        
        class Program
        {
                [STAThread]
                public static void Main(string[] args)
                {
                        Application.Init ();
                        MainWindow win = new MainWindow ();
                        win.Show ();
                        Application.Run ();
                }
        }
}



--
View this message in context: 
http://mono.1490590.n4.nabble.com/Webkit-GTK-For-Windows-tp4661981p4662118.html
Sent from the Mono - Gtk# mailing list archive at Nabble.com.
_______________________________________________
Gtk-sharp-list maillist  -  Gtk-sharp-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/gtk-sharp-list

Reply via email to