打开了一些窗口,并从我的过程中,我想要启动一个窗口(高优先级),其中用户必须输入凭证。我想把这个凭证窗口放到前台,反过来它可能给用户带来很好的体验,因为他不需要手动选择凭证窗口。这是一次启动,绝对不是烦人的,但用户输入信用是强制性的。如何在前台投影我的窗口为活动窗口
实现此目标的最佳方法是什么?我不认为模拟鼠标点击是个好主意。有没有办法发送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
方法。
模式对话框会阻止您的应用程序中其他窗口中的用户输入,因此会在阻止的窗口之前自动移动。