NOTIFYICONDATA

02/08/2005 - 10:12 por Kapsule | Informe spam
Buenos días.

Estoy generando un pequeño exe en el cual quiero utilizars el sistema
NOTIFYICONDATA, pero me encuentro con un problema. No soy capaz de que me
genere BALLONS y no se porque ya que tengo WinXp Prof. La estructura que
utilizo es esta:

NOTIFYICONDATA* pnidIconInfo = new NOTIFYICONDATA;

memset(pnidIconInfo, 0, sizeof(NOTIFYICONDATA));

ASSERT(hIcon != NULL);
ASSERT(::strcmp(szTip, _T("")) != 0); // Sure that icon tip == "" ??

if (hIcon != NULL)
{
pnidIconInfo->hIcon = hIcon;
pnidIconInfo->hWnd = this->GetSafeHwnd();
pnidIconInfo->uCallbackMessage = WM_SYSTRAYMSG;
pnidIconInfo->uID = nIconID;
pnidIconInfo->cbSize = sizeof(NOTIFYICONDATA);
pnidIconInfo->uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

strcpy(pnidIconInfo->szTip, szTip);

#if (_WIN32_IE>=0x0500)
strcpy(pnidIconInfo->szInfoTitle, szTip);
pnidIconInfo->uTimeout = 10000;
pnidIconInfo->dwInfoFlags = NIIF_INFO;
#endif

Shell_NotifyIcon(NIM_ADD, pnidIconInfo);
}

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral [MVP]
02/08/2005 - 10:52 | Informe spam
¿Esta definido adecuadamente _WIN32_IE en tu proyecto? Piensa que solo si su
valor es 0x500 o más se compilará el código que proboca que se muestre el
balón.

Aqui tienes más info
http://msdn.microsoft.com/msdnmag/i...ault.aspx, aunque creo
que el problema es la definicion de _WIN32_IE.

Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
Respuesta Responder a este mensaje
#2 Isidro Muñoz
02/08/2005 - 21:36 | Informe spam
Hola Kapsule,
Creo que tienes que llamar con la opcion NIM_SETVERSION

Shell_NotifyIcon(NIM_ADD | NIM_SETVERSION, pnidIconInfo);
Y en pnidIconInfo->uVersion tienes que ponerle un valor.

Mira la msdn porque hace referenci a que si no le pasas el NIM_SETVERSION
por defecto toma las versiones antiguas que no tienen esa caracteristica.

Saludos
Isidro

"Kapsule" escribió en el mensaje
news:
Buenos días.

Estoy generando un pequeño exe en el cual quiero utilizars el sistema
NOTIFYICONDATA, pero me encuentro con un problema. No soy capaz de que me
genere BALLONS y no se porque ya que tengo WinXp Prof. La estructura que
utilizo es esta:

NOTIFYICONDATA* pnidIconInfo = new NOTIFYICONDATA;

memset(pnidIconInfo, 0, sizeof(NOTIFYICONDATA));

ASSERT(hIcon != NULL);
ASSERT(::strcmp(szTip, _T("")) != 0); // Sure that icon tip == "" ??

if (hIcon != NULL)
{
pnidIconInfo->hIcon = hIcon;
pnidIconInfo->hWnd = this->GetSafeHwnd();
pnidIconInfo->uCallbackMessage = WM_SYSTRAYMSG;
pnidIconInfo->uID = nIconID;
pnidIconInfo->cbSize = sizeof(NOTIFYICONDATA);
pnidIconInfo->uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

strcpy(pnidIconInfo->szTip, szTip);

#if (_WIN32_IE>=0x0500)
strcpy(pnidIconInfo->szInfoTitle, szTip);
pnidIconInfo->uTimeout = 10000;
pnidIconInfo->dwInfoFlags = NIIF_INFO;
#endif

Shell_NotifyIcon(NIM_ADD, pnidIconInfo);
}

Muchas gracias.

Respuesta Responder a este mensaje
#3 Kapsule
03/08/2005 - 13:41 | Informe spam
Buenos días.

Lo que me he dado cuenta es que si utilizo la parte de codigo que os pase en
un projecto de VC 6.0 me funciona, y si lo paso al VS 2002 tambien. El
problema biene cuando creo un projecto nuevo en VS 2002 y intento cargar el
codigo.

Me podeis decir el porque? No lo entiendo.

Gracias, y un saludo.

"Isidro Muñoz" escribió:

Hola Kapsule,
Creo que tienes que llamar con la opcion NIM_SETVERSION

Shell_NotifyIcon(NIM_ADD | NIM_SETVERSION, pnidIconInfo);
Y en pnidIconInfo->uVersion tienes que ponerle un valor.

Mira la msdn porque hace referenci a que si no le pasas el NIM_SETVERSION
por defecto toma las versiones antiguas que no tienen esa caracteristica.

Saludos
Isidro

"Kapsule" escribió en el mensaje
news:
> Buenos días.
>
> Estoy generando un pequeño exe en el cual quiero utilizars el sistema
> NOTIFYICONDATA, pero me encuentro con un problema. No soy capaz de que me
> genere BALLONS y no se porque ya que tengo WinXp Prof. La estructura que
> utilizo es esta:
>
> NOTIFYICONDATA* pnidIconInfo = new NOTIFYICONDATA;
>
> memset(pnidIconInfo, 0, sizeof(NOTIFYICONDATA));
>
> ASSERT(hIcon != NULL);
> ASSERT(::strcmp(szTip, _T("")) != 0); // Sure that icon tip == "" ??
>
> if (hIcon != NULL)
> {
> pnidIconInfo->hIcon = hIcon;
> pnidIconInfo->hWnd = this->GetSafeHwnd();
> pnidIconInfo->uCallbackMessage = WM_SYSTRAYMSG;
> pnidIconInfo->uID = nIconID;
> pnidIconInfo->cbSize = sizeof(NOTIFYICONDATA);
> pnidIconInfo->uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
>
> strcpy(pnidIconInfo->szTip, szTip);
>
> #if (_WIN32_IE>=0x0500)
> strcpy(pnidIconInfo->szInfoTitle, szTip);
> pnidIconInfo->uTimeout = 10000;
> pnidIconInfo->dwInfoFlags = NIIF_INFO;
> #endif
>
> Shell_NotifyIcon(NIM_ADD, pnidIconInfo);
> }
>
> Muchas gracias.
>




Respuesta Responder a este mensaje
#4 Rodrigo Corral [MVP]
03/08/2005 - 16:51 | Informe spam
Quita la compilación condicional

Cambia

#if (_WIN32_IE>=0x0500)
strcpy(pnidIconInfo->szInfoTitle, szTip);
pnidIconInfo->uTimeout = 10000;
pnidIconInfo->dwInfoFlags = NIIF_INFO;
#endif

por

strcpy(pnidIconInfo->szInfoTitle, szTip);
pnidIconInfo->uTimeout = 10000;
pnidIconInfo->dwInfoFlags = NIIF_INFO;

y cuentanos si tu proyecto compila, si no compila, pon los errores.


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida