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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QCombobox и FindWindow  (Прочитано 11783 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #15 : Март 22, 2012, 11:55 »

Код:
Id_REK1=::FindWindow(NULL,Current_po);
if(Id_REK1!=false)

FindWindow возвращает хендл окна или NULL, почему ты сравниваешь с false?
« Последнее редактирование: Март 22, 2012, 12:03 от Alex Custov » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #16 : Март 22, 2012, 11:59 »

мне оно и не надо. вот по этому и спрашиваю, как ловить нажатие клавиатуры в своей программе которая в фоне

программа не имеющая клавиатурного фокуса не будет получать клавиатурные события. Делайте глобальные сочетания клавиш, например, через QxtGlobalShortcut. К тому же нужно понимать, что в винде чтобы переместить окно на foreground должны выполняться несколько условий, описанных в MSDN, и это сделать получиться не всегда.
Записан
Bepec
Гость
« Ответ #17 : Март 22, 2012, 12:02 »

Помоему такая архитектура бред - "несколько окон без элементов управления, управляемых отдельным невидимым менегером по сочетаниям быстрых клавиш"...

Как то даже боюсь спросить - а если пользователь захочет закрыть одно окно, оставив второе, ваша программа такое просчитывает? (alt+f4 рулят)
Записан
V1KT0P
Гость
« Ответ #18 : Март 22, 2012, 12:06 »

да это winApi. у меня qt 4.3.3 и как выводить окно другой программы на передний план функциями qt я не знаю.
Все программы написаны c использованием Qt4?
Записан
Firefox
Гость
« Ответ #19 : Март 23, 2012, 07:30 »

да все программы написаны с использованием библиотеки qt 4.3.3. а что касается структуры работы с окнами, то это специфическое ПО поэтому выполняться операторами будут только определенные действия. Alt+F4 не входит в этот набор. вставлять в каждый модуль элементы управления по переключению между модулями есть плохо. модули должны быть независимые и ни с чем не связанные. они только выполняют свои расчетные задачи. и могут запускаться в разных "заказах" по разному и управление будет разное. поэтому управление их не должно касаться.
Записан
Firefox
Гость
« Ответ #20 : Март 23, 2012, 07:47 »

по поводу сравнения NULL конечно корректнее, но вданном варианте не вижу большой ошибки. и программа воспринимает все правильно.
Записан
Bepec
Гость
« Ответ #21 : Март 23, 2012, 08:00 »

Конечно это не моё дело, а то, что alt+F4 перехватывается Виндой и требует закрытия окна, это ничего ? Показает язык Советую предусмотреть "я захотел поиграть в пасьянс и решил закрыть окна alt+F4".

В принципе теперь понятно - вы пишете оболочку для работы с чем-то. Тогда тем более надо такие случаи предусмотреть.

Советую использовать SetForegroundWindow(hwnd); для переключения окна. У меня с ним ещё никаких проблем не было.
Записан
Firefox
Гость
« Ответ #22 : Март 23, 2012, 09:31 »

я использую SetForegroundWindow(), в примере кода на 1 странице он присутствует. но все равно после работы в QCombobox
 не отрабатывает FindWindow(), такое ощущение что оно возвращает не указатель на окно приложения, а указатель на QCombobox с которым осуществлялась работа. из за чего, конечно, я не могу далее сделать SetForegroundWindow() правильно.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #23 : Март 23, 2012, 11:49 »

я использую SetForegroundWindow(), в примере кода на 1 странице он присутствует. но все равно после работы в QCombobox
 не отрабатывает FindWindow(), такое ощущение что оно возвращает не указатель на окно приложения, а указатель на QCombobox с которым осуществлялась работа. из за чего, конечно, я не могу далее сделать SetForegroundWindow() правильно.
Значит задействуйте еще и первый параметр lpClassName. Когда все работает (комбик не трогают) распечатайте имя класса для каждого найденного хендла (если не ошибаюсь GetClassName) а затем вставьте найденные имена классов в Ваш текст
Записан
V1KT0P
Гость
« Ответ #24 : Март 23, 2012, 12:19 »

да все программы написаны с использованием библиотеки qt 4.3.3. а что касается структуры работы с окнами, то это специфическое ПО поэтому выполняться операторами будут только определенные действия. Alt+F4 не входит в этот набор. вставлять в каждый модуль элементы управления по переключению между модулями есть плохо.
Если это ваши программы, то не проще ли каждую программу превратить в плагин, а затем подключать к менеджеру?
Получится очень удобно: грузишь плагин, через интерфейс получаешь указатель на виджет. А затем по нажатию кнопки убираешь виджет и показываешь другой.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #25 : Март 23, 2012, 12:40 »

не отрабатывает FindWindow(), такое ощущение что оно возвращает не указатель на окно приложения, а указатель на QCombobox с которым осуществлялась работа. из за чего, конечно, я не могу далее сделать SetForegroundWindow() правильно.

FindWindow ищет top-level окна, она должен работать правильно. Где именно вызывается этот код? Случайно не обработчике keyPressEvent? Ты дебажила код, хотя бы с помощью qDebug?
Записан
Firefox
Гость
« Ответ #26 : Март 23, 2012, 15:46 »

код вызывается в данный момент по событию. событие отрабатывает. работаю в VS 2003 с интегрированным qt поэтому debag там есть.есть такая функция перед BringWindowToTop, -  Application->Restore();, но применить её к QApplication я не смогла.
Записан
Firefox
Гость
« Ответ #27 : Март 23, 2012, 15:48 »

Ещё может кто объяснит как правильно поставить класс QxtGlobalShortcut. я его скачала но не получается. а в гугле очень скудные инструкции только нашла.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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