Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 2

"Привязка" окон дочерних процессов к окну главного процесса

23.08.2015, 21:13. Показов 1942. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня.
Вопрос знатокам.

Есть VCL приложение (С++ Builder XE).
В этом приложении можно открыть несколько дочерних форм (использующих для оперативной работы), в каждой из которых может работать несколько тредов (которые делают некие расчеты и затем через Synchronize данные отображают в соответсвующей форме).
Как известно один процесс(VCL приложение) может иметь идин VCL-тред. И получается что если один из тредов начал синхронизацию со "своей" формой, то при работе с другими формами (нажатие кнопки и прочие действия с интерфейсом) человеку будет визуально frez-ить интерфейс (застывать), так как очередь сообщений будет ждать когда закочится этот Synchronize.

Для того чтобы этого не происходило, сделал чтобы эти оперативные формы (в которых треды синхронизируют данные с формой) запускались через отдельные процессы (CreateProcess) и тогда каждая формы имеет свой VCL тред, и соответственно свою очередь сообщений - и друг на друга никак не влияют.
То есть эти формы получаются уже отдельные приложения - назовем их дочерние.
При закрытии "основного" приложения эти прцессы закрываются через HWND "дочерних" окон процессов.
Если закрыть через диспетчер задач основной процесс, то дочерние тоже завершатся, так как при создании я их добавляю в job объект (AssignProcessToJobObject).
В панели задач эти дочерние окна убрал (через ShowWindow SW_HIDE), то есть визуально для пользователя открыта одна программа, правда показываются в Alt+Tab.

То есть визуально приложение как бы не отличается от варианта, когда формы создавались работали в рамках одного VCL приложения.

----
Теперь ближе к вопросу.

Если с программы переключиться на другую (для примера возьмем некий браузер) и потом вернуться обратно то, человек увидит только окно основной программы, а окна дочерние окажутся позади браузера.
Это естесвенно, так как "дочерние" формы - это отдельные процессы.
Есть ли возможность в виндовс (winapi) как-нибудь эти окна как бы "привязать" к основному приложению, чтобы визуально при переключении с одного приложения(браузера) на другое эти окна были вместе с Главным окном.
Как это можно сделать?
И как убрать в таком случае эти дочерние процессы/окна из Alt+Tab?

Пробовал сделать это через ::SetWindowLong(hHWND_Chield_app_form, GWL_HWNDPARENT, (LONG)hHWND_Parent_App); - визуально работает и дочерние процессы пропадают из Alt+Tab, но если нажать для эксперимента sleep в головном окне (отдельный процесс), то дочерние окна (другие процессы) тоже застывают (пока не закончится sleep).
То есть это уже не подходит так как дочерние окна никак не должны быть завязаны на очереди собщений главного приложения.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.08.2015, 21:13
Ответы с готовыми решениями:

Создайте приложение, состоящее из главного и двух дочерних окон
1. Создайте два скрипта на языке программирования Python и с использованием модуля Tkinter генерирующие шаблоны ...

Завершение процесса и его дочерних процессов
Доброе время суток! Подскажите, пожалуйста, как можно реализовать завершение процесса (зная его имя или PID) и всех его дочерних...

Список дочерних процессов определённого процесса
Друзья, подскажите пожалуйста, как с помощью python, получить список дочерних процессов определённого процесса?

3
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
24.08.2015, 12:30
Модальность ?
0
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 2
24.08.2015, 12:41  [ТС]
Формы дочерних процессов относительно формы главного процесса должны быть немодальные.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
24.08.2015, 13:30
Очевидным решением было бы хранить хэндлы дочерних процессов и в нужный момент изменять их положение в z-последовательности ручками.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2015, 13:30
Помогаю со студенческими работами здесь

Поиск процесса и его дочерних процессов
Всем привет! Сначала опишу ситуацию на примере "CodeBlocks", чтобы стало понятно чего я хочу: У меня открыт проект в...

Передать координаты рабочей области главного окна дочернему окну
Здравствуйте, подскажите как передать координаты рабочей области главного окна дочернему окну(левый верхний угол). Мне необходимо при клике...

Привязка к окну приложению
Есть окно программы, как мне написать скрипт на Delphi. Например , в edit 1 есть текст его нужно отправить в окно запущенной программы. ...

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

Привязка элементов к окну WPF
Здравствуйте, хочу привязать элементы к окну WPF, чтоб при уменьшении/увеличении окна , элементы тоже изменяли размер. Вот код XAML...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru