181
exUndo, An Undo operation is performed (CTR + Z), exRedo, A Redo operation is performed (CTR + Y). exUndoRedoUpdate, The Undo/Redo queue is updated
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value case (default:value;32:`exUndoRedoUpdate`;33:`exUndo`;34:`exRedo`)",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value case (default:value;32:`exUndoRedoUpdate`;33:`exUndo`;34:`exRedo`)",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();
OutputDebugStringW( L"Press CTRL+Z to Undo, CTRL+Y to Redo" );

180
exLinkObjects, the user creates an element on the surface. The AllowLinkObjects property specifies the keys combination to allow user to link elements on the surface
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 9 ? `exLinkObjects` : value",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 9 ? `exLinkObjects` : value",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->EndUpdate();
OutputDebugStringW( L"Hold SHIFT, click an element, and drag to another element to create a link between them" );

179
exEditObject, the user edits the element's caption
// Click event - Occurs when the user presses and then releases the left mouse button over the control.
void OnClickSurface1()
{
	// ElementFromPoint(-1,-1).Edit(0)
}

// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 8 ? `exEditObject` : value",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 8 ? `exEditObject` : value",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();
OutputDebugStringW( L"Click an element to edit its caption" );

178
exCreateObject, the user creates an element on the surface. The AllowCreateObject property specifies the keys combination to allow user to create elements on the surface
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 7 ? `exCreateObject` : value",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 7 ? `exCreateObject` : value",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing)->PutSelected(VARIANT_TRUE);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();
OutputDebugStringW( L"Double-click on the surface and immediately drag to a new position to create an element" );

177
exSelectNothing, the user clicks an empty zone of the surface. The AllowSelectNothing property specifies the keys combination to allow user to select nothing on the surface
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 6 ? `exSelectNothing` : value",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 6 ? `exSelectNothing` : value",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowSelectNothing(VARIANT_TRUE);
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing)->PutSelected(VARIANT_TRUE);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();
OutputDebugStringW( L"Select an element, and then click outside to select nothing" );

176
exSelectObject, the user clicks the object to get it selected. The AllowSelectObject property specifies the keys combination to allow user to select the object
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 5 ? `exSelectObject` : value",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 5 ? `exSelectObject` : value",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();
OutputDebugStringW( _bstr_t("Hold ALT and click, then drag to select elements within the drawn rectangle. Click an element to select it. CTRL + CLick to uns") +
"elect it" );

175
exMoveObject, the user moves the object. The AllowMoveObject property specifies the keys combination to allow user to move the object
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 4 ? `exMoveObject` : value",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 4 ? `exMoveObject` : value",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();
OutputDebugStringW( L"Move an element" );

174
exResizeObject, the user resizes the object. The AllowResizeObject property specifies the keys combination to allow user to resize the object
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 3 ? `exResizeObject` : value",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 3 ? `exResizeObject` : value",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64))->PutAutoSize(VARIANT_FALSE);
	var_Elements->Add("Node <b>2",vtMissing,vtMissing)->PutAutoSize(VARIANT_FALSE);
	var_Elements->Add("Node <b>3",long(64),long(-64))->PutAutoSize(VARIANT_FALSE);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();
OutputDebugStringW( L"Resize an element" );

173
exSurfaceHome, the user clicks the Home button on the control's toolbar, so the surface is restored to original position. The Home method has the same effect
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 2 ? `exSurfaceHome` : value",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 2 ? `exSurfaceHome` : value",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();
OutputDebugStringW( L"Click the Home button" );

172
exSurfaceZoom, the user magnifies or shrinks the surface. The AllowZoomSurface property specifies the keys combination to allow user to zoom the surface
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 1 ? `exSurfaceZoom` : value",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 1 ? `exSurfaceZoom` : value",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();
OutputDebugStringW( L"Click and drag the surface to reposition it" );

171
exSurfaceMove, the user scrolls or moves the surface. The AllowMoveSurface property specifies the keys combination to allow user to move / scroll the surface
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 0 ? `exSurfaceMove` : value",Operation,vtMissing,vtMissing)) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value = 0 ? `exSurfaceMove` : value",Operation,vtMissing,vtMissing)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();
OutputDebugStringW( L"Click and drag the surface to reposition it" );

170
FormatABC method formats the A,B,C values based on the giving expression and returns the result

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
OutputDebugStringW( _bstr_t(spSurface1->FormatABC(L"value format ``",long(1000),vtMissing,vtMissing)) );

