Всплывающие подсказки с использованием Shell_NotifyIcon работают в Vista, но не в XP

У меня есть код, который выводит всплывающую подсказку. Он работает в Vista, но не в Windows 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);

когда время истекает, это выполняется:

Shell_NotifyIcon(NIM_DELETE, &m_notifyData);

Любые идеи, почему XP не показывает сообщение?


person max    schedule 30.03.2009    source источник


Ответы (1)


m_notifyData.cbSize = sizeof(NOTIFYICONDATA);

Должно быть

m_notifyData.cbSize = NOTIFYICONDATA_V2_SIZE

Vista добавила несколько членов в дополнение к тому, что предоставила XP. Размер используется, чтобы указать, какую версию структуры вы передаете. XP отклоняет его, так как размер не распознается.

person Michael    schedule 30.03.2009
comment
Вау! Я, наверное, потратил 5 часов, пытаясь почти все на этом. Спасибо, спасибо, спасибо. Работает отлично. - person max; 31.03.2009