win32 設置窗口臨時顯示到最前面

如何設置窗口臨時顯示到桌面最前面?

關鍵點: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);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章