* System.Windows.Forms
- Currently Windows.Forms support is not finished.
+ <p>Currently Windows.Forms support is under heavy development. Check Mono's <a
+ href = "http://www.go-mono.com/mono-roadmap.html">Roadmap</a> for more
+ details on when it is going to be available.
+
+ <p>System.Windows.Forms in Mono is implemented using System.Drawing. All controls
+ are natively drawn through System.Drawing. System.Windows.Forms implements it's own
+ driver interface to communicate with the host OS windowing system. Currently,
+ we have a driver for Win32 and a driver for X11.
+ The drivers translate the native window messages into WndProc compatible messages,
+ to provide as much compatibility with native .Net as possible.
+
+ <p>In terms of integrating visually with the desktop, we have a (still incomplete)
+ themeing interface, currently with a classic Win32 theme and a Gtk theme.
+
+ <p>The current implementation is still very incomplete, with several large controls
+ (Edit, ListBox, ComboBox, Menus), etc, still being developed. It is too early to
+ file bugs if you cannot compile or run a certain application because of controls
+ missing.
- The System.Windows.Forms effort is taking two paths:
+* Why not use Wine?
<ul>
- <li>Win32/Wine-based: This effort will use the Win32
- API, and use a stub program to run the with Wine.
- This allows applications that use P/Invoke to
- function, and event delivery through the Wndproc
- method to work for the most advanced and custom
- applications. This is the path of best compatibility.
-
- Also, work on a Gtk-based rendered for Wine will be
- done, to make the user interface integrate with your
- desktop look.
-
- <li>Gtk# based: This effort will build a subset of
- Windows.Forms that uses Gtk#. This gives a better
- integration with the desktop, but will not be
- completely compatible with the Windows edition. In
- particular code that uses P/Invoke to call into Win32
- or overwrite the Wndproc method to achieve special
- effects will not work.
+
+ <li>Debugging with Wine was extremely hard, and Wine was a moving target,
+ some of the calls we relied on changed from release to release.
+ <li>Wine/GDI+ interactions were not efficient.
+ <li>Too many cooks contributed to the core, so it was hard to maintain.
+ <li>To many dependencies on install, many people where having problems getting
+ the very strict winelib requirements right.
+
</ul>
-* Win32/Wine edition.
-
- To get the Windows.Forms support working, you need a Mono
- installation from CVS, and you need to install Wine plus the
- <a href="http://www.openlinksw.com">OpenLink patch</a>, and
- define the environment variable "SWF" (export SWF=1 from your
- shell). For more information, see the <a
- href="http://www.nullenvoid.com/mono/wiki/index.php/MonoWinePackages">Mono
- Wine Packages</a> page in the Mono Wiki.
-
- <table>
- <tr>
- <td>
- System.Windows.Forms is currently being implemented using the
- Win32 API, we will be using <a
- href="http://www.winehq.com">WineLib</a> on Unix systems to
- emulate the Win32 API.
-
- This means that those who want to contribute to the effort can
- develop and test classes today using Windows and P/Invoke
- calls to Win32 and we will then just run the result on Unix.
-
- In terms of integrating visually with the desktop, we are
- hoping to contribute to the Wine project an mechanism to make
- it use the Gtk+ themes on X11 and Cocoa on MacOS to render the
- widgets, and get the native look and feel on each of these
- platforms.
- </td>
- <td>
- <a href="images/WINESWF.JPG"><img src="images/WINESWF-mini.JPG"></a>
- </td>
-
- </table>
+ The driver interface should allow us to also create a Wine based driver for
+ System.Windows.Forms, to support applications performing Win32 P/Invokes, but
+ for now this is not a priority.
-* Gtk# based
- The code is contained in CVS.
+* Installation
- There are no current plans to support embedded devices, but
- Gtk/FrameBuffer is an option. If you have suggestions or
- recommendations, please let us <a
- href="mailto:mono-hackers-list@ximian.com">let us know</a>
+ <p>To get the Windows.Forms support working, you need:
+
+ <ul>
+
+ <li> The latest <a href = "http://www.go-mono.com/download.html">Mono</a> package.
+ <li> The latest <a href = "http://www.go-mono.com/download.html">libgdiplus</a> library.
+ <li> The latest <a href = "http://www.cairographics.org/download">Cairo</a> vector graphics library.
+
+ </ul>
+
+ The current source of System.Windows.Forms resides in mcs/class/Managed.Windows.Forms.
+ The previous version of System.Windows.Forms, based on Wine, still can be found in
+ mcs/class/System.Windows.Forms, but it is no longer being worked on.
+
+ <p>To use the latest version, go into Managed.Windows.Forms and issue a 'make clean',
+ followed by a 'make install'. Afterwards, the new implementation should be available
+ in the GAC for your use.
* Contributing
- The Winforms effort is being coordinated in the <a
- href="mailto:mono-winforms-list@ximian.com:.com">mono-winforms-list@ximian.com</a>.
+ <p>The Winforms effort is being coordinated in the <a
+ href="mailto:mono-winforms-list@ximian.com">mono-winforms-list@ximian.com</a>.
If you are interested in helping out with this effort,
subscribe to it by sending an email message to <a
- href="mailto:mono-winforms-list-request@ximian.com:.com">mono-winforms-list-request@ximian.com</a>.
-
- If you want to help, you can start by writing a control and
- testing it with Windows today (or you can also try to build
- the existing library on Linux, but this is a bit more
- complicated).
-
- See the file mcs/class/System.Windows.Forms/CheckOutList for
- details on who is working on which class.
-
- Please read the README document in the
- System.Windows.Forms/WINElib directory for details about how
- to build the Windows.Forms support for Mono.
+ href="mailto:mono-winforms-list-request@ximian.com">mono-winforms-list-request@ximian.com</a>.
+
+ <p>If you want to help, you can pick a control and start implementing it's
+ methods. You can do this either on Windows or on Linux. All controls must be drawn
+ using System.Drawing calls, tied into the themeing interface, and not stubbed.
+
+ <p>If you choose a particular control to work on, send a note to the
+ winforms list to avoid duplication of effort.
+
* System.Drawing
- We currently have two code paths: the Wine-based
- System.Drawing and the Cairo-based one. We will eventually
- unify everything to use Cairo, but currently the effort can
- continue with the approach we have.
-
+ <p>For details, see the <a
+ href="drawing.html">System.Drawing implementation notes</a>
+ section of the web site.