Автоматически перемещать фокус между диалогами

У меня есть модальный диалог, который показывает немодальный «сопутствующий диалог» при нажатии кнопки. Чтобы сделать пользовательский интерфейс более интуитивно понятным и плавным, я бы хотел, чтобы фокус следовал за мышью и перемещался между диалоговыми окнами, не требуя дополнительного щелчка.

Есть ли простой обработчик сообщений, который поможет здесь? Я думаю, что мог бы сделать это, используя TrackMouseEvent и OnMouseHover в каждом диалоговом окне, но это кажется довольно сложным для такого «простого» эффекта?


person Kyudos    schedule 17.09.2020    source источник


Ответы (1)


ОК... значит, я совсем забыл об этом! Просто используйте OnMouseMove и OnNcMouseMove:

//------------------------------------------------------------------------------
void DlgA::OnMouseMove(UINT nFlags, CPoint point)
//------------------------------------------------------------------------------
{
    HWND hwnd = ::GetActiveWindow();
    if (pDlgB != NULL)
    {
        if (hwnd == pDlgB->GetSafeHwnd())
        {
            // Make the focus switch automatically
            SetFocus();
        }
    }
}
person Kyudos    schedule 17.09.2020
comment
Хотя, даже если все сделано правильно, это запустит флеш-метель на панели задач, если вы когда-нибудь решите переключиться на другой поток, например. окно другого приложения. - person IInspectable; 18.09.2020
comment
@IInspectable - не понимаю, с чего бы это? Он переключает фокус с одного на другое только в том случае, если один (или другой) уже имеет фокус. Если фокус находится в другом месте, он ничего не сделает. - person Kyudos; 21.09.2020