Название: QCombobox и FindWindow Отправлено: Firefox от Марта 21, 2012, 12:22 Здравствуйте. хочу спросить такой вопрос может кто подскажет. пользуюсь FindWindow и BringWindowToTop для смены окон из управляющей программы. но в этих окнах есть QCombobox и после работы с ним оператором перестают срабатывать FinedWindow и BringWindowToTop. на QCombobox стоит флаг NoFocus. что сделать надо в такой ситуации с сомбобоксом?
Название: Re: QCombobox и FinedWindow Отправлено: Пантер от Марта 21, 2012, 12:28 Это WinApi чтоли?
Название: Re: QCombobox и FinedWindow Отправлено: Bepec от Марта 21, 2012, 12:51 Угу. Это winApi...
Название: Re: QCombobox и FinedWindow Отправлено: Firefox от Марта 21, 2012, 18:17 да это winApi. у меня qt 4.3.3 и как выводить окно другой программы на передний план функциями qt я не знаю.
Название: Re: QCombobox и FinedWindow Отправлено: Bepec от Марта 21, 2012, 20:12 ээ... Т.е. ты не своё приложение выводишь?
Название: Re: QCombobox и FinedWindow Отправлено: Alex Custov от Марта 21, 2012, 20:20 Очевидно, что информации тут дано мало. Покажи минимальный код, и объясни что значит не срабатывает.
Название: Re: QCombobox и FinedWindow Отправлено: Firefox от Марта 21, 2012, 20:46 запущена моя программа и 10 других экзешников, в которых есть комбобоксы. по нажатию на кнопкув моей программе должно определенное приложение выходить на передний план. вот я и ищу идентификатор окна функцией FindWindow и вывожу на передний план функцией BringWindowToTop(идентификатор окна) и setForegroundWindow(идентификатор окна). но если в приложении которое я хочу вывести на передний план кто-то поработал до этого с комбобоксом, эти функции не срабатывают.
Название: Re: QCombobox и FinedWindow Отправлено: Firefox от Марта 21, 2012, 20:56 да моя программа работает в фоне и координирует работу других и все. а кнопки на клавиатуре!
Название: Re: QCombobox и FinedWindow Отправлено: Igors от Марта 21, 2012, 21:30 Цитировать - на Крупской выходите? - та не на Крупской а на Крупского! Там еще и памятник ему стоит! Исправьте то несчастное FinedWindow на FindWindow (find = искать) И сообщите народу как ищете хендл окна Название: Re: QCombobox и FinedWindow Отправлено: Firefox от Марта 22, 2012, 09:13 Код: LPCWSTR Current_po; Название: Re: QCombobox и FinedWindow Отправлено: Firefox от Марта 22, 2012, 09:18 и ещё бы хотелось спросить. у меня в программе не отлавливается события нажатия клавиатуры, так как моя программа в данный момент не активна. а активна та что на переднем плате. пока что организована передача данных между программами, но это не удобно. как мне самостоятельно отлавливать события нажатия если моя программа в фоне?
Название: Re: QCombobox и FinedWindow Отправлено: Bepec от Марта 22, 2012, 09:19 Если НЕплатформонезависимо - ставить хук глобальный(кейлоггер банальный получится).
А по делу - пересмотреть архитектуру. Зачем тебе нажатия в другом окне в своём приложении? Название: Re: QCombobox и FindWindow Отправлено: Firefox от Марта 22, 2012, 10:22 мне оно и не надо. вот по этому и спрашиваю, как ловить нажатие клавиатуры в своей программе которая в фоне. я ещё не сильно разбираюсь в qt, не могли бы вы пояснить, что значит глобальный хук на примере. я делаю это так
Код: void KOS1::keyPressEvent(QKeyEvent * ev) Название: Re: QCombobox и FindWindow Отправлено: Bepec от Марта 22, 2012, 10:32 Так. Останавливаемся. Успокаиваюсь(я).
1. У вас эта программа является менеждером? 2. Эта программа вызывает свои окна-виджеты в разных условиях? 3. Или эта программа запускает отдельные независимые Qt программы в разных условиях? 4. Почему тогда эта программа не может являться родителем независимых Qt программ? (аля контейнер программ) Находясь в фоне, программа не получит нажатий клавиш. Ибо они ей не нужны(она ж в фоне). Если активно другое Qt окно, оно получит эти нажатия клавиш. И может их передать программе-менеджеру(но ЗАЧЕМ???) Если активно не Qt окно, оно никуда их не передаст ;) PS на словах опишите чего хотите, блин(я вот хочу блин ;) ). Управляющая чем?? Как хочется, чтобы она вызывала функционал?? Название: Re: QCombobox и FindWindow Отправлено: Firefox от Марта 22, 2012, 10:38 Запускает она отдельные qt приложения(название.exe). делаю это функцией ShellExecute(). поработав в одной программе(окно программы занимает весь экран и не имеет кнопок управления- свернуть, закрыть.. то есть является виджетом как бы) оператор хочет переключиться на другую программу и поработать в ней. для чего нажимает например F1. и другая программа работающая в фоне выходит на передний план.таких программ 10 штук и + моя. которая и делает эти переходы. делать это в запущенных программа нельзя. вот для этого я и делаю небольшую программку координирующую работу запущенных приложений.
Название: Re: QCombobox и FinedWindow Отправлено: Alex Custov от Марта 22, 2012, 11:55 Код: Id_REK1=::FindWindow(NULL,Current_po); FindWindow возвращает хендл окна или NULL, почему ты сравниваешь с false? Название: Re: QCombobox и FindWindow Отправлено: Alex Custov от Марта 22, 2012, 11:59 мне оно и не надо. вот по этому и спрашиваю, как ловить нажатие клавиатуры в своей программе которая в фоне программа не имеющая клавиатурного фокуса не будет получать клавиатурные события. Делайте глобальные сочетания клавиш, например, через QxtGlobalShortcut. К тому же нужно понимать, что в винде чтобы переместить окно на foreground должны выполняться несколько условий, описанных в MSDN, и это сделать получиться не всегда. Название: Re: QCombobox и FindWindow Отправлено: Bepec от Марта 22, 2012, 12:02 Помоему такая архитектура бред - "несколько окон без элементов управления, управляемых отдельным невидимым менегером по сочетаниям быстрых клавиш"...
Как то даже боюсь спросить - а если пользователь захочет закрыть одно окно, оставив второе, ваша программа такое просчитывает? (alt+f4 рулят) Название: Re: QCombobox и FinedWindow Отправлено: V1KT0P от Марта 22, 2012, 12:06 да это winApi. у меня qt 4.3.3 и как выводить окно другой программы на передний план функциями qt я не знаю. Все программы написаны c использованием Qt4?Название: Re: QCombobox и FindWindow Отправлено: Firefox от Марта 23, 2012, 07:30 да все программы написаны с использованием библиотеки qt 4.3.3. а что касается структуры работы с окнами, то это специфическое ПО поэтому выполняться операторами будут только определенные действия. Alt+F4 не входит в этот набор. вставлять в каждый модуль элементы управления по переключению между модулями есть плохо. модули должны быть независимые и ни с чем не связанные. они только выполняют свои расчетные задачи. и могут запускаться в разных "заказах" по разному и управление будет разное. поэтому управление их не должно касаться.
Название: Re: QCombobox и FindWindow Отправлено: Firefox от Марта 23, 2012, 07:47 по поводу сравнения NULL конечно корректнее, но вданном варианте не вижу большой ошибки. и программа воспринимает все правильно.
Название: Re: QCombobox и FindWindow Отправлено: Bepec от Марта 23, 2012, 08:00 Конечно это не моё дело, а то, что alt+F4 перехватывается Виндой и требует закрытия окна, это ничего ? :P Советую предусмотреть "я захотел поиграть в пасьянс и решил закрыть окна alt+F4".
В принципе теперь понятно - вы пишете оболочку для работы с чем-то. Тогда тем более надо такие случаи предусмотреть. Советую использовать SetForegroundWindow(hwnd); для переключения окна. У меня с ним ещё никаких проблем не было. Название: Re: QCombobox и FindWindow Отправлено: Firefox от Марта 23, 2012, 09:31 я использую SetForegroundWindow(), в примере кода на 1 странице он присутствует. но все равно после работы в QCombobox
не отрабатывает FindWindow(), такое ощущение что оно возвращает не указатель на окно приложения, а указатель на QCombobox с которым осуществлялась работа. из за чего, конечно, я не могу далее сделать SetForegroundWindow() правильно. Название: Re: QCombobox и FindWindow Отправлено: Igors от Марта 23, 2012, 11:49 я использую SetForegroundWindow(), в примере кода на 1 странице он присутствует. но все равно после работы в QCombobox Значит задействуйте еще и первый параметр lpClassName. Когда все работает (комбик не трогают) распечатайте имя класса для каждого найденного хендла (если не ошибаюсь GetClassName) а затем вставьте найденные имена классов в Ваш текстне отрабатывает FindWindow(), такое ощущение что оно возвращает не указатель на окно приложения, а указатель на QCombobox с которым осуществлялась работа. из за чего, конечно, я не могу далее сделать SetForegroundWindow() правильно. Название: Re: QCombobox и FindWindow Отправлено: V1KT0P от Марта 23, 2012, 12:19 да все программы написаны с использованием библиотеки qt 4.3.3. а что касается структуры работы с окнами, то это специфическое ПО поэтому выполняться операторами будут только определенные действия. Alt+F4 не входит в этот набор. вставлять в каждый модуль элементы управления по переключению между модулями есть плохо. Если это ваши программы, то не проще ли каждую программу превратить в плагин, а затем подключать к менеджеру?Получится очень удобно: грузишь плагин, через интерфейс получаешь указатель на виджет. А затем по нажатию кнопки убираешь виджет и показываешь другой. Название: Re: QCombobox и FindWindow Отправлено: Alex Custov от Марта 23, 2012, 12:40 не отрабатывает FindWindow(), такое ощущение что оно возвращает не указатель на окно приложения, а указатель на QCombobox с которым осуществлялась работа. из за чего, конечно, я не могу далее сделать SetForegroundWindow() правильно. FindWindow ищет top-level окна, она должен работать правильно. Где именно вызывается этот код? Случайно не обработчике keyPressEvent? Ты дебажила код, хотя бы с помощью qDebug? Название: Re: QCombobox и FindWindow Отправлено: Firefox от Марта 23, 2012, 15:46 код вызывается в данный момент по событию. событие отрабатывает. работаю в VS 2003 с интегрированным qt поэтому debag там есть.есть такая функция перед BringWindowToTop, - Application->Restore();, но применить её к QApplication я не смогла.
Название: Re: QCombobox и FindWindow Отправлено: Firefox от Марта 23, 2012, 15:48 Ещё может кто объяснит как правильно поставить класс QxtGlobalShortcut. я его скачала но не получается. а в гугле очень скудные инструкции только нашла.
|