如何设置窗口临时显示到桌面最前面?
关键点: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);
}
本文详细介绍了如何使用win32api中的AttachThreadInput和SetForegroundWindow函数,使窗口在所有其他应用程序窗口之上显示,即使在非debug模式下也能成功获取焦点并显示在前台。通过共享输入队列的方法,确保了窗口的置顶效果。
3203





