Posted on May 11, 2025
Recently, I started playing Super Smash Bros. Melee online, maining Bowser. Yeah, if you
know competitive Melee you know that Bowser IS the worst character of the game but I have
faith in him. 💪
While playing Melee on Dolphin Emulator, I noticed a handy feature. Dolphin allows the user
to display the Ping, the Time, the FPS and more information on the screen.
The "Time Display" really helped me know what time without having to leave the game. That
feature gave me an idea - why not making a tool that can display essential information
(like time, date and battery) on top of the screen?
And so, VOverlay was born. A lightweight tool that keeps you informed without interrupting
whatever you're doing.
How It Was Coded
VOverlay needed to be lightweight if I wanted it to run on video games, so I chose Legacy
OpenGL, as it is very minimal (and because modern OpenGL is a mess).
The app is built around the MainWindow component, a transparent window that is always-on-top
SetLayeredWindowAttributes(m_hwnd, RGB(8, 8, 8), 0, LWA_COLORKEY); // RGB(8, 8, 8) is the transparent color
The other components are:
- TimeDisplay: A Display component that shows the current local time.
- DateDisplay: A Display component that shows the current local date.
- BatteryDisplay: A Display component that shows the current battery percentage.
Then, there is the TrayIcon: the system tray icon to hide/show VOverlay and close it.
It runs in its own thread because it has a main loop to keep it running.
Creating VOverlay taught me a lot about organizing code and handling transparency with the Win32 API.