diff --git a/Magick++/demo/button.cpp b/Magick++/demo/button.cpp
new file mode 100644
index 0000000..858a48b
--- /dev/null
+++ b/Magick++/demo/button.cpp
@@ -0,0 +1,98 @@
+//
+// Magick++ demo to generate a simple text button
+//
+// Copyright Bob Friesenhahn, 1999, 2000, 2001, 2003
+//
+
+#include <Magick++.h>
+#include <string>
+#include <iostream>
+
+using namespace std;
+
+using namespace Magick;
+
+int main( int /*argc*/, char ** argv)
+{
+
+ // Initialize ImageMagick install location for Windows
+ InitializeMagick(*argv);
+
+ try {
+
+ string srcdir("");
+ if(getenv("SRCDIR") != 0)
+ srcdir = getenv("SRCDIR");
+
+ //
+ // Options
+ //
+
+ string backGround = "xc:#CCCCCC"; // A solid color
+
+ // Color to use for decorative border
+ Color border = "#D4DCF3";
+
+ // Button size
+ string buttonSize = "120x20";
+
+ // Button background texture
+ string buttonTexture = "granite:";
+
+ // Button text
+ string text = "Button Text";
+
+ // Button text color
+ string textColor = "red";
+
+ // Font point size
+ int fontPointSize = 16;
+
+ //
+ // Magick++ operations
+ //
+
+ Image button;
+
+ // Set button size
+ button.size( buttonSize );
+
+ // Read background image
+ button.read( backGround );
+
+ // Set background to buttonTexture
+ Image backgroundTexture( buttonTexture );
+ button.texture( backgroundTexture );
+
+ // Add some text
+ button.fillColor( textColor );
+ button.fontPointsize( fontPointSize );
+ button.annotate( text, CenterGravity );
+
+ // Add a decorative frame
+ button.borderColor( border );
+ button.frame( "6x6+3+3" );
+
+ // Quantize to desired colors
+ // button.quantizeTreeDepth(8);
+ button.quantizeDither(false);
+ button.quantizeColors(64);
+ button.quantize();
+
+ // Save to file
+ cout << "Writing to \"button_out.miff\" ..." << endl;
+ button.compressType( RLECompression );
+ button.write("button_out.miff");
+
+ // Display on screen
+ // button.display();
+
+ }
+ catch( exception &error_ )
+ {
+ cout << "Caught exception: " << error_.what() << endl;
+ return 1;
+ }
+
+ return 0;
+}