2017-01-19 2 views
0

Я рассмотрел различные решения для мигания значка приложения на панели задач, но все они приносят окно на передний план при минимизации. То, что я сделал до сих пор:Значок панели задач без приложения на передний план

void CNotifyDlg::FlashIcon() 
{ 
    FLASHWINFO info; 
    info.cbSize = sizeof(FLASHWINFO); 
    info.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG; 
    info.uCount = 5; 
    info.dwTimeout = 0; 
    info.hwnd = AfxGetMainWnd()->GetSafeHwnd(); 

    ::FlashWindowEx(&info); 
} 

В функции, где показано диалоговое окно, я следующее:

LRESULT CBaseViewGridCombos::OnShowNotify(WPARAM id, LPARAM cnt) 
{ 
    int newCount = getNotifyDlg(id)->addCount(cnt); 
    getNotifyDlg(id)->setText(getNotifyText(newCount)); 
    getNotifyDlg(id)->setDetails(getNotifyDetails()); 
    getNotifyDlg(id)->ShowWindow(SW_SHOWNA); 
    getNotifyDlg(id)->FlashIcon(); 

    //Other tries 
    //getNotifyDlg(id)->SetForegroundWindow(); 
    //getNotifyDlg(id)->SetFocus(); 
    //::SetForegroundWindow(AfxGetMainWnd()->GetSafeHwnd()); 
    //AfxGetMainWnd()->SetForegroundWindow(); 

    return 1; 
} 

Я тестирование приложения на Windows 10, так что может быть причина, хотя, из документации, этого не должно быть.

Итак, что мне не хватает или что-то не так?

ответ

0
info.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG; 

FLASHW_TIMERNOFG означает «Вспышка непрерывно, пока окно не выходит на первый план,» так что вы можете только хотите FLASHW_TRAY флаг.

* Edit: нашел что-то сумасшедшее *

Это странно, и противоположное, что я бы ожидать, но она пришла в тестировании и, казалось, стоит упомянуть:

::SetForegroundWindow(info.hwnd); 

удаляет выделите, не восстанавливая окно. По крайней мере для меня.

Я позволил ему Sleep() в течение нескольких секунд, пока мигает перед вызовом SetForegroundWindow

+0

С только 'FLASHW_TRAY' поведение такое же: всякий раз, когда уведомление запускает приложение на передний план. –

Смежные вопросы