如何設置窗口臨時顯示到桌面最前面?
關鍵點: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);
}