SDK » Documentation » Graphics
SynthEdit supports two types of windows.

These are the plain regular windows as used in most applications. They are always rectangular and always obscure any window 'behind' them.
Advantages
Disadvantages

Created to support non-rectangular shapes, these are still actually rectangular but support transparent pixels. Here the red circle is partially transparent.
Advantages:
Disadvantages
Specify which type by deriving your module class from the appropriate base class. In your graphics class header file, and also in your XML file...
For a native window...
MyPluginGui.h
class MyGui : public SeGuiWindowsGfxBase
{
MyPlugin.xml
<Plugin id="SynthEdit Scope3" graphicsApi="HWND">
For a composited window...
class MyGui : public SeGuiCompositedGfxBase
{
<Plugin id="SynthEdit Scope3" graphicsApi="Composited">
You can customize SynthEdit's right-click context menu.

In your .h file...
virtual int32_t MP_STDCALL onCreateContextMenu();
virtual int32_t MP_STDCALL onContextMenu( int32_t selection );
In your .cpp file...
// Add custom items to right-click menu.
int32_t MyGui::onCreateContextMenu()
{
getHost()->addContextMenuItem( L"Cat", 0, 0 );
getHost()->addContextMenuItem( L"Dog", 1, 0 );
return gmpi::MP_OK;
}
// act on user selecting right-click item.
int32_t MyGui::onContextMenu( int32_t selection )
{
switch( selection )
{
case 0:
// 'Cat' selected
break;
case 1:
// 'Dog' selected
break;
}
return gmpi::MP_OK;
}
To override SynthEdit's right-click handler. NOTE: If possible please avoid doing this as it disables SynthEdit's pop up menu system.
In your .h file...
// This handles the Windows message loop.
// Add here to override right-click behavior.
virtual LRESULT MsgProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );
int32_t onRButtonDown( UINT flags, POINT point );
int32_t onRButtonUp( UINT flags, POINT point );
In your .cpp file...
// Test overriding right-click handling.
// WARNING: This will disable SynthEdit's right-click menu. If possible please avoid taking
// right-click for your own use.
LRESULT MyGui::MsgProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch (message)
{
case (WM_RBUTTONDOWN):
{
POINT p;
p.x = MAKEPOINTS(lParam).x;
p.y = MAKEPOINTS(lParam).y;
onRButtonDown( (UINT) wParam, p );
}
return 1;
break;
case (WM_RBUTTONUP):
{
POINT p;
p.x = MAKEPOINTS(lParam).x;
p.y = MAKEPOINTS(lParam).y;
onRButtonUp( (UINT) wParam, p );
}
return 1;
break;
default:
return SeGuiWindowsGfxBase::MsgProc( hwnd, message, wParam, lParam );
break;
}
}
int32_t MyGui::onRButtonDown( UINT flags, POINT point )
{
return gmpi::MP_OK;
}
int32_t MyGui::onRButtonUp( UINT flags, POINT point )
{
return gmpi::MP_OK;
}