Flash任务栏图标,无需将应用程序带到前台

时间:2017-01-19 08:39:15

标签: windows mfc taskbar

我已经查看了在任务栏中闪烁应用程序图标的各种解决方案,但它们都在最小化时将窗口置于前台。到目前为止我做了什么:

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上测试应用程序,所以这也可能是一个原因,但从文档来看,它不应该是。

那么我错过了什么或做错了什么?

1 个答案:

答案 0 :(得分:0)

info.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG;

FLASHW_TIMERNOFG表示"连续闪光,直到窗口到达前景,"所以你可能只想要FLASHW_TRAY标志。

*编辑:发现了一些疯狂的事情

这很奇怪,与我期望的任何东西相反,但它在测试中出现并且似乎值得一提:

::SetForegroundWindow(info.hwnd);

删除突出显示但不恢复窗口。至少,对我来说。

我在调用Sleep()

之前让它SetForegroundWindow闪烁几秒钟