как спроектировать мое окно как активное окно на переднем плане - PullRequest
2 голосов
/ 28 апреля 2011

Было открыто несколько окон, и из моего процесса я хочу запустить еще одно окно (высокий приоритет), в котором пользователь должен ввести учетные данные.И я хочу поставить это окно учетных данных на передний план, в свою очередь, это может дать пользователю хороший опыт, так как ему не нужно вручную выбирать окно учетных данных.И это одноразовый запуск, определенно не раздражающий, а обязательный для пользователя ввод кредитов.

каков наилучший способ достичь этого?Я не думаю, что имитация щелчка мышью - это хорошая идея.Есть ли способ отправить сообщение в остальные окна, чтобы потерять фокус?так что, когда я запускаю свое окно, оно выходит на передний план.

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

Это работает для меня без необходимости использовать 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();
}

Я использую это в приложении чата, чтобы новое сообщение чата могло украсть фокус (необязательно, поскольку некоторым пользователям это не нравится).

0 голосов
/ 28 апреля 2011

Этот шаблон пользовательского интерфейса (окно для ввода обязательных значений) обычно известен как модальное диалоговое окно .В MFC вы бы искали CDialog::DoModal.Т.е. вы выводите окно учетных данных из CDialog, а затем вызываете унаследованный метод DoModal.

Модальное диалоговое окно блокирует пользовательский ввод в других окнах вашего приложения и поэтому автоматически перемещается перед заблокированными окнами.

0 голосов
/ 28 апреля 2011

Вам нужно вызвать SetWindowPos с параметром wndTopMost, чтобы установить ваше окно поверх всех остальных окон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...