2013-05-29 6 views
0

내 코드가 지연 :Shell_NotifyIcon : 풍선 툴팁은 10 초 후에 표시됩니다 풍선 툴팁을 보여

 
BOOL CTrayIcon::ShowBaloon(LPCTSTR title, LPCTSTR text, 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), text); 
     StringCchCopy(nfidata.szInfoTitle, ARRAYSIZE(nfidata.szInfoTitle), title); 
     bRes = Shell_NotifyIcon(NIM_MODIFY, &nfidata); 
    } 
    return bRes; 
} 

문제는 때때로 풍선 10 초 지연 후 표시되는 것입니다. 디버거가 응용 프로그램에 연결되어 있지 않은 경우에만 발생합니다. 디버거를 앱에 연결하면 툴팁이 즉시 표시됩니다. 나는 Windows 7이 이전 Win 버전과 다른 방식으로 풍선 툴팁을 관리한다는 것을 알고 있습니다. 그러나 이것에 대해 더 자세히 읽을 수있는 곳은 어디입니까? 어떻게이 행동을 바꿀 수 있습니까? 함수 호출 직후 툴팁을 표시해야합니다. 아니면 Shell_NotifyIcon에 대한 대안이 있습니까?

+0

이미 다른 알림이 표시되고 있습니까? 운영 체제는 한 번에 하나씩 만 표시 할 수 있으므로 비 실시간 알림은 대기열에 배치되고 순서대로 표시되므로 지연이 발생할 수 있습니다. –

+0

아니요, 다른 알림이 없습니다. – Serg

답변

0

예를 들어 전화 벨소리 알림과 같이 알림을 즉시보아야하는 경우 NIF_REALTIME 플래그를 설정해야합니다.

그러나 이는 어떤 이유로 인해 즉시 표시 할 수없는 경우에도 알림이 전혀 표시되지 않는다는 것을 의미합니다. 실시간 알림 인 경우 해당 정보가 발생하는 시점에만 관련이 있다고 가정합니다.

전자 메일을받은 방도와 같은 것이 실시간 이벤트가 아닙니다.

+0

이미 NIF_REALTIME 플래그를 사용해 보았습니다. 이 경우 도구 설명이 전혀 표시되지 않습니다. – Serg

+0

알림이 즉시 나타나지 않도록하는 코드 (또는 OS 자체)에 뭔가가있는 것이 맞습니다. 아무 것도하지 않고 알림을 게시하는 아주 간단한 응용 프로그램을 만들려고 했습니까? 예를 들어 UI 스레드를 차단하는 것과 같이 지연을 초래하는 것과 같이 응용 프로그램에서 다른 것이 있는지 확인하는 데 도움이 될 수 있습니다. –

+0

나는 시도 할 것이지만, 내가 볼 수있는 것처럼 스레드는 차단되지 않습니다. 응용 프로그램은 모든 UI 상호 작용을 처리하고 정상적으로 작동합니다. – Serg