169
FreezeEvents(Freeze) method prevents firing any event. For instance, FreezeEvents(True) freezes the control's events, no no event is fired, until the FreezeEvents(False) is called
// Event event - Notifies the application once the control fires an event.
void OnEventSurface1(long   EventID)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( _bstr_t(spSurface1->GetEventParam(-2)) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->FreezeEvents(VARIANT_TRUE);
OutputDebugStringW( L"No event is fired after FreezeEvents(True) call" );
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();

168
The exAllowChangeFrom(0x20)/exAllowChangeTo(0x40) flag of LinkControlPointEnum type allows the user to adjust the link's from/to element by dragging and dropping the start control point (requires the exStartControlPoint/exEndControlPoint flag)
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( L"Operation" );
	OutputDebugStringW( _bstr_t(spSurface1->GetFocusLink()->GetID()) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( L"Operation" );
	OutputDebugStringW( _bstr_t(spSurface1->GetFocusLink()->GetID()) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
	var_Elements->Add("Node <b>3",long(64),long(-64));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->PutFocusLink("L1");
spSurface1->EndUpdate();

167
The LayoutStartChanging(exFocusLink)/LayoutEndChanging(exFocusLink) event notifies your application when the user focuses on a new link
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( L"Operation" );
	OutputDebugStringW( _bstr_t(spSurface1->GetFocusLink()) );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( L"Operation" );
	OutputDebugStringW( _bstr_t(spSurface1->GetFocusLink()) );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->EndUpdate();

166
Focus a link

// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( L"Operation" );
}

// LayoutStartChanging event - Occurs when the control's layout is about to be changed.
void OnLayoutStartChangingSurface1(long   Operation)
{
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutStartChanging" );
	OutputDebugStringW( L"Operation" );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Node <b>1",long(-64),long(-64));
	var_Elements->Add("Node <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),"L1");
spSurface1->PutFocusLink("L1");
spSurface1->EndUpdate();

165
The caption is displayed on the back, so the picture overrides it. How can I place the caption on the foreground

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutDrawPartsOrder(L"extracaption,extrapicture,picture,check,caption,client");
spSurface1->PutHTMLPicture(L"pic1","c:\\exontrol\\images\\sun.png");
EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add("<b>Element",vtMissing,vtMissing);
	var_Element->PutPicturesAlign(EXSURFACELib::exMiddleCenter);
	var_Element->PutCaptionAlign(EXSURFACELib::exMiddleCenter);
	var_Element->PutPictures(L"pic1");
spSurface1->EndUpdate();

164
Draws a frame arround the link's arrow

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(0xffffff80 | EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exOrthoArrange | EXSURFACELib::exMiddleControlPoint | EXSURFACELib::exControlPoint | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>B",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	EXSURFACELib::ILinkPtr var_Link = var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
		var_Link->PutShowLinkType(EXSURFACELib::ShowLinkTypeEnum(EXSURFACELib::exLinkStraight | EXSURFACELib::exLinkDirect));
		var_Link->PutStartPos(EXSURFACELib::LeftAlignment);
		var_Link->PutArrowSize(8);
		var_Link->PutArrowColor(RGB(255,255,255));
		var_Link->PutArrowFrameColor(RGB(0,0,0));
spSurface1->FitToClient();
spSurface1->EndUpdate();

163
Draws a frame arround the arrow for all links

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(0xffffff80 | EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exOrthoArrange | EXSURFACELib::exMiddleControlPoint | EXSURFACELib::exControlPoint | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
spSurface1->PutLinksArrowSize(8);
spSurface1->PutLinksArrowColor(RGB(255,255,255));
spSurface1->PutLinksArrowFrameColor(RGB(0,0,0));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>B",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	EXSURFACELib::ILinkPtr var_Link = var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
		var_Link->PutShowLinkType(EXSURFACELib::ShowLinkTypeEnum(EXSURFACELib::exLinkStraight | EXSURFACELib::exLinkDirect));
		var_Link->PutStartPos(EXSURFACELib::LeftAlignment);
spSurface1->FitToClient();
spSurface1->EndUpdate();

162
Change the size to display the arrow of the link

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(0xffffff80 | EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exOrthoArrange | EXSURFACELib::exMiddleControlPoint | EXSURFACELib::exControlPoint | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>B",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	EXSURFACELib::ILinkPtr var_Link = var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
		var_Link->PutShowLinkType(EXSURFACELib::ShowLinkTypeEnum(EXSURFACELib::exLinkStraight | EXSURFACELib::exLinkDirect));
		var_Link->PutStartPos(EXSURFACELib::LeftAlignment);
		var_Link->PutArrowSize(8);
spSurface1->FitToClient();
spSurface1->EndUpdate();

161
Change the size to display the arrows for all links

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(0xffffff80 | EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exOrthoArrange | EXSURFACELib::exMiddleControlPoint | EXSURFACELib::exControlPoint | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
spSurface1->PutLinksArrowSize(8);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>B",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	EXSURFACELib::ILinkPtr var_Link = var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
		var_Link->PutShowLinkType(EXSURFACELib::ShowLinkTypeEnum(EXSURFACELib::exLinkStraight | EXSURFACELib::exLinkDirect));
		var_Link->PutStartPos(EXSURFACELib::LeftAlignment);
spSurface1->FitToClient();
spSurface1->EndUpdate();

160
Extends the caption on the element's width
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add(_bstr_t("<solidline> <c><b>Bank Account</b></solidline><br>+ owner: String <r><a 1;e64=gA8ABzABvABsABpABkg8JABuABlAAgAA4AAwisXjMYH0TAECM") +
"YAjsCMwAM4AkMGhEGOUei0Yl8bkQAOAAlsGmsSlp0h0SgkCF8DgsNhUMhEKiESkYAoMlk8phssmcCltLMNTAFOlFDlc2l0amMxjomAAjAA5AA2tMaHcfplZk1blVDqtu" +
"oNXjoAAEBA=>▲</a><br><solidline>+ balance: Currency = 0</solidline><br>+ deposit(amount: Currency)<r><a 2;e64=gA8ABjAA+AEC" +
"MwAM8DABvABshoAOQAEAAHAAGEWjEajMGNoAMoAOgANERMgAOcHAAvAEJhcEh0Qh0Tg0CmkqMMFlUuhkxiMTisXjNCjk6EwAEYAHIAG1MjY7lUsnkwh8/nUClk5gwAAE" +
"BA==>▲</a><br>+ withdraw(amount: Currency)",vtMissing,vtMissing);
	var_Element->PutID("Account");
	var_Element->PutX(-128);
	var_Element->PutCaptionSingleLine(EXSURFACELib::exCaptionBreakWrap);
	var_Element->PutAutoSize(VARIANT_FALSE);
	var_Element->PutWidth(256);
	var_Element->PutHeight(var_Element->GetAutoHeight());
	var_Element->PutCaptionAlign(EXSURFACELib::ContentAlignmentEnum(0x4));

159
Gets the width/height of the element to fit its content ( as if the AutoSize property is True )

// AnchorClick event - Occurs when an anchor element is clicked.
void OnAnchorClickSurface1(LPCTSTR   AnchorID,LPCTSTR   Options)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->GetItem("Account");
		var_Element->PutHeight(var_Element->GetAutoHeight());
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add(_bstr_t("<solidline> <c><b>Bank Account</b></solidline><br>+ owner: String <r><a 1;e64=gA8ABzABvABsABpABkg8JABuABlAAgAA4AAwisXjMYH0TAECM") +
"YAjsCMwAM4AkMGhEGOUei0Yl8bkQAOAAlsGmsSlp0h0SgkCF8DgsNhUMhEKiESkYAoMlk8phssmcCltLMNTAFOlFDlc2l0amMxjomAAjAA5AA2tMaHcfplZk1blVDqtu" +
"oNXjoAAEBA=>▲</a><br><solidline>+ balance: Currency = 0</solidline><br>+ deposit(amount: Currency)<r><a 2;e64=gA8ABjAA+AEC" +
"MwAM8DABvABshoAOQAEAAHAAGEWjEajMGNoAMoAOgANERMgAOcHAAvAEJhcEh0Qh0Tg0CmkqMMFlUuhkxiMTisXjNCjk6EwAEYAHIAG1MjY7lUsnkwh8/nUClk5gwAAE" +
"BA==>▲</a><br>+ withdraw(amount: Currency)",vtMissing,vtMissing);
	var_Element->PutID("Account");
	var_Element->PutX(-128);
	var_Element->PutCaptionSingleLine(EXSURFACELib::exCaptionBreakWrap);
	var_Element->PutAutoSize(VARIANT_FALSE);
	var_Element->PutWidth(256);
	var_Element->PutHeight(var_Element->GetAutoHeight());
	var_Element->PutCaptionAlign(EXSURFACELib::ContentAlignmentEnum(0x4));

158
Expandable-caption

// AnchorClick event - Occurs when an anchor element is clicked.
void OnAnchorClickSurface1(LPCTSTR   AnchorID,LPCTSTR   Options)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"AnchorID" );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add(_bstr_t("<solidline> <c><b>Bank Account</b></solidline><br>+ owner: String <r><a 1;e64=gA8ABzABvABsABpABkg8JABuABlAAgAA4AAwisXjMYH0TAECM") +
"YAjsCMwAM4AkMGhEGOUei0Yl8bkQAOAAlsGmsSlp0h0SgkCF8DgsNhUMhEKiESkYAoMlk8phssmcCltLMNTAFOlFDlc2l0amMxjomAAjAA5AA2tMaHcfplZk1blVDqtu" +
"oNXjoAAEBA=>▲</a><br><solidline>+ balance: Currency = 0</solidline><br>+ deposit(amount: Currency)<r><a 2;e64=gA8ABjAA+AEC" +
"MwAM8DABvABshoAOQAEAAHAAGEWjEajMGNoAMoAOgANERMgAOcHAAvAEJhcEh0Qh0Tg0CmkqMMFlUuhkxiMTisXjNCjk6EwAEYAHIAG1MjY7lUsnkwh8/nUClk5gwAAE" +
"BA==>▲</a><br>+ withdraw(amount: Currency)",vtMissing,vtMissing);
	var_Element->PutID("Account");
	var_Element->PutX(-256);
	var_Element->PutY(-164);
	var_Element->PutCaptionSingleLine(EXSURFACELib::exCaptionBreakWrap);
	var_Element->PutCaptionAlign(EXSURFACELib::ContentAlignmentEnum(0x4));
EXSURFACELib::IElementPtr var_Element1 = spSurface1->GetElements()->Add(_bstr_t("<solidline> <c><b>Person</b></solidline><br>+ name: String <r><a 1;e64=gA8ABzABvABsABpABkg8JABuABlAAgAA4AAwisXjMYH0TAECMYAjsCMw") +
"AM4AkMGhEGOUei0Yl8bkQAOAAlsGmsSlp0h0SgkCF8DgsNhUMhEKiESkYAoMlk8phssmcCltLMNTAFOlFDlc2l0amMxjomAAjAA5AA2tMaHcfplZk1blVDqtuoNXjoAA" +
"EBA=>▲</a><br><solidline># birth: Date</solidline><br>+ getCurrentAge(): int<r><a 2;e64=gA8ABjAA+AECMwAM8DABvABshoAOQAEAAH" +
"AAGEWjEajMGNoAMoAOgANERMgAOcHAAvAEJhcEh0Qh0Tg0CmkqMMFlUuhkxiMTisXjNCjk6EwAEYAHIAG1MjY7lUsnkwh8/nUClk5gwAAEBA==>▲</a>",vtMissing,vtMissing);
	var_Element1->PutID("Person");
	var_Element1->PutY(-164);
	var_Element1->PutCaptionSingleLine(EXSURFACELib::exCaptionBreakWrap);
EXSURFACELib::IElementPtr var_Element2 = spSurface1->GetElements()->Add(_bstr_t("<solidline> <c><b>Student</b></solidline><br><solidline>+ classes: List<Course> <r><a 1;e64=gA8ABzABvABsABpABkg8JABuABlAA+AAgAE") +
"CMcTi4AMwAM4AjMGhEGOUVAA4AAwk8plcqihwAElg0wiUlOkOiUEgQvgcFhsKhkIhUQiUUnccj0gn0jmMagUlowAMNOpEfkMNkkmlEqrctjQmAAjAA5AA2sssHcbnkdq" +
"1Ln1QtVSjQAAEBA==>▲</a></solidline><br>- attend(class: Course)<r><a 2;e64=gA8ABjAA+AECMwAM8DABvABshoAOQAEAAHAAGEWjEajMGNoA" +
"MoAOgANERMgAOcHAAvAEJhcEh0Qh0Tg0CmkqMMFlUuhkxiMTisXjNCjk6EwAEYAHIAG1MjY7lUsnkwh8/nUClk5gwAAEBA==>▲</a><br>- sleep()",vtMissing,vtMissing);
	var_Element2->PutID("Student");
	var_Element2->PutY(-64);
	var_Element2->PutCaptionSingleLine(EXSURFACELib::exCaptionBreakWrap);
EXSURFACELib::ILinkPtr var_Link = spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem("Account"),spSurface1->GetElements()->GetItem("Student"),vtMissing);
	var_Link->PutCaption(L"<fgcolor A0A0A0><solidline 808080> <c><b>Link</b></solidline><br># count: number <r><a ;exp=12992>➤</a>");

157
Expandable-caption

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add("<solidline><b>Header</b></solidline><br>Line1<r><a ;exp=show lines>+</a><br>Line2<br>Line3",vtMissing,vtMissing);
	var_Element->PutCaptionSingleLine(EXSURFACELib::exCaptionBreakWrap);

156
Fullfit the caption on the element's width

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add(_bstr_t("<solidline><b>Bank Account</b></solidline><br>+ owner: String <r><a 1;properties>+</a><br><solidline>+ balance: Currency = 0</s") +
"olidline><br>+ deposit(amount: Currency)<r><a 2;methods>+</a><br>+ withdraw(amount: Currency)",vtMissing,vtMissing);
	var_Element->PutCaptionSingleLine(EXSURFACELib::exCaptionBreakWrap);
	var_Element->PutBackColor(RGB(248,248,248));
	var_Element->PutAutoSize(VARIANT_FALSE);
	var_Element->PutWidth(194);
	var_Element->PutHeight(76);
	var_Element->PutCaptionAlign(EXSURFACELib::ContentAlignmentEnum(0x4));

155
Wrap the caption by <br> or "\r\n" sequence only

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add(_bstr_t("<solidline><b>Bank Account</b></solidline><br>+ owner: String <r><a 1;properties>+</a><br><solidline>+ balance: Currency = 0</s") +
"olidline><br>+ deposit(amount: Currency)<r><a 2;methods>+</a><br>+ withdraw(amount: Currency)",vtMissing,vtMissing);
	var_Element->PutCaptionSingleLine(EXSURFACELib::exCaptionBreakWrap);
	var_Element->PutBackColor(RGB(248,248,248));

154
Display a custom tooltip
// MouseMove event - Occurs when the user moves the mouse.
void OnMouseMoveSurface1(short   Button,short   Shift,long   X,long   Y)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	spSurface1->ShowToolTip(L"new content","",vtMissing,"+8","+8");
}


153
Shows the tooltip of the object moved relative to its default position
// MouseMove event - Occurs when the user moves the mouse.
void OnMouseMoveSurface1(short   Button,short   Shift,long   X,long   Y)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	spSurface1->ShowToolTip(L"<null>","<null>",vtMissing,"+8","+8");
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->GetElements()->Add("Element with a Tooltip",vtMissing,vtMissing)->PutToolTip(L"This is a bit of text that should be displayed when cursor hovers the element.");

152
Rename Undo/Redo commands into the control's toolbar

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
spSurface1->PutToolBarFormat(L"-1,100,101,|,103,104");
spSurface1->PutToolBarCaption(100,L"<img>1</img>Acasa");
spSurface1->PutToolBarCaption(103,L"Anuleaza <img>3</img>");
spSurface1->PutToolBarCaption(104,L"<img>4</img>Reface");
spSurface1->PutToolBarToolTip(100,L"Restabileste vizualizarea la origine.");
spSurface1->PutToolBarToolTip(101,L"Mareste vizualizarea.");
spSurface1->PutToolBarToolTip(103,L"Anuleaza ultima actiune UI. Pentru a anula o actiune apasati Ctrl+Z.");
spSurface1->PutToolBarToolTip(104,L"Inverseaza cea mai recenta operatie de anulare. Pentru a reface o actiune apasati Ctrl+Y.");
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-48));
	var_Elements->Add("Item <b>2",long(32),long(32));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->EndUpdate();

151
Add Undo/Redo commands to control's toolbar

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
spSurface1->PutToolBarFormat(L"-1,100,101,|,103,104");
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-48));
	var_Elements->Add("Item <b>2",long(32),long(32));
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->EndUpdate();

150
Clear Undo/Redo queue (method 2)
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
long c = spSurface1->GetUndoRedoQueueLength();
spSurface1->PutUndoRedoQueueLength(0);
spSurface1->PutUndoRedoQueueLength(c);
OutputDebugStringW( spSurface1->GetUndoListAction(vtMissing,vtMissing) );
spSurface1->EndUpdate();

149
Clear Undo/Redo queue (method 1)
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
OutputDebugStringW( spSurface1->GetUndoListAction(vtMissing,vtMissing) );
spSurface1->EndUpdate();

148
Removes Redo operations
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->Undo();
spSurface1->RedoRemoveAction(long(10),vtMissing);
OutputDebugStringW( spSurface1->GetRedoListAction(vtMissing,vtMissing) );
spSurface1->EndUpdate();

147
Removes Undo operations
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->UndoRemoveAction(long(10),vtMissing);
OutputDebugStringW( spSurface1->GetUndoListAction(vtMissing,vtMissing) );
spSurface1->EndUpdate();

146
Record the UI operations as a block of undo/redo operations

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
spSurface1->StartBlockUndoRedo();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->EndBlockUndoRedo();
OutputDebugStringW( spSurface1->GetUndoListAction(vtMissing,vtMissing) );
spSurface1->EndUpdate();

145
Groups the next to current Undo/Redo Actions in a single block

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->GroupUndoRedoActions(3);
OutputDebugStringW( spSurface1->GetUndoListAction(vtMissing,vtMissing) );
spSurface1->EndUpdate();

144
Limits the number of entries within the Undo/Redo queue

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
spSurface1->PutUndoRedoQueueLength(1);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
OutputDebugStringW( spSurface1->GetUndoListAction(vtMissing,vtMissing) );
spSurface1->EndUpdate();

143
Lists the Redo actions that can be performed on the surface

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->Undo();
OutputDebugStringW( spSurface1->GetRedoListAction(vtMissing,vtMissing) );
spSurface1->EndUpdate();

142
Lists the Undo actions that can be performed on the surface

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
OutputDebugStringW( spSurface1->GetUndoListAction(vtMissing,vtMissing) );
spSurface1->EndUpdate();

141
Checks whether the Undo operation is possible

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->Undo();
OutputDebugStringW( L"CanRedo" );
OutputDebugStringW( _bstr_t(spSurface1->GetCanRedo()) );
spSurface1->EndUpdate();

140
Call Redo by code

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->Undo();
spSurface1->Redo();
spSurface1->EndUpdate();

139
Checks whether the Undo operation is possible

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
OutputDebugStringW( L"CanUndo" );
OutputDebugStringW( _bstr_t(spSurface1->GetCanUndo()) );
spSurface1->EndUpdate();

138
Call Undo by code

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->Undo();
spSurface1->EndUpdate();

137
Save the element's properties for Undo/Redo operations, by code

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Item <b>1",long(-64),long(-64));
	var_Elements->Add("Item <b>2",vtMissing,vtMissing);
spSurface1->StartBlockUndoRedo();
EXSURFACELib::ILinkPtr var_Link = spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	long h = var_Link->GetStartUpdateLink();
	var_Link->PutColor(RGB(255,0,0));
	var_Link->PutWidth(2);
	var_Link->PutShowDir(VARIANT_FALSE);
	var_Link->PutShowLinkType(EXSURFACELib::exLinkStraight);
	var_Link->EndUpdateLink(h);
spSurface1->EndBlockUndoRedo();
spSurface1->EndUpdate();

136
No color is restored for the link when Undo/Redo operation is executed

// AddElement event - A new element has been added to the surface.
void OnAddElementSurface1(LPDISPATCH   Element)
{
	// Element.ShowCheckBox = True
	// Element.CheckBoxAlign = 2
}

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Check <b>1",long(-64),long(-64));
	var_Elements->Add("Check <b>2",vtMissing,vtMissing)->PutChecked(EXSURFACELib::exChecked);
spSurface1->StartBlockUndoRedo();
EXSURFACELib::ILinkPtr var_Link = spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	long h = var_Link->GetStartUpdateLink();
	var_Link->PutColor(RGB(255,0,0));
	var_Link->PutWidth(2);
	var_Link->PutShowDir(VARIANT_FALSE);
	var_Link->PutShowLinkType(EXSURFACELib::exLinkStraight);
	var_Link->EndUpdateLink(h);
spSurface1->EndBlockUndoRedo();
spSurface1->EndUpdate();

135
Save the element's properties for Undo/Redo operations, by code

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
spSurface1->GetElements()->Add("Item <b>1",long(-64),long(-64));
spSurface1->StartBlockUndoRedo();
EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add("Item <b>2",vtMissing,vtMissing);
	long h = var_Element->GetStartUpdateElement();
	var_Element->PutBackColor(RGB(0,0,0));
	var_Element->PutForeColor(RGB(255,255,255));
	var_Element->PutBorderColor(RGB(255,0,0));
	var_Element->EndUpdateElement(h);
spSurface1->EndBlockUndoRedo();
spSurface1->EndUpdate();

134
No color is restored for the element when Undo/Redo operation is executed

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
spSurface1->GetElements()->Add("Item <b>1",long(-64),long(-64));
spSurface1->StartBlockUndoRedo();
EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add("Item <b>2",vtMissing,vtMissing);
	long h = var_Element->GetStartUpdateElement();
	var_Element->PutBackColor(RGB(0,0,0));
	var_Element->PutForeColor(RGB(255,255,255));
	var_Element->PutBorderColor(RGB(255,0,0));
	var_Element->EndUpdateElement(h);
spSurface1->EndBlockUndoRedo();
spSurface1->EndUpdate();

133
How can I ensure that a specified element fits the surface's visible area

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	EXSURFACELib::IPatternPtr var_Pattern = var_Elements->Add("Element A",long(-100),vtMissing)->GetPattern();
		var_Pattern->PutType(EXSURFACELib::exPatternBDiagonal);
		var_Pattern->PutColor(RGB(224,224,224));
	var_Elements->Add("Element B",long(2000),vtMissing)->EnsureVisible();

132
LayoutEndChanging(exUndo), LayoutEndChanging(exRedo) or LayoutEndChanging(exUndoRedoUpdate) notifiy your application once a Undo/Redo operation is executed (CTRL+Z, CTRL+Y) or updated

// AddElement event - A new element has been added to the surface.
void OnAddElementSurface1(LPDISPATCH   Element)
{
	// Element.ShowCheckBox = True
	// Element.CheckBoxAlign = 2
}

// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
void OnLayoutEndChangingSurface1(long   Operation)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"LayoutEndChanging" );
	OutputDebugStringW( L"Operation" );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Check <b>1",long(-64),long(-64));
	var_Elements->Add("Check <b>2",vtMissing,vtMissing)->PutChecked(EXSURFACELib::exChecked);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->EndUpdate();

131
Turn on the Undo/Redo feature

// AddElement event - A new element has been added to the surface.
void OnAddElementSurface1(LPDISPATCH   Element)
{
	// Element.ShowCheckBox = True
	// Element.CheckBoxAlign = 2
}

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowUndoRedo(VARIANT_TRUE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Check <b>1",long(-64),long(-64));
	var_Elements->Add("Check <b>2",vtMissing,vtMissing)->PutChecked(EXSURFACELib::exChecked);
spSurface1->GetLinks()->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->EndUpdate();

130
ImageSize property on 32 (specifies the size of control' icons/images/check-boxes/radio-buttons)

// AddElement event - A new element has been added to the surface.
void OnAddElementSurface1(LPDISPATCH   Element)
{
	// Element.ShowCheckBox = True
}

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutImageSize(32);
spSurface1->GetFont()->PutSize(_variant_t(long(16)));
spSurface1->Images(_bstr_t("gBJJgBAIDAAEg4AEEKAD/hz/EMNh8TIRNGwAjEZAEXjAojKAjMLjABhkaABAk0plUrlktl0vmExmUzmk1m03nE5nU7nk9miAoE+oVDolFo1HpFJpU5h8Sf9OqFNqUOq") +
"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");
EXSURFACELib::IAppearancePtr var_Appearance = spSurface1->GetVisualAppearance();
	var_Appearance->Add(1,_bstr_t("gBFLBCJwBAEHhEJAAEhABfICg6AADACAxRDgMQBQKAAzQFAYbhkGCGAAGMZxRgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFKVQChEYxSjKA40SJNUgyj") +
"6CCY+QLIE5PfQgAL9I6eJABCCSQKkYx0HScRiwPBIbAZAYhCZqaKhWgkKI/WBQIABRDVLx5ESiLRtKy7Mq2bpvXBcNxXHalaztO68LxvKyqHb5fJ/PpgL4YHgmC4NQ7E" +
"MRwF6rfbyfZ7Xg/ORPTijZ4sdzMHTzJyscx3HqfaBoOaZU5eMLceTUMofHIndxCcasPbsOatVqjG5sYjcGC3La9cz3Pq/bpuDCbMxuaK1TrYXr1TTrcofBDldAxXRKDx" +
"RDWVhLnYOw9i6XxzjuXprCaOoKB6EwbiCZZCGOdZYlcT4xHmbhMnwNxtn+G5bmqdZ7n4Pw/i+X5zm+dQ9g4CAFjsfAJheOI8HsDoWDWTB/lwSAQkmA5PEgRYoDyDwYFY" +
"FoFmGCBmBqBphDgRJ0gOTIYBGRB/lyRh0iSCZbjYWJzgWDwIjYLoLmMCJGDKDJjBgWgqG6YhyhGHRzA2aJ1mCABOAiOJvhCZBJBYRoRmSCQmEqEQimkAZgg8TZnDCV4U" +
"kmCUmBKZYJGYWoWCUUhiFMNZckNUh2GENoaGaGZmgmJhqhqZpGGIEx2GYIxSGGGJdggWJth2Z4JmYeoemeSZ2H6H4hGmQhihyTRHGYLg7CiCgmgqIpokoNoOiOaJ4jqA" +
"ochqaZGgaCxpAoZoaiaaJqEmWIcGgShcnCJwqEqFoR3YOoFlgchflqNouiuawHmWSYqGkWZQhcatzmaOoumuSp2j6L5bBaKo0GQKRnGGCxqiyCwmkqMpsksNpOGUGI7A" +
"0ew1G0Rxlg0PptgsZuDG2Sx2l6N5tnYNZZjUDRXDCVo5l2FoymqOpukuNpujubwLjmWY5k0ZwxkaFxYlWdp6j6b5Lnafo/nABQdg2FxcUsY5BkmXAkmeQpckwNRrkKTh" +
"8CSHZBk4NwyC4KxxgMDwakOMZDn8GgwnGAo2C4cwthMcwmCcMoHBMHRehwTIghySYNksZwcH4HBMEsHx5hyPItiweYxnwSZEH4Mozn0fR+DMAo7EYJ50gkdZelKdNql2" +
"UgJn0GIukwH4HicQRai2GI4mSVpNl0dZGledgNgcYpYDWUx3FsOQi5YV5anaTY3G6W53A2RxylydxFjiaxEFCCgBBAQ==");
	var_Appearance->Add(2,_bstr_t("gBFLBCJwBAEHhEJAAEhABcoFg6AADACAxRDgMQBQKAAzQFAYbhkGCGAAGMZxRgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFKVQChEYxSjKA40SJNUgyj") +
"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" +
"gRBCCQAgQEA==");
	var_Appearance->Add(3,_bstr_t("gBFLBCJwBAEHhEJAAEhABQ4Fg6AADACAxRDgMQBQKAAzQFAYbhkGCGAAGMZxRgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFKVQChEYxSjKA40SJNUgyj") +
"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");
spSurface1->PutBackground(EXSURFACELib::exCheckBoxState0,0x1000000);
spSurface1->PutBackground(EXSURFACELib::exCheckBoxState1,0x2000000);
spSurface1->PutBackground(EXSURFACELib::exCheckBoxState2,0x3000000);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add("Element Check 1",long(-64),long(-64));
	var_Elements->Add("Child",vtMissing,vtMissing)->PutParent(((EXSURFACELib::IElementPtr)(var_Element)));
		var_Element->PutPictures(L"1/2");
		var_Element->PutExpanded(VARIANT_FALSE);
	EXSURFACELib::IElementPtr var_Element1 = var_Elements->Add("Element Check 2",long(32),long(96));
		var_Element1->PutChecked(EXSURFACELib::exChecked);
		var_Element1->PutPictures(L"1,2");
spSurface1->Home();
spSurface1->EndUpdate();

129
ImageSize property on 16 (default) (specifies the size of control' icons)

// AddElement event - A new element has been added to the surface.
void OnAddElementSurface1(LPDISPATCH   Element)
{
	// Element.ShowCheckBox = True
}

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutImageSize(16);
spSurface1->Images(_bstr_t("gBJJgBAIDAAEg4ACEKAD/hz/EMNh8TIRNGwAjEZAEXjAojJAjMLjABAAgjUYkUnlUrlktl0vmExmUzmk1m03nE5nU7nkrQCAntBoVDolFo1HoM/ADAplLptImdMYFOq") +
"dSqlXq1QrVbrlGpVWsFNrNdnNjsk7pQAtNroFnt0sh8Yr9iulTuNxs1Eu8OiT/vsnsNVutXlk/oGGtVKxGLxWNtsZtN8iUYuNvy0Zvd+xNYwdwvl4p870GCqc8vOeuVt" +
"tmp1knyOayWVy+WzN/ze1wOElenm+12WUz/Bv2/3UyyWrzeutux2GSyGP2dQ33C1ur3GD3M4zUNzHdlWjq/E3nGzVpjWv4HA7fRy/Tv2IrN8rPW6nZ3ve7mUlfu20Z8a" +
"cvQyb+vY9jasYoDwMm+LytVBDqKG3z8O3Cb8P+mkAuY9cCQ2uL4KaxDKvkp8RNLEjqugnrwQo/UWPzFyeQw5sNLZFENrI4kOqU66pw8uzmOKvTqNqjULJvGL1JO48GtT" +
"GsbLdEL3scxLlyiw8dQeoUVxdLTtyKmUjwGlslRPJsnK1HbAKbKCrsQo8uQk/CeP44iaR/ATnTNPLvyxPU+z9P9AUDQVBowiofJXQ6Oo+kKMpIkjztE4TKn4P6JowfgP" +
"nwD5/nAjB8AOeAPo0eAA1IAFH07UhAIMpYAVIYFHqBUhwVjV1S1EtQAHxW65V0AZwAeuQAnwB5gAPYViEDVhwAHTQBkCjB4gOhwDmCyhH0sACAg==");
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add("Element Check 1",long(-64),long(-64));
	var_Elements->Add("Child",vtMissing,vtMissing)->PutParent(((EXSURFACELib::IElementPtr)(var_Element)));
		var_Element->PutPictures(L"1/2");
		var_Element->PutExpanded(VARIANT_FALSE);
	EXSURFACELib::IElementPtr var_Element1 = var_Elements->Add("Element Check 2",long(0),long(32));
		var_Element1->PutChecked(EXSURFACELib::exChecked);
		var_Element1->PutPictures(L"1,2");
spSurface1->Home();
spSurface1->EndUpdate();

128
We want to have option to start/end connectors at the middle of each side of the elements

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutShowLinks(EXSURFACELib::exShowLinks);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>1",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>2",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>3",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->FitToClient();
spSurface1->EndUpdate();

127
How can I determine the position the user clicks within the element's boundaries (Click event)

// Click event - Occurs when the user presses and then releases the left mouse button over the control.
void OnClickSurface1()
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	ObjectPtr e = ((ObjectPtr)(spSurface1->GetElementFromPoint(-1,-1)));
	_bstr_t X = -1;
	_bstr_t Y = -1;
	spSurface1->PointToPosition(X,Y);
	OutputDebugStringW( L"e" );
	OutputDebugStringW( L"X" );
	OutputDebugStringW( L"Y" );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element 1",vtMissing,vtMissing);
	var_Elements->Add("Element 2",long(128),long(64));
spSurface1->FitToClient();
spSurface1->EndUpdate();

126
How can I determine the position the user clicks within the element's boundaries (MouseMove event)

// MouseMove event - Occurs when the user moves the mouse.
void OnMouseMoveSurface1(short   Button,short   Shift,long   X,long   Y)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	ObjectPtr e = ((ObjectPtr)(spSurface1->GetElementFromPoint(X,Y)));
	spSurface1->PointToPosition(X,Y);
	OutputDebugStringW( L"e" );
	OutputDebugStringW( L"X" );
	OutputDebugStringW( L"Y" );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element 1",vtMissing,vtMissing);
	var_Elements->Add("Element 2",long(128),long(64));
spSurface1->FitToClient();
spSurface1->EndUpdate();

125
How can I convert the screen position (mouse) to surface position

// MouseMove event - Occurs when the user moves the mouse.
void OnMouseMoveSurface1(short   Button,short   Shift,long   X,long   Y)
{
	OutputDebugStringW( L"Point " );
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"X" );
	OutputDebugStringW( L"Y" );
	spSurface1->PointToPosition(X,Y);
	OutputDebugStringW( L"Position " );
	OutputDebugStringW( L"X" );
	OutputDebugStringW( L"Y" );
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>1",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>2",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>3",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
spSurface1->FitToClient();
spSurface1->PutAxisStyle(EXSURFACELib::LinesStyleEnum(0xc0));
spSurface1->PutAxisColor(RGB(128,128,128));
spSurface1->EndUpdate();

124
Is is possible to show just the positive coordinates

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutCoord(EXSURFACELib::CoordEnum(EXSURFACELib::exAllowPositiveOnly | EXSURFACELib::exCartesian));
spSurface1->PutAxisColor(RGB(128,128,128));
spSurface1->PutAxisStyle(EXSURFACELib::LinesStyleEnum(EXSURFACELib::exLinesThick | EXSURFACELib::exLinesDot4));
spSurface1->PutShowLinks(EXSURFACELib::exShowLinks);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>1",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>2",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>3",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
spSurface1->FitToClient();
spSurface1->EndUpdate();

123
Cartesian coordinates (positive coordinates are shown top-right to the origin)

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutCoord(EXSURFACELib::exCartesian);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>1",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>2",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>3",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
spSurface1->FitToClient();
spSurface1->EndUpdate();

122
Default coordinates (positive coordinates are shown bottom-right to the origin)

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutCoord(EXSURFACELib::exDefCoord);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>1",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>2",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>3",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
spSurface1->FitToClient();
spSurface1->EndUpdate();

121
Is it possible to customize the path of the links orthogonally similar with Microsoft Visio tool

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(EXSURFACELib::exOrthoArrange | EXSURFACELib::exMiddleControlPoint | EXSURFACELib::exControlPoint | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>1",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>2",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>3",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
spSurface1->PutZoom(200);
spSurface1->FitToClient();
spSurface1->EndUpdate();

120
Does your control supports OLE Drag and Drop
// OLEDragDrop event - Occurs when a source component is dropped onto a target component when the source component determines that a drop can occur.
void OnOLEDragDropSurface1(LPDISPATCH   Data,long FAR*   Effect,short   Button,short   Shift,long   X,long   Y)
{
	/*
		Copy and paste the following directives to your header file as
		it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'
		#import <ExSurface.dll>
		using namespace EXSURFACELib;
	*/
	EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
	OutputDebugStringW( L"Data" );
}

// OLEStartDrag event - Occurs when the OLEDrag method is called.
void OnOLEStartDragSurface1(LPDISPATCH   Data,long FAR*   AllowedEffects)
{
	// Data.SetData("some data to drag")
}

EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->PutOLEDropMode(EXSURFACELib::exOLEDropManual);
EXSURFACELib::IElementPtr var_Element = spSurface1->GetElements()->Add("Click the Element wait for .5 second until + cursor is shown, to start <b>OLE Drag and Drop</b>",vtMissing,vtMissing);
	var_Element->PutCaptionSingleLine(EXSURFACELib::exCaptionWordWrap);
	var_Element->PutAutoSize(VARIANT_FALSE);
	var_Element->PutWidth(256);
	var_Element->PutHeight(56);

119
Is it possible to disable customizing the path of a specified link

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(0xffffff80 | EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exOrthoArrange | EXSURFACELib::exMiddleControlPoint | EXSURFACELib::exControlPoint | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>B",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	EXSURFACELib::ILinkPtr var_Link = var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
		var_Link->PutShowLinkType(EXSURFACELib::ShowLinkTypeEnum(EXSURFACELib::exLinkStraight | EXSURFACELib::exLinkDirect));
		var_Link->PutStartPos(EXSURFACELib::LeftAlignment);
		var_Link->PutColor(RGB(128,128,128));
		var_Link->PutAllowControlPoint(EXSURFACELib::exNoControlPoint);
spSurface1->PutZoom(200);
spSurface1->FitToClient();
spSurface1->EndUpdate();

118
How do I let user customizes the link's path

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowLinkControlPoint(EXSURFACELib::LinkControlPointEnum(0xffffff80 | EXSURFACELib::exAllowChangeTo | EXSURFACELib::exAllowChangeFrom | EXSURFACELib::exOrthoArrange | EXSURFACELib::exMiddleControlPoint | EXSURFACELib::exControlPoint | EXSURFACELib::exEndControlPoint | EXSURFACELib::exStartControlPoint));
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(164),long(64));
	var_Elements->Add("Element <sha ;;0>B",long(0),long(132));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(2)),vtMissing)->PutCustomPath("0.5,0.25,0.5,.75");
	EXSURFACELib::ILinkPtr var_Link = var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
		var_Link->PutShowLinkType(EXSURFACELib::ShowLinkTypeEnum(EXSURFACELib::exLinkStraight | EXSURFACELib::exLinkDirect));
		var_Link->PutStartPos(EXSURFACELib::LeftAlignment);
spSurface1->PutZoom(200);
spSurface1->FitToClient();
spSurface1->EndUpdate();

117
How can I generate a picture/image/graph from my diagram
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element A",vtMissing,vtMissing)->PutID("A");
	var_Elements->Add("Element B",vtMissing,vtMissing)->PutID("B");
	var_Elements->Add("Element C",vtMissing,vtMissing)->PutID("C");
	var_Elements->Add("Element D",vtMissing,vtMissing)->PutID("D");
	var_Elements->Add("Element E",vtMissing,vtMissing)->PutID("E");
	var_Elements->Add("Element E",vtMissing,vtMissing)->PutID("F");
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("B"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("C"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("B"),spSurface1->GetElements()->GetItem("D"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("B"),spSurface1->GetElements()->GetItem("C"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("E"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("F"),vtMissing);
spSurface1->PutDefArrange(EXSURFACELib::exDefArrangeCompact,VARIANT_FALSE);
spSurface1->Arrange(vtMissing);
_variant_t var_CopyTo = spSurface1->GetCopyTo(L"c:/temp/xtest.jpg");
OutputDebugStringW( L"!!!check the file c:/temp/xtest.jpg!!!" );

116
How can I generate a picture/image/graph from my diagram
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element A",vtMissing,vtMissing)->PutID("A");
	var_Elements->Add("Element B",vtMissing,vtMissing)->PutID("B");
	var_Elements->Add("Element C",vtMissing,vtMissing)->PutID("C");
	var_Elements->Add("Element D",vtMissing,vtMissing)->PutID("D");
	var_Elements->Add("Element E",vtMissing,vtMissing)->PutID("E");
	var_Elements->Add("Element E",vtMissing,vtMissing)->PutID("F");
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("B"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("C"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("B"),spSurface1->GetElements()->GetItem("D"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("B"),spSurface1->GetElements()->GetItem("C"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("E"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("F"),vtMissing);
spSurface1->PutDefArrange(EXSURFACELib::exDefArrangeCompact,VARIANT_FALSE);
spSurface1->Arrange(vtMissing);
/*
	Includes the definition for CreateObject function like follows:

	#include <comdef.h>
	IUnknownPtr CreateObject( BSTR Object )
	{
		IUnknownPtr spResult;
		spResult.CreateInstance( Object );
		return spResult;
	};

*/
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXPRINTLib' for the library: 'ExPrint 1.0 Control Library'

	#import <ExPrint.dll>
	using namespace EXPRINTLib;
*/
EXPRINTLib::IExPrintPtr var_Print = ::CreateObject(L"Exontrol.Print");
	var_Print->PutPrintExt(((EXSURFACELib::ISurfacePtr)(spSurface1)));
	var_Print->CopyTo(L"c:/temp/xtest.jpg");
OutputDebugStringW( L"!!!check the file c:/temp/xtest.jpg!!!" );

115
How can I print the component
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(0),long(76));
	EXSURFACELib::IElementPtr var_Element = var_Elements->Add("Element <sha ;;0>C",long(-76),long(32));
		var_Element->PutAutoSize(VARIANT_FALSE);
		var_Element->PutHeight(32);
	EXSURFACELib::IElementPtr var_Element1 = var_Elements->Add("Element <sha ;;0>D",long(76),long(32));
		var_Element1->PutAutoSize(VARIANT_FALSE);
		var_Element1->PutHeight(32);
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	EXSURFACELib::ILinkPtr var_Link = var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
		var_Link->PutStartPos(EXSURFACELib::CenterAlignment);
		var_Link->PutEndPos(EXSURFACELib::CenterAlignment);
	EXSURFACELib::ILinkPtr var_Link1 = var_Links->Add(spSurface1->GetElements()->GetItem(long(2)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
		var_Link1->PutStartPos(EXSURFACELib::CenterAlignment);
		var_Link1->PutEndPos(EXSURFACELib::CenterAlignment);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(4)),vtMissing);
	EXSURFACELib::ILinkPtr var_Link2 = var_Links->Add(spSurface1->GetElements()->GetItem(long(4)),spSurface1->GetElements()->GetItem(long(3)),vtMissing);
		var_Link2->PutStartPos(EXSURFACELib::LeftAlignment);
		var_Link2->PutEndPos(EXSURFACELib::RightAlignment);
/*
	Includes the definition for CreateObject function like follows:

	#include <comdef.h>
	IUnknownPtr CreateObject( BSTR Object )
	{
		IUnknownPtr spResult;
		spResult.CreateInstance( Object );
		return spResult;
	};

*/
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXPRINTLib' for the library: 'ExPrint 1.0 Control Library'

	#import <ExPrint.dll>
	using namespace EXPRINTLib;
*/
EXPRINTLib::IExPrintPtr var_Print = ::CreateObject(L"Exontrol.Print");
	var_Print->PutPrintExt(((EXSURFACELib::ISurfacePtr)(spSurface1)));
	var_Print->Preview();

114
How can I show direct-links

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->PutShowLinksType(EXSURFACELib::exLinkDirect);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element A",vtMissing,vtMissing)->PutID("A");
	var_Elements->Add("Element B",long(128),long(64))->PutID("B");
	var_Elements->Add("Element C",long(128),long(-64))->PutID("C");
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("B"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("C"),vtMissing);

113
How can I show straight-links

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->PutShowLinksType(EXSURFACELib::exLinkStraight);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element A",vtMissing,vtMissing)->PutID("A");
	var_Elements->Add("Element B",long(128),long(64))->PutID("B");
	var_Elements->Add("Element C",long(128),long(-64))->PutID("C");
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("B"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("C"),vtMissing);

112
How can I show round-links

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->PutShowLinksType(EXSURFACELib::exLinkRound);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element A",vtMissing,vtMissing)->PutID("A");
	var_Elements->Add("Element B",long(128),long(64))->PutID("B");
	var_Elements->Add("Element C",long(128),long(-64))->PutID("C");
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("B"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("C"),vtMissing);

111
I've tried to insert a "<br>" in the Caption property text and it just ignores it

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	EXSURFACELib::IElementPtr var_Element = var_Elements->Add("caption",vtMissing,vtMissing);
		var_Element->PutCaptionSingleLine(EXSURFACELib::exCaptionWordWrap);
		var_Element->PutCaption(L"first caption<br>second caption<br>third caption");
spSurface1->EndUpdate();

110
How do I align the extra-caption

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	EXSURFACELib::IElementPtr var_Element = var_Elements->Add("caption",vtMissing,vtMissing);
		var_Element->PutAutoSize(VARIANT_FALSE);
		var_Element->PutWidth(128);
		var_Element->PutHeight(64);
		var_Element->PutExtraCaption(L"extra-caption");
		var_Element->PutExtraCaptionAlign(EXSURFACELib::exBottomRight);
spSurface1->EndUpdate();

109
How can I add an extra caption

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("caption",vtMissing,vtMissing)->PutExtraCaption(L"extra-caption");
spSurface1->EndUpdate();

108
I am using the reserve-neighbors feature, the question is how to shift left/right the neighbors instead of up/down
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowMoveNeighbors(EXSURFACELib::exMoveNeighborsHorizontally);
spSurface1->PutDefArrange(EXSURFACELib::exDefArrangeDir,long(1));
spSurface1->PutAllowInsertObject(VARIANT_FALSE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B ( move it )",long(16),long(32));
	var_Elements->Add("Element <sha ;;0>C",long(128),long(0));
spSurface1->EndUpdate();

107
I am using the reserve-neighbors feature, the question is if possible to specify the distance between neighbors
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowMoveNeighbors(EXSURFACELib::exMoveNeighborsVertically);
spSurface1->PutDefArrange(EXSURFACELib::exDefArrangeDX,long(0));
spSurface1->PutDefArrange(EXSURFACELib::exDefArrangeDY,long(0));
spSurface1->PutAllowInsertObject(VARIANT_FALSE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B ( move it )",long(0),long(32));
	var_Elements->Add("Element <sha ;;0>C",long(0),long(64));
spSurface1->EndUpdate();

106
How do I enable the reserve-neighbors feature
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
spSurface1->BeginUpdate();
spSurface1->PutAllowMoveNeighbors(EXSURFACELib::exMoveNeighborsVertically);
spSurface1->PutAllowInsertObject(VARIANT_FALSE);
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B ( move it )",long(0),long(32));
	var_Elements->Add("Element <sha ;;0>C",long(0),long(64));
spSurface1->EndUpdate();

105
I've noticed that recently, the elements get compacted once the Arrange method is performed. How can I prevent that

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element A",vtMissing,vtMissing)->PutID("A");
	var_Elements->Add("Element B",vtMissing,vtMissing)->PutID("B");
	var_Elements->Add("Element C",vtMissing,vtMissing)->PutID("C");
	var_Elements->Add("Element D",vtMissing,vtMissing)->PutID("D");
	var_Elements->Add("Element E",vtMissing,vtMissing)->PutID("E");
	var_Elements->Add("Element E",vtMissing,vtMissing)->PutID("F");
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("B"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("C"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("B"),spSurface1->GetElements()->GetItem("D"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("B"),spSurface1->GetElements()->GetItem("C"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("E"),vtMissing);
	var_Links->Add(spSurface1->GetElements()->GetItem("A"),spSurface1->GetElements()->GetItem("F"),vtMissing);
spSurface1->PutDefArrange(EXSURFACELib::exDefArrangeCompact,VARIANT_FALSE);
spSurface1->Arrange(vtMissing);

104
Is it possible to add a link to show from bottom/down to top/up, rather that right to left (method-2)

// AddLink event - A new link has been added to the links collection.
void OnAddLinkSurface1(LPDISPATCH   Link)
{
}

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(48),long(48));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);

103
Is it possible to add a link to show from bottom/down to top/up, rather that right to left (method-1)

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(48),long(48));
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	EXSURFACELib::ILinkPtr var_Link = var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
		var_Link->PutStartPos(EXSURFACELib::DownAlignment);
		var_Link->PutEndPos(EXSURFACELib::UpAlignment);

102
How do I enable the cross link support ( mixed )

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(0),long(76));
	EXSURFACELib::IElementPtr var_Element = var_Elements->Add("Element <sha ;;0>C",long(-76),long(32));
		var_Element->PutAutoSize(VARIANT_FALSE);
		var_Element->PutHeight(32);
	EXSURFACELib::IElementPtr var_Element1 = var_Elements->Add("Element <sha ;;0>D",long(76),long(32));
		var_Element1->PutAutoSize(VARIANT_FALSE);
		var_Element1->PutHeight(32);
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	EXSURFACELib::ILinkPtr var_Link = var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
		var_Link->PutStartPos(EXSURFACELib::CenterAlignment);
		var_Link->PutEndPos(EXSURFACELib::CenterAlignment);
	EXSURFACELib::ILinkPtr var_Link1 = var_Links->Add(spSurface1->GetElements()->GetItem(long(2)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
		var_Link1->PutStartPos(EXSURFACELib::CenterAlignment);
		var_Link1->PutEndPos(EXSURFACELib::CenterAlignment);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(4)),vtMissing);
	EXSURFACELib::ILinkPtr var_Link2 = var_Links->Add(spSurface1->GetElements()->GetItem(long(4)),spSurface1->GetElements()->GetItem(long(3)),vtMissing);
		var_Link2->PutStartPos(EXSURFACELib::LeftAlignment);
		var_Link2->PutEndPos(EXSURFACELib::RightAlignment);
spSurface1->PutShowLinks(EXSURFACELib::ShowExtendedLinksEnum(EXSURFACELib::exShowCrossLinksMixt | EXSURFACELib::exShowExtendedLinks));

101
How do I enable the cross link support ( triangular )

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Element <sha ;;0>A",vtMissing,vtMissing);
	var_Elements->Add("Element <sha ;;0>B",long(0),long(76));
	EXSURFACELib::IElementPtr var_Element = var_Elements->Add("Element <sha ;;0>C",long(-76),long(32));
		var_Element->PutAutoSize(VARIANT_FALSE);
		var_Element->PutHeight(32);
	EXSURFACELib::IElementPtr var_Element1 = var_Elements->Add("Element <sha ;;0>D",long(76),long(32));
		var_Element1->PutAutoSize(VARIANT_FALSE);
		var_Element1->PutHeight(32);
EXSURFACELib::ILinksPtr var_Links = spSurface1->GetLinks();
	EXSURFACELib::ILinkPtr var_Link = var_Links->Add(spSurface1->GetElements()->GetItem(long(1)),spSurface1->GetElements()->GetItem(long(2)),vtMissing);
		var_Link->PutStartPos(EXSURFACELib::CenterAlignment);
		var_Link->PutEndPos(EXSURFACELib::CenterAlignment);
	EXSURFACELib::ILinkPtr var_Link1 = var_Links->Add(spSurface1->GetElements()->GetItem(long(2)),spSurface1->GetElements()->GetItem(long(1)),vtMissing);
		var_Link1->PutStartPos(EXSURFACELib::CenterAlignment);
		var_Link1->PutEndPos(EXSURFACELib::CenterAlignment);
	var_Links->Add(spSurface1->GetElements()->GetItem(long(3)),spSurface1->GetElements()->GetItem(long(4)),vtMissing);
	EXSURFACELib::ILinkPtr var_Link2 = var_Links->Add(spSurface1->GetElements()->GetItem(long(4)),spSurface1->GetElements()->GetItem(long(3)),vtMissing);
		var_Link2->PutStartPos(EXSURFACELib::LeftAlignment);
		var_Link2->PutEndPos(EXSURFACELib::RightAlignment);
spSurface1->PutShowLinks(EXSURFACELib::ShowExtendedLinksEnum(EXSURFACELib::exShowCrossLinksTriangle | EXSURFACELib::exShowExtendedLinks));