The eXRadialMenu ( radial or pie menu) component is similar to the Microsoft's OneNote radial menu with ability to customize the appearance and functionality. The component is designed using tree structure so an item can hold none or more children, and so any item can be browsed, and show its children around it. An item can display a collection of child items, as well as a radial slider, or any other gauge / knob control.
"I would like to put the control on a form, then make the form transparent so the control appears on the desktop."
The control support transparent form, or in other words, displaying the
control's itself without its form behind.
The following screen shot shows the control on a transparent
form:
The following screen shot shows the control on an opaque form:
In order to make your eXRadialMenu control to display a popup/widget, ( no form
behind or form transparent ), you need to use the following properties:
Float property of the control, specifies whether the control is shown as float.
You can use the Float property on exRadialMenuFloat or exRadialMenuFloatTopmost,
to display the control as float ( places the control above all non-topmost
windows )
The setup installs the C:\Program Files\Exontrol\ExRadialMenu\Sample\VB\Float
or C:\Program Files\Exontrol\ExRadialMenu\Sample\VC\Float that shows all these working.
The following screen shot shows the transparent-control on a form:
In order to make your eXRadialMenu library to display a transparent-control
inside your form/dialog/window/child, you need to use the following properties:
LayerUpdate property of the control, indicates where the
control's content is updated. By default, the LayerUpdate property
property is exLayerUpdateControl, which indicates that the control's
content is shown on the control itself ( no effect ). If the
LayerUpdate property is exLayerUpdateParent, the control does not show
its background on the form that hosts it.
You need to add <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>,
to your manifest file as follows. The transparent-eXRadialMenu as a child
of your form, it is supported on Windows 8, and later.
The control provides the AllowMoveOnFloat property allows moving the control to a new position, when the user clicks and drags it over the screen, while it is floating ( Float property is
set to a non-zero value ).
The trick is sending the WM_NCLBUTTONDOWN message to the
form/dialog/window that hosts the control, when the MouseDown event of the
control occurs.
In VB, you need to use a snippet of code as follows:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Sub RadialMenu1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
SendMessage Me.hwnd, &HA1, 2, 0
End Sub
, when control's MouseDown event occurs, where the m_hWnd, is the
handle of the dialog that hosts the eXRadialMenu control, WM_NCLBUTTONDOWN is
defined as 0x00A1, and the HTCAPTION as 2.
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal
crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Boolean
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long,
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long,
ByVal nIndex As Long) As Long
Const LWA_ALPHA = 2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Private Sub Form_Load()
SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes hwnd, 0, 128, LWA_ALPHA
End Sub
The eXRadialMenu component supports hosting the eXGauge
control into any item. The eXGauge / eXLayers library provides graphics capabilities to visually display and edit the amount, level, or contents of something. The view can show one or more layers, where each layer can display one or more transparent pictures, HTML captions which can be clipped, moved, rotated or combination of them, by dragging the mouse, rolling the mouse wheel, or using the keyboard.
Using the eXGauge / eXLayers library you can can easily simulate any gauges, thermometers, meters, clocks, buttons, sliders, scales, knobs, dials, switches, progress, status, indicators, LEDs, and so on.
By default, the setup of eXRadialMenu component installs the ExGauge
sample, which shows how you can integrate the eXGauge component into the
eXRadialMenu component.
There are four requirements so you can integrate the eXGauge to
eXRadialMenu component like listed bellow:
The Version of the eXGauge component must be 13.0 or greater.
The BrowseType property of the eXRadialMenu is exBrowseItemCustom
The BrowseCustomType property is exRadialCustomGauge
The BrowseCustom(exRadialCustomGaugeHandle) property is set
to the hWnd property of the eXGauge component
If all these meet, you can integrate the eXGauge to any item of the
eXRadialMenu component and your component should look as: