windows - Flash-proceslinjeikon uden at bringe applikationen til forgrunden

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har kigget på de forskellige løsninger til at blinke et applikationsikon i proceslinjen, men alle bringer vinduet til forgrunden, når det minimeres. Hvad jeg har gjort indtil videre:


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);
}


I den funktion, hvor dialogen vises, har jeg følgende:


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;
}


Jeg tester applikationen på Windows 10, så det kan også være en grund, selv om det fra dokumentationen ikke burde være.


Så hvad mangler jeg eller gør galt?

Bedste reference


info.dwFlags = FLASHW\_TRAY | FLASHW\_TIMERNOFG;


FLASHW\_TIMERNOFG betyder 'Flash kontinuerligt indtil vinduet kommer til forgrunden', så du kan kun have FLASHW\_TRAY flag.


* Rediger: fundet noget skørt *


Dette er mærkeligt, og det modsatte af alt, hvad jeg ville forvente, men det kom op med at teste og syntes værd at nævne:


::SetForegroundWindow(info.hwnd);


fjerner højdepunktet uden at genvinde vinduet. I hvert fald for mig.


Jeg lader det Sleep() i et par sekunder, mens du blinker, før du ringer SetForegroundWindow