x
This website is using cookies. We use cookies to ensure that we give you the best experience on our website. More info. That's Fine
HPC:Factor Logo 
 
Latest Forum Activity

Minimize your eVB application to the taskbar status area (systray)

WinCEDev Page Icon Posted 2023-02-12 1:37 AM
#
Avatar image of WinCEDev
Factorite (Senior)

Posts:
76
Location:
Europe
Status:
Here I am again with a new eVB example project.

This module is similar in purpose to the Taskbar Icon example, but it adds an icon to the taskbar status area (or systray). You can respond to taps and double-taps, currently right 'click' doesn't seem to work.

While eVB does not have the ability to subclass forms and inspect or modify window messages, the way this works is by (ab)using the MouseDown event of the form. The Shell_NotifyIcon API function lets you specify which window message to send when the user interacts with your icon. eVB is already handling the mouse related event messages so this message will appear as a regular MouseDown message to your form. The example project includes code to differentiate between regular MouseDown messages and ones triggered from the notify icon, so you'll be able to handle both appropriately.

This method is similar to the approach Microsoft used in Q176085, which I used as a reference for this module. However, unlike the article, I had to use the MouseDown event instead of MouseMove, because Windows CE seems to handle these messages differently and sending WM_MOUSEMOVE does not trigger the corresponding event in eVB.

An interesting side note is that the Microsoft article claims that this functionality is possible due to the new abilities of VB5/VB6 (most notably the AddressOf operator). However, the given example does not make use of these functionalities at all, and in theory would work just as well in VB4 (or indeed, eVB).

To use this module, add an ImageList to your form, add the image(s) as per normal, then call the NotifyIcon_Add function whenever you want to show the icon. You can use NotifyIcon_Modify to change the currently displayed icon, and NotifyIcon_Remove to remove it from the tray. The example project demonstrates all of these functions.

Make sure to always call NotifyIcon_Remove when your application ends, or the icon will remain until the user taps on it to make it go away, in addition, memory may be leaked because icon handles will not be properly cleaned up.

Currently, only one icon is supported per application.

A complete application could look like this:

Option Explicit 
 
Private Sub Form_Load()

ImageList.Add "icon_small.bmp"

End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

'This procedure receives the callbacks from the System Tray icon.
Dim lngResult As Long

Dim lngMessage As Long

'The value of X will vary depending upon the scalemode setting.
If ScaleMode = vbPixels Then
lngMessage = X
Else
lngMessage = X / Screen.TwipsPerPixelX
End If

Select Case lngMessage

Case WM_LBUTTONUP 'The user has tapped on the icon once.
Show
NotifyIcon_Remove

Case WM_LBUTTONDBLCLK 'The user has double-tapped on the icon.
Show
NotifyIcon_Remove

Case WM_RBUTTONUP 'The user has tapped on the icon while holding Ctrl, does not seem to work for now.
Show
NotifyIcon_Remove
End Select

End Sub

Private Sub Form_Unload(Cancel As Integer)
Hide
NotifyIcon_Add hWnd, ImageList.hImageList, 0
Cancel = 1
End Sub


I am still looking into the ability of displaying popup menus.
I have attached a screenshot of the example application when visible (no tray icon) and minimized to the tray.

Just like the taskbar icon example, this is bound to the same limitations as other icons represented by the eVB ImageList. Most notably, transparency is not allowed.

Links:

GitHub Repo

Edited by WinCEDev 2023-02-12 2:20 AM




(CAPT0000.png)



(CAPT0001.png)



Attachments
----------------
Attachments CAPT0000.png (3KB - 1 downloads)
Attachments CAPT0001.png (3KB - 1 downloads)
 Top of the page
torch Page Icon Posted 2023-02-12 4:40 AM
#
Avatar image of torch
Subscribers
H/PC Guru

Posts:
5,731
Location:
United StatesĀ 
Status:
Nice work! Great going
 Top of the page
Jump to forum:
Seconds to generate: 0.156 - Cached queries : 59 - Executed queries : 10