Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Why aren't Shell_NotifyIcon balloon tips working?

Posted on 2009-04-22
1
Medium Priority
?
1,741 Views
Last Modified: 2013-12-14
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

0
Comment
Question by:wdbdesign
1 Comment
 
LVL 1

Accepted Solution

by:
wdbdesign earned 0 total points
ID: 24210128
Bah, I figured it out.  For some reason with the headers I have...

sizeof(NOTIFYICONDATA) == 508

whereas...

NOTIFYICONDATA_V3_SIZE == 504
NOTIFYICONDATA_V2_SIZE == 488
NOTIFYICONDATA_V1_SIZE == 88

If I specify either V2 or V3 instead of sizeof(NOTIFYICONDATA) the balloon tips show up just fine.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For a while now I'v been searching for a circular progress control, much like the one you get when first starting your Silverlight application. I found a couple that were written in WPF and there were a few written in Silverlight, but all appeared o…
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

571 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question