我已经查看了在任务栏中闪烁应用程序图标的各种解决方案,但它们都在最小化时将窗口置于前台。到目前为止我做了什么:
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 :(得分:0)
info.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG;
FLASHW_TIMERNOFG
表示"连续闪光,直到窗口到达前景,"所以你可能只想要FLASHW_TRAY
标志。
*编辑:发现了一些疯狂的事情
这很奇怪,与我期望的任何东西相反,但它在测试中出现并且似乎值得一提:
::SetForegroundWindow(info.hwnd);
删除突出显示但不恢复窗口。至少,对我来说。
我在调用Sleep()
SetForegroundWindow
闪烁几秒钟