Как открыть диалоговое окно моих приложений и сфокусироваться на текущем запущенном приложении? - PullRequest
0 голосов
/ 09 июня 2010

Я знаю, что на подобные вещи смотрят негативно, но я пишу программное обеспечение для людей с ограниченными возможностями, и иногда хорошие методы работы с графическим интерфейсом не имеют смысла. В этом случае пользователь взаимодействует со вспомогательным интерфейсом, и при определенных условиях мое управляющее приложение должно задать пользователю вопрос. Мой фоновый процесс создает диалог (я использую wxwidgets класс wxDialog) и вызывает Show (). Диалоговое окно появляется, но у него нет фокуса (приложение, которое ранее использовал пользователь, сохраняет его). Так как мои пользователи не могут использовать мышей, они не могут просто щелкнуть окно. Я попытался вызвать шоу, а затем последовал SetFocus (HWND), но это не сработало. В чем проблема? Это вообще возможно? Window7. Я думаю, что это может быть связано с тем, что это диалог, а не полное окно (wxFrame). Любая помощь с благодарностью.

Ответы [ 3 ]

0 голосов
/ 06 января 2011

К сожалению, это не только «негативно», но и невозможно. Там нет обойти это; спросите себя, что произойдет, если каждое приложение может сделать это? Очевидно, что если вы можете поместить свой диалог поверх другого приложения, он может сделать то же самое для вас.

http://blogs.msdn.com/b/oldnewthing/archive/2010/11/25/10096329.aspx

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

0 голосов
/ 06 января 2011

Я должен был сделать что-то подобное раньше. Просто вызов функций, таких как SetForegroundWindow или SetWindowPos, не помогли.

В итоге я использовал эту ForceForegroundWindow функцию (1-ю), и она работает довольно хорошо.

Я знаю, что это код Delphi, но API тот же, а Delphi - довольно простой язык.

0 голосов
/ 10 июня 2010

Попробуйте использовать SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE)

...