Win32, C ++: создание всплывающего окна без кражи фокуса - PullRequest
9 голосов
/ 12 мая 2009

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

Способ, которым я делаю это сейчас, заключается в использовании HWND с WS_POPUPWINDOW и сворачивании, а затем восстановлении окна. Тем не менее, это отвлекает внимание от текущего приложения. Установка переднего плана или скрытие и показ окна не делали его отображением на переднем плане. Я хотел бы иметь возможность продолжать использовать HWND, чтобы я мог использовать другие элементы в этом окне, но я не знаю, как выделить его на переднем плане, не украдя фокус.

Я использую win32 и c ++.

Ответы [ 2 ]

23 голосов
/ 12 мая 2009

Показать без активации:

ShowWindow(hwnd, SW_SHOWNOACTIVATE);

Чтобы поднять без активации:

SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
0 голосов
/ 13 июля 2018

К сожалению, это не работает для меня. Окно создается с помощью CreateWindowExA и отображается с использованием ShowWindow (hwnd, SW_SHOWNOACTIVATE) , однако фокус клавиатуры все еще украден из окна, которое имеет фокус в момент создания. (Окно создается со слоистыми и прозрачными атрибутами с использованием SetWindowLong () и SetLayeredWindowAttributes () ).

PS: окно, которое имеет фокус, не является родителем нового созданного окна.

Решено: Это сработало, когда я удалил вызов SetForegroundWindow . Эта функция вызывает активацию окна, переданного как параметр.

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