如何设置窗口临时显示到桌面最前面?
关键点:win32 api--AttachThreadInput,SetForegroundWindow
实现代码:
void CMainFrame::BringMainwndToForeground()
{
//说明:SetForegroundWindow在debug模式一直成功,非debug模式会有失败的情况,解决方法是利用AttachThreadInput
//AttachThreadInput这个函数可以使两个线程的输入队列共享。
//如果我们把当前的焦点的输入队列跟我们要显示的窗口的输入队列共享,
//我们就可以让我们的窗口SetForegroundWindow 成功,然后成功 获得焦点,显示在前台
HWND hForgroundWnd = GetForegroundWindow();
DWORD dwForeID = ::GetWindowThreadProcessId(hForgroundWnd, NULL);
DWORD dwCurID = ::GetCurrentThreadId();
::AttachThreadInput(dwCurID, dwForeID, TRUE);
::ShowWindow(m_hWnd, SW_SHOWNORMAL);
::SetForegroundWindow(m_hWnd);
::AttachThreadInput(dwCurID, dwForeID, FALSE);
}