Monthly Archives: September 2012

poster the poster !


In 2001, I have assisted the event where MS guys and kids presented the .NET Framework. Amazing.

The entire application is available at

2 new features : multiple selection and clipboard / and serialization !

Now, I can select multiple elements (with the SHIFT key) and make a right click to have clipboard support. The feature of copy/paste is very usefull.

Another feature is the XML serialization. I can load and save XML diagram with the boost::serialization.

Managing the Gdi+ drawing context

For drawing stuff, I rely on Gdi+ which is easier to use for advanced graphics rather than Gdi. Transformation and scaling operations are provided with appropriate methods.

#pragma once
#include "Element.h"

class CDrawingContext
// Drawing Attributes are built in the ctor
CDrawingContext(std::shared_ptr<CElement> pElement);
virtual ~CDrawingContext(void);

Graphics * GetGraphics() { return m_pGraphics; }
// Methods for Drawing Attributes
Color & GetColorWhite() { return m_gdiColorWhite; }
Color & GetColorBlack() { return m_gdiColorBlack; }
Color & GetColorLine() { return m_gdiColorLine; }
Color & GetColorFill() {     return m_gdiColorFill; }
Pen & GetPenBlack() { return m_gdiPenBlack; }
Pen & GetPenColor() { return m_gdiPenColor; }
SolidBrush & GetBrushColor() { return m_gdiBrushColor; }
SolidBrush & GetBrushBlack() { return m_gdiBrushBlack; }
LinearGradientBrush & GetGradientBrushColor() { return m_gdiGradientBrush; }
CPoint GetTopLeft() { return m_pointTopLeft; }
CPoint GetBottomRight() { return m_pointBottomRight; }

Graphics * m_pGraphics;

// GDI+ Drawing objects
Color m_gdiColorWhite;
Color m_gdiColorBlack;
Color m_gdiColorLine;
Color m_gdiColorFill;
Pen m_gdiPenBlack;
Pen m_gdiPenColor;
SolidBrush m_gdiBrushColor;
SolidBrush m_gdiBrushBlack;
LinearGradientBrush m_gdiGradientBrush;

// MFC Drawing objects
CPoint m_pointTopLeft;
CPoint m_pointBottomRight;

#include "StdAfx.h"
#include "DrawingContext.h"

CDrawingContext::CDrawingContext(std::shared_ptr<CElement> pElement)
: m_gdiPenBlack(Color(255, 0, 0, 0)),
m_gdiPenColor(Color(255, 0, 0, 0)),
Point(pElement->m_rect.left, pElement->,
Point(pElement->m_rect.right, pElement->m_rect.bottom),
m_gdiColorLine.SetValue(Color::MakeARGB(255, GetRValue(pElement->m_colorLine), GetGValue(pElement->m_colorLine), GetBValue(pElement->m_colorLine)));
m_gdiColorFill.SetValue(Color::MakeARGB(255, GetRValue(pElement->m_colorFill), GetGValue(pElement->m_colorFill), GetBValue(pElement->m_colorFill)));
m_pointTopLeft = pElement->m_rect.TopLeft();
m_pointBottomRight = pElement->m_rect.BottomRight();

Color color1(255, 241, 247, 255);
m_gdiGradientBrush.SetLinearColors(color1, m_gdiColorFill);



Using Boost for XML serialization

In UltraFluid, I add a feature that enable users to save and load diagrams as XML files. The jobs is done using boost 1.51 and its inner library called boost::serialization. It took me some time to adopt the library but is ok now. I made a clone of my objects with only C++ types because boost cannot handle my MFC types like CRect of CPoint. My XML document is a simple: vector<boost::shared_ptr<CSimpleShape> > m_shapes;

I have just transferred my own data type to the boost data type. To avoid namespace collision, I have put std:: prefix on every shared_ptr of my program. The problem is now that I handled two versions of STL in my applications. I should find a solution to use only boost STL.