Вниз  Qt4/WinApi как установить фокус окну при определенных условиях?
- 21.08.2015 / 16:58
NeiroNext
  Пользователь

NeiroNext 
Сейчас: Offline
Здравствуйте!
В общем имею следующую проблему: есть приложение, главное окно скрыто, по комбинации клавиш выводится окошко и ему задается фокус, при потере фокуса (клик за пределами окна) оно скрывается, при другой комбинации все также, но перед выводом окошка выполняется программа имитирующая комбинацию клавиш Ctrl+C, в этом случае окно также появляется но не имеет фокус и поэтому и не может его потерять при клике за пределами окна, что является неудобством т. к. скрываться оно должно именно при клике за его пределами.
Несколько примечаний:
Открыть спойлер
Ниже привожу фрагменты сходного кода тестового приложения:
Вот код утилитки которая имитирует комбинацию клавиш Ctrl+C, задержка для предотвращения конфликта с комбинацией которой вызывается запуск этой утилиты в программе, делал на основе примера с оф. сайта Майкрософта:

Открыть спойлер

Вот пример главного окна программы, которое скрыто:
Открыть спойлер

hot1 и hot2 используются для обычного отображения и отображения после вызова процесса (утилитки), метод отображения как видно один и тот же, задержку сделал что-бы было видно что хоть имитация комбинации Ctrl+C явно мешает получить окну фокус, но при этом при отображении окна второй комбинацией в этом промежутке окно всегда имеет фокус, а по истечении задержки последнее его все-равно не имеет.
Мучился с проблемой целый день + сегодня, так и не понял в чем прикол что окно имеет фокус если его вызвать одной комбинацией даже после имитации Crtl+C и не имеет если второй, хотя функция отображения одна и та же.
Вот измененная функция отображения:

Открыть спойлер

Вот если кто хочет проверить исходники примера (нужна libQxt): test.zip
Буду рад любым предложениям, сейчас просто в недоумении от поведения программы!
- 24.08.2015 / 11:50
NeiroNext
  Пользователь

NeiroNext 
Сейчас: Offline
Никто с таким не сталкивался ??? :-(
- 24.08.2015 / 19:19
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
NeiroNext, тебе нужно поставить фокус на твоё приложение, или вообще на любое стороннее?
- 25.08.2015 / 15:03
NeiroNext
  Пользователь

NeiroNext 
Сейчас: Offline
Ксакеп, На мое, но функции SetFocus и/или SetForegroundWindow не срабатывают если вызвать их к окну после имитации комбинации Ctrl+C, хотя если вызвать эти функции отдельной комбинацией после запуска утилитки имитации комбинации Ctrl+C то этим способом окно отобразится, но то что вызывалось первой комбинацией так и не получит после этого фокус.
Спрашивал еще на одном ресурсе, посоветовали в отдельном потоке перебирать окна и как только появится мое окно задать ему фокус, но и в этом случае это не сработало.
Но
Открыть спойлер

Открыть спойлер


Изменено NeiroNext (25.08 / 15:05) (всего 2 раза)
- 26.08.2015 / 22:28
NeiroNext
  Пользователь

NeiroNext 
Сейчас: Offline
Тему можно закрыть !
- 26.08.2015 / 22:44
Magatino
  Администратор

Magatino 
Сейчас: Offline
Как скажешь, Бро! :)
Наверх  Всего сообщений: 6
Фильтровать сообщения
Поиск по теме