After checking Microsoft's documentation on system tray icons (that I could find):
I've noticed that a window handle (HWND) is REQUIRED. This is very bad for what I'm trying to accomplish, as I'm looking to create a program that only reacts to the system tray: it doesn't "minimize" the window to the tray, it just uses notifications (clicking/right clicking on the icon) to interact.
How would I go about doing this?
The Windows 7 SDK contains an example called NotificationIcon. This example contains a line
ShowWindow(hwnd, nCmdShow);
in its wWinMain
function. The effect of this call is that you see a program window.
Just change this line to
ShowWindow(hwnd, SW_HIDE);
to hide the program window and only display the icon in the system tray. As others have pointed out the program needs a program window, even if it is not visible.