Russian Qt Forum
Ноябрь 26, 2024, 01:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QCombobox и FindWindow  (Прочитано 11794 раз)
Firefox
Гость
« : Март 21, 2012, 12:22 »

Здравствуйте. хочу спросить такой вопрос может кто подскажет. пользуюсь FindWindow и BringWindowToTop для смены окон из управляющей программы. но в этих окнах есть QCombobox и после работы с ним оператором перестают срабатывать FinedWindow и BringWindowToTop. на QCombobox стоит флаг NoFocus. что сделать надо в такой ситуации с сомбобоксом?
« Последнее редактирование: Март 22, 2012, 09:22 от Пантер » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 21, 2012, 12:28 »

Это WinApi чтоли?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #2 : Март 21, 2012, 12:51 »

Угу. Это winApi...
Записан
Firefox
Гость
« Ответ #3 : Март 21, 2012, 18:17 »

да это winApi. у меня qt 4.3.3 и как выводить окно другой программы на передний план функциями qt я не знаю.
Записан
Bepec
Гость
« Ответ #4 : Март 21, 2012, 20:12 »

ээ... Т.е. ты не своё приложение выводишь?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Март 21, 2012, 20:20 »

Очевидно, что информации тут дано мало. Покажи минимальный код, и объясни что значит не срабатывает.
Записан
Firefox
Гость
« Ответ #6 : Март 21, 2012, 20:46 »

запущена моя программа и 10 других экзешников, в которых есть комбобоксы. по нажатию на кнопкув моей программе должно определенное приложение выходить на передний план. вот я и ищу идентификатор окна функцией FindWindow и вывожу на передний план функцией BringWindowToTop(идентификатор окна) и setForegroundWindow(идентификатор окна). но если в приложении которое я хочу вывести на передний план кто-то поработал до этого с комбобоксом, эти функции не срабатывают.
« Последнее редактирование: Март 21, 2012, 21:48 от Firefox » Записан
Firefox
Гость
« Ответ #7 : Март 21, 2012, 20:56 »

да моя программа работает в фоне и координирует работу других и все. а кнопки на клавиатуре!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Март 21, 2012, 21:30 »

Цитировать
- на Крупской выходите?
- та не на Крупской а на Крупского! Там еще и памятник ему стоит!

Исправьте то несчастное FinedWindow на FindWindow (find = искать)
И сообщите народу как ищете хендл окна
Записан
Firefox
Гость
« Ответ #9 : Март 22, 2012, 09:13 »

Код:
 LPCWSTR Current_po;
Current_po=L"reg_rec1";
Id_REK1=::FindWindow(NULL,Current_po);
if(Id_REK1!=false)
        {
BringWindowToTop(Id_REK1);
SetForegroundWindow(Id_REK1);
}
Записан
Firefox
Гость
« Ответ #10 : Март 22, 2012, 09:18 »

и ещё бы хотелось спросить. у меня в программе не отлавливается события нажатия клавиатуры, так как моя программа в данный момент не активна. а активна та что на переднем плате. пока что организована передача данных между программами, но это не удобно. как мне самостоятельно отлавливать события нажатия если моя программа в фоне?
Записан
Bepec
Гость
« Ответ #11 : Март 22, 2012, 09:19 »

Если НЕплатформонезависимо - ставить хук глобальный(кейлоггер банальный получится).
А по делу - пересмотреть архитектуру. Зачем тебе нажатия в другом окне в своём приложении?
Записан
Firefox
Гость
« Ответ #12 : Март 22, 2012, 10:22 »

мне оно и не надо. вот по этому и спрашиваю, как ловить нажатие клавиатуры в своей программе которая в фоне. я ещё не сильно разбираюсь в qt, не могли бы вы пояснить, что значит глобальный хук на примере. я делаю это так
Код:
void KOS1::keyPressEvent(QKeyEvent * ev)
{

switch (ev->key())
{
case Qt::Key_F10:
close();
break;
case Qt::Key_F5://пока что для открытия прибора

if(Dev!=false && Zakaz=="KOS")
{
BringWindowToTop(Dev);
SetForegroundWindow(Dev);
}
}
}
Записан
Bepec
Гость
« Ответ #13 : Март 22, 2012, 10:32 »

Так. Останавливаемся. Успокаиваюсь(я).

1. У вас эта программа является менеждером?
2. Эта программа вызывает свои окна-виджеты в разных условиях?
3. Или эта программа запускает отдельные независимые Qt программы в разных условиях?
4. Почему тогда эта программа не может являться родителем независимых Qt программ? (аля контейнер программ)


Находясь в фоне, программа не получит нажатий клавиш. Ибо они ей не нужны(она ж в фоне).
Если активно другое Qt окно, оно получит эти нажатия клавиш. И может их передать программе-менеджеру(но ЗАЧЕМ???) 

Если активно не Qt окно, оно никуда их не передаст Подмигивающий

PS на словах опишите чего хотите, блин(я вот хочу блин Подмигивающий ). Управляющая чем?? Как хочется, чтобы она вызывала функционал??
Записан
Firefox
Гость
« Ответ #14 : Март 22, 2012, 10:38 »

Запускает она отдельные qt приложения(название.exe). делаю это функцией ShellExecute(). поработав в одной программе(окно программы занимает весь экран и не имеет кнопок управления- свернуть, закрыть.. то есть является виджетом как бы) оператор хочет переключиться на другую программу и поработать в ней. для чего нажимает например F1. и другая программа работающая в фоне выходит на передний план.таких программ 10 штук и + моя. которая и делает эти переходы. делать это в запущенных программа нельзя. вот для этого я и делаю небольшую программку координирующую работу запущенных приложений.
« Последнее редактирование: Март 22, 2012, 10:43 от Firefox » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.186 секунд. Запросов: 22.