Welcome
to Genghis
Genghis is a set of extensions built on top of .NET and integrated with WinForms
to provide application-level services in the same flavor as the Microsoft
Foundation Classes. Genghis gets its name as the functional heir to
Attila, a similar set of functionality built on top of ATL.
Disclaimer
Most of the Genghis classes were built by different folks and while every effort
was made to keep things consistent by choosing .NET and WinForms design
techniques, everyone does things their own way.
This work is the work of the individuals involved and does not represent any
contribution of their respective employers. You are under no obligation to use
any of Genghis at any time, but if you do, you are required to
abide by the License.
Installation
You can
download the latest Genghis source code from here. The Genghis
archive includes this page, the source code to the Genghis class
library, a series of samples showing off the various classes and a
pre-built, signed version of genghis.dll in the redist folder. Notice
that some of the samples use the Genghis files directly instead of using
the compiled Genghis assembly. Either usage is supported by Genghis
(except where it drives the WinForms Designer nuts).
Source Code Control
Genghis source code control has been moved to
the Genghis CodePlex workspace. Thanks to
GotDotNet and
Rob MacFadyen for hosting
the previous versions.
Building Genghis
Genghis is written in C#. Building Genghis requires Visual C# or
Visual Studio.NET.
Visual Studio.NET solution and project files (*.sln and *.csproj)
are provided to build Genghis and all the samples. You should be able
to load any solution file into Visual C#/Visual Studio.NET and build
the project for yourself.
A NAnt build script (Genghis.build) is also provided. It is used to
make the snapshot for Genghis, and is not designed for general use.
You may wish to use this file to simulate the snapshot build
process; please be aware that you will not be able to properly sign
the release mode Genghis DLL (the private key is not provided in
this distribution).
For Visual Studio.NET related build issues, please contact the
Off Topic
Windows mailing list. This is where the Genghis contributors have
their discussions, and most of them will be familiar with Visual
Studio.NET builds of Genghis.
If you have NAnt related build issues, you should contact
Mike Marshall (the
Genghis build master) directly.
Thanks to
Brad Wilson for the NAnt build scripts for folks without VS.NET.
Bug Reports
Bugs will now be kept in
the Bug Tracker section of the GDN Workspace.
Please do not send Chris Sells or any of the other contributors personal email
complaining about Genghis. Also please do not post Genghis bug reports to any
mailing list. A much better way to contribute to the life of Genghis is to
submit the fix along with the bug report.
Submission Guidelines
-
Submissions should be in the Genghis namespace (I don't think we'll have to
worry about collisions... : ).
- Submissions should be single-file and
stand-alone as much as possible. The goal is that Genghis can be built as a DLL
and used as a whole or that bits of its source can be pulled into individual
projects as needed ala atl.dll vs. atlwin.h.
- All code should be commenting
using C# doc comments so that docs can be generated via Tools->Generate
Source Comments.
- All source code files should include the
copyright and license notice.
- All code shall be set to use
spaces, not tabs, and a vanilla coding style.
- When hacking on existing code,
thou shall conform to the existing coding standard of the file. Many coding
standards are readable, but not when mixed.
The Genghis Group
This group is made up of official Genghis
contributors:
Who Does What
If you'd got something you'd like to see contribute
to Genghis,
please let me know (multiple people are free to collaborate on a single
feature).
Note: Anything marked with "sample"
means that there's a sample included with Genghis that shows the current
implementation of a feature but that it's not done enough to be part of the
official Genghis component. Mostly the hold-up is integration with the WinForms
Designer.
Documentation
The Genghis documentation is composed of the C# documentation comments as part
of the automated build. Check redist\Genghis.chm for the latest.
SimplePad
SimplePad is
an MFC application that should serve as a simple baseline for what
Genghis should enable to be built easily. We currently need a raw WinForms
implementation to help guide the Genghis development efforts. After building
it, use Help->Help Topics to see the list of features that the MFC SimplePad
application provides straight out of the wizard (also duplicated here):
-
MDI application
- Multiple documents
- Multiple views per document that are
updated as the document changes
- "Dirty" bit handling
- Title bar that shows
the document with the current focus along with a dirty indicator, i.e. the
asterix.
- File New, Open, Save, Save As, Exit and MRU
- MDI Window menu
- Separate
icons for the application and the documents
- Association of the icons with
the documents in the shell
- Dockable, floating toolbar
- Print, Print
Preview, Print Setup
- Edit Undo, Cut, Copy and Paste.
- View Toolbar and
Status bar
- Help Topics and About
- Context-sensitive help
- Status bar
that updates when menu items or toolbar items are in "focus", as well as
showing NUM, SCROLL and CAPS as these keys change. Since Microsoft has shown
that no one looks at the status bar much, the auto-update as items come into
focus is not a feature that needs to be duplicated in WinForms/Genghis.
- Command
line launching of the application based on the application's file extension
- Drag-n-drop
from the file explorer
- Double-click support from the file explorer (including
routing open requests to a currently open application)
The current .NET implementation of SimplePad is now available as one of the
Genghis samples. Thanks to Paul
Bartrum and Chris Burrows
for all their hard work on this!
History
-
03/09/04: Release v0.5:
-
New HtmlLinkLabel class from
Jeff Key that
knows how to launch IE and EXEs directly w/o requiring
you to handle the event
-
Much prettier images in SimplePad from
Chris Burrows
-
Updated MRU code from Michael Weinhardt
to match .NET event signature conventions and to fix a
problem when using more than one MRU components on a
single menu
-
Updated FileSearchEngine code from
Mike Marshall to check for
whole words at beginning and end of line correctly
-
Updated validation code from Michael Weinhardt
with support for validating controls at a container
level, e.g. validating controls on a tab instead of on
an entire form
-
New gradient progress bar from
Mike Marshall
-
Updated FileDocument from
Chris Sells
to match text of
Windows Forms Programming to include more MFC-like
features like a pluggable scheme for serialization
handling, registration of document extension with the
shell, and adding to recent docs, i.e. Start->Documents
-
Updated HandleCollector from
Ethan
Brown to work with .NET 1.0 and .NET
1.1
-
Performance enhancements from
Ethan
Brown in the MappedDrives and
SystemShares classes
-
New user-resizable panel from Ethan
Brown
-
Updated WebCommandLineHelper from Andrew Duncan to fix
System.IO.FileLoadException in ieexec.exe
-
Updated AniForm from
Mike Marshall to support
stacking ala SharpReader and fix a terminal
server-related bug
-
Updated cool menu sample from
Chris Burrows
with additional support for abstracting commands from
click even handlers
-
4/25/03: Release v0.4:
-
Everything tested under VS.NET 2002 & 2003 (except HandleCollector, which
doesn't work under VS.NET 2003)
-
Mike Marshall's AniForm -an MSN Messanger-style popup window
- Chris Burrows'
Image Index Editor - a UI Type Editor for use with ImageList index selection
- Dean
Cleaver's .NET AppBar implementation (a C# port of original code from Jeffrey
Richter)
- Mike Marshall's File Search Engine: a text file search
implementation with behavior similar to dev studio's "Find In Files"
- Matthew
W. Adams' et. al. Themed controls
- Chris Sells's InitialInstanceActivator.
The InitialInstanceActivator makes sure that only one instance of an
application is started and when another instance is started, the first instance
is passed the command line arguments passed to the initial instance
- Chris
Sells's MultiSdiApplicationContext class for allowing multiple top-level
Windows Forms
- Peter Stephens' changes to the CommandlineParser that fix some
bugs as well as add the ability to skip the first argument
- Matt Berther's
additions to the CompletionComboBox to fire an event when the text typed does
not match any items in the dropdown
- Peter Foreman's splash screen
implementation
- Chris Sells's newly improved WebCommandLineHelper class which
now works with .NET 1.0 and 1.1, includes URL decoding and requires no
additional permissions (although it does require a server-side HTTP handler,
included as the ConfigFileHandler class that maps requests for
foo.exe?bar=quux.config to the foo.exe.config file).
- Shawn Wildermuth's
WizardSheet updates
- Chris Sells's Status Bar Extender for mapping status
messages to Windows Forms controls
- Andre Van Der Merwe's CommandLineParser
changes as described below:
-
Added ValueDelimiters: enum for ValueUsageAttribute which lets the user specify
which (combination) of delimiters (space, : or =) will be allowed
- Added
AllowOnOff: bool in FlagUsageAttribute to specify if a +/- suffixes can be used
on the flag
- Added EnvironmentDefaults: string in ParserUsageAttribute,
allows the user to specify defaults in an environment variable (ala DIRCMD).
- Modified
the Long&Short help generation functions to
-
Format/pad flag/param names correctly regardless of length
- Show [+|-] prefix
(if applicable) for flags
- Show [sp|:|=] delimiters (as applicable) for values
-
08/18/02: Release v0.3:
-
Screen shots for everything.
- CVS repository available, as provided by
our rmTrack sponsor, along with extensive CVS docs from
Brad Wilson.
- MRU support from Michael
Weinhardt, including both in-menu and sub-menu support.
- A much more
robust set of validation components from Michael
Weinhardt
(Michael's been busy : ) modeled along the lines of the ASP.NET validation
components, including required, regex, range and comparison validators.
- FileDocument
component from Chris Sells
for document/dirty bit handling.
- Wizard support from
Shawn Wildermuth, including changing page groups on the fly!
- Custom
state treeview from Chris Sells
so that you can set and show all three checkbox states.
- A class to expose the
WinForms HandleCollector from Ethan
Brown
so that you can put your own custom resources into it.
- A Screen Saver class from
Shawn Van Ness.
- A bunch of file utility classes from
Ethan Brown, including retrieving mapped drives, retrieving shares
and path resolution b/w UNC, local (including SUBST, etc).
- A cursor changer
class that works with the using block by
Shawn Wildermuth.
- A WebCommandLineHelper class from
Chris Sells
to parse command line arguments from the URL used to launch href-exes.
- Update to
the FileNameDialog from Deepak Shenoy to
include newish flags.
-
6/10/02: Release v0.2:
-
Updated ListViewSorter to be declarative. Look for Designer support ASAP.
- Generated
new genghis.key and removed it from the distribution.
- Brad Wilson, our new
Build Master, contributed a Nant build.
- Paul Bartrum and Chris Burrows
contributed a mostly-complete .NET implementation of SimplePad, along with some
sample command updating and cool menus implementations.
- Paul Bartrum also
provided a window serializer and a preference class.
- Michael Weinhardt
contributed an MRU sample.
- I contributed a custom state treeview useful for
things like tri-state checkboxes.
- Minor bug fixes.
-
4/3/02: Released v0.1.
- 2/28/02: Set the license.
- 2/16/02: Posted this page.
Sponsors

rmTrack provided the initial hosting space and administration support for
Genghis bug tracking and source code control.
Copyright © 2002-2004 The Genghis Group
Th is software is provided 'as-is', without any express or implied warranty. In
no event will the authors be held liable for any damages arising from the use
of this software.
Permission is granted to anyone to use this software for any purpose, including
commercial applications, subject to the following restrictions:
-
The origin of this software must not be misrepresented; you must not claim that
you wrote the original software. If you use this software in a product, an
acknowledgment in the product documentation is required, as shown here:
Portions copyright © 2002-2004 The Genghis Group (http://www.genghisgroup.com/).
- No substantial portion of the source code of this library may be
redistributed without the express written permission of the copyright holders,
where "substantial" is defined as enough code to be recognizably from this
library.
License Note
This license based on
the open source zlib/libpng license. The idea was to keep the license
as simple as possible to encourage use of Genghis in free and commercial
applications and libraries, but to keep the source code together and to give
credit to the Genghis contributors for their efforts. While this license allows
shipping Genghis in binary form, if shipping a Genghis variant is the sole
purpose of your product, please contact
The Genghis Group for a new license.