2009-03-30 4 views
2

J'ai du code qui fait apparaître une bulle. Cela fonctionne sur Vista mais pas sur Windows XP. C'est le code jusqu'ici. Cela fonctionne sur Vista mais pas sur XP. Je ne peux pas comprendre pourquoi. Cette version ne charge pas l'icône pour qu'elle apparaisse vide.Les infobulles de bulle utilisant Shell_NotifyIcon fonctionnent sur Vista, mais pas sur XP

memset(&m_notifyData, 0, sizeof(NOTIFYICONDATA)); 
m_notifyData.cbSize = sizeof(NOTIFYICONDATA); 
m_notifyData.uFlags = NIF_INFO | NIF_MESSAGE; 
m_notifyData.hWnd = (HWND) m_preference_window->GetHWND(); 
m_notifyData.uID = 99; 
m_notifyData.uTimeout = timeout; 
m_notifyData.dwInfoFlags = NIIF_NOSOUND | NIIF_INFO; 

wxStrncpy(m_notifyData.szInfo, message.c_str(), WXSIZEOF(m_notifyData.szInfo)); 
wxStrncpy(m_notifyData.szInfoTitle, title.c_str(),WXSIZEOF(m_notifyData.szInfoTitle)); 

Shell_NotifyIcon(NIM_ADD, &m_notifyData); 

wxLogMessage("Balloon timeout is %i", timeout); 
m_timer_balloon->Start(timeout, true); 

lorsque le temps court, c'est exécuté:

Shell_NotifyIcon(NIM_DELETE, &m_notifyData); 

Toutes les idées pourquoi XP ne montre pas le message?

Répondre

9
m_notifyData.cbSize = sizeof(NOTIFYICONDATA); 

devrait être

m_notifyData.cbSize = NOTIFYICONDATA_V2_SIZE 

Vista a ajouté plusieurs membres au-dessus de ce que XP fourni. La taille est utilisée pour indiquer quelle version de la structure que vous passez. XP le rejette, car la taille n'est pas reconnue.

+0

Woow! J'ai probablement passé 5 heures à essayer presque tout sur celui-ci. Merci, merci, merci. Fonctionne parfaitement. – max

+0

@ Michael belle prise! – Martlark

+0

génial, a travaillé comme un charme pour moi! – evargas

Questions connexes