Link to home
Start Free TrialLog in
Avatar of wdbdesign
wdbdesignFlag for United States of America

asked on

Why aren't Shell_NotifyIcon balloon tips working?

According to everything I've seen, the following C++ program should be displaying a balloon tool tip from the tray icon when I left-click in the application window, yet it's not working. Can anyone tell me what I'm missing?

This is on XP with version 6.0 of Shell32.dll (verified with DllGetVersion).

Additionally, I do not have the registry key in HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced that turns off balloon tips.

Thanks!
#include "stdafx.h"
#include "shellapi.h"
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
	MSG msg;
 
	WNDCLASS wc;
	memset(&wc, 0, sizeof(wc));
	wc.lpfnWndProc = WndProc;
	wc.hInstance = hInstance;
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszClassName = "sysTrayTest";
	RegisterClass(&wc);
 
	HWND hWnd = CreateWindow("sysTrayTest", "", 
							WS_OVERLAPPEDWINDOW,
							CW_USEDEFAULT, 0, 500, 500, 
							NULL, NULL, hInstance, NULL);
	if (hWnd)
	{
		ShowWindow(hWnd, nCmdShow);
		while (GetMessage(&msg, NULL, 0, 0))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}
 
	return 0;
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_DESTROY:
		{
			NOTIFYICONDATA nid;
			memset(&nid, 0, sizeof(NOTIFYICONDATA));
			nid.cbSize = sizeof(NOTIFYICONDATA);
			nid.hWnd = hWnd;
			nid.uID = 1;
			Shell_NotifyIcon(NIM_DELETE, &nid);
		
			PostQuitMessage(0);
		}
		break;
 
		case WM_CREATE:
		{
			NOTIFYICONDATA nid;
			memset(&nid, 0, sizeof(NOTIFYICONDATA));
			nid.cbSize = sizeof(NOTIFYICONDATA);
			nid.hWnd = hWnd;
			nid.uID = 1;
			nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
			nid.uCallbackMessage = WM_USER + 200;
			nid.hIcon = LoadIcon(NULL, IDI_INFORMATION);
			lstrcpy (nid.szTip, "Test Tip");
			Shell_NotifyIcon(NIM_ADD, &nid);
		}
		break;
 
		case WM_LBUTTONDOWN:
		{
			NOTIFYICONDATA nid;
			memset(&nid, 0, sizeof(NOTIFYICONDATA));
			nid.cbSize = sizeof(NOTIFYICONDATA);
			nid.hWnd = hWnd;
			nid.uID = 1;
			nid.uFlags = NIF_INFO;
			lstrcpy(nid.szInfo, "Test balloon tip");
			lstrcpy(nid.szInfoTitle, "Test Title");
			nid.dwInfoFlags = NIIF_INFO;
			nid.uTimeout = 15000;
			Shell_NotifyIcon(NIM_MODIFY, &nid);
		}
		break;
 
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of wdbdesign
wdbdesign
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial