Мой код для отображения всплывающей подсказки:
BOOL CTrayIcon :: ShowBaloon (название LPCTSTR, текст LPCTSTR, HICON hIcon) { BOOL bRes = FALSE; if (m_hWnd! = NULL) { NOTIFYICONDATA nfidata = {sizeof (NOTIFYICONDATA)}; nfidata.cbSize = sizeof (nfidata); nfidata.hWnd = m_hWnd; nfidata.guidItem = guid; nfidata.uFlags = NIF_INFO | NIF_GUID; if (hIcon) { nfidata.hBalloonIcon = hIcon; nfidata.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON; } StringCchCopy (nfidata.szInfo, ARRAYSIZE (nfidata.szInfo), текст); StringCchCopy (nfidata.szInfoTitle, ARRAYSIZE (nfidata.szInfoTitle), заголовок); bRes = Shell_NotifyIcon (NIM_MODIFY, nfidata); } вернуть брс; }
Проблема в том, что иногда шар отображается с 10-секундной задержкой. Это происходит только тогда, когда отладчик не подключен к приложению. Если я подключаю отладчик к приложению, то всплывающая подсказка отображается сразу. Я знаю, что Windows 7 управляет всплывающими подсказками иначе, чем в предыдущих версиях Win. Но где я могу прочитать больше об этом? И как я могу изменить это поведение? Мне нужно показать подсказку сразу после вызова функции. Или, может быть, есть какие-то альтернативы Shell_NotifyIcon?
Если важно, чтобы уведомление было просмотрено немедленно, например, уведомление о звонке по телефону, возможно, вам следует настроить NIF_REALTIME
флаг.
Однако следует помнить, что это также означает, что уведомление не будет отображаться вообще, если по какой-либо причине оно не может быть отображено немедленно. Предполагается, что если это уведомление в реальном времени, оно актуально только в тот момент, когда оно происходит.
Что-то вроде уведомления о том, что вы только что получили электронное письмо, не является событием в реальном времени.
Других решений пока нет …