打開了一些窗口,並從我的過程中,我想要啓動一個窗口(高優先級),其中用戶必須輸入憑證。我想把這個憑證窗口放到前臺,反過來它可能給用戶帶來很好的體驗,因爲他不需要手動選擇憑證窗口。這是一次啓動,絕對不是煩人的,但用戶輸入信用是強制性的。如何在前臺投影我的窗口爲活動窗口
實現此目標的最佳方法是什麼?我不認爲模擬鼠標點擊是個好主意。有沒有辦法發送msg到其餘的窗口失去他們的焦點?所以當我啓動我的窗口時,它將成爲前景。
打開了一些窗口,並從我的過程中,我想要啓動一個窗口(高優先級),其中用戶必須輸入憑證。我想把這個憑證窗口放到前臺,反過來它可能給用戶帶來很好的體驗,因爲他不需要手動選擇憑證窗口。這是一次啓動,絕對不是煩人的,但用戶輸入信用是強制性的。如何在前臺投影我的窗口爲活動窗口
實現此目標的最佳方法是什麼?我不認爲模擬鼠標點擊是個好主意。有沒有辦法發送msg到其餘的窗口失去他們的焦點?所以當我啓動我的窗口時,它將成爲前景。
這對我的作品,而不必使用SetWindowPos
使「總在最前面」窗口:
HWND foreGround = GetForegroundWindow();
if (foreGround != m_hWnd)
{
if (!::SetForegroundWindow(m_hWnd))
{
if (!foreGround)
{
foreGround = FindWindow(_T("Shell_TrayWnd"), NULL);
}
DWORD idForeground = GetWindowThreadProcessId(foreGround, NULL);
DWORD idTarget = GetWindowThreadProcessId(m_hWnd, NULL);
AttachThreadInput(idForeground, idTarget, TRUE);
::SetForegroundWindow(m_hWnd);
AttachThreadInput(idForeground, idTarget, FALSE);
}
BringWindowToTop();
}
我在一個聊天應用程序使用此所以新的聊天消息可以偷焦點(可選明顯一些用戶不喜歡這樣)。
您需要撥打SetWindowPos並使用wndTopMost
參數將您的窗口設置在所有其他窗口的頂部。
此UI模式(用於輸入必需值的窗口)通常稱爲模式對話框。在MFC中,你會尋找CDialog::DoModal
。即您從CDialog
派生憑據窗口,然後調用繼承的DoModal
方法。
模式對話框會阻止您的應用程序中其他窗口中的用戶輸入,因此會在阻止的窗口之前自動移動。