using System; using Gtk; using Gdk; using System.Windows.Forms; using System.Drawing; using System.Threading; namespace mwfingtk { class MainClass { public static void Main (string[] args) { Gtk.Application.Init (); Gtk.Window gtkWindow = new Gtk.Window ("Title"); gtkWindow.Add (new NativeContainer (InitializeMWF ().Handle)); gtkWindow.Show (); Thread t = new Thread (Gtk.Application.Run); t.Start (); while (!t.IsAlive) {}; } private static Control InitializeMWF () { Panel p = new Panel (); p.Visible = true; // run the MWF msg loop on a separate thread Thread t = new Thread (System.Windows.Forms.Application.Run); t.Start (); while (!t.IsAlive) {}; p.CreateControl (); while (!p.IsHandleCreated) {} return p; } } public class NativeContainer : Gtk.Container { private IntPtr _childHandle; public NativeContainer (IntPtr childHandle) { _childHandle = childHandle; } protected override void OnRealized () { base.OnRealized (); Gdk.Window.ForeignNew ((uint) _childHandle).Reparent (this.GdkWindow, 0, 0); } } }