Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
1 | |
Z-order28.11.2018, 20:57. Показов 1697. Ответов 4
Как бы мне разобраться с тем, что такое Z-последовательность и с чем ее едят?
Как я представляю, у каждого приложения поддерживается список наложенных друг на дружку окон. и если мы щелкнем по окну, которое ниже, то фокус все равно попадет к верхнему окну. (для простоты считаем все окна диалоговыми, модальными. Собственно, только этот случай меня и интересует) Кроме того, если я подвину верхнее окно, то окна лежащие ниже перерисуются. А если я вызову другое приложение, перекрывающие частично мое, и щелкну в любом месте моего, то фокус вернется к верхнему. Восстановится вся стопка окон моего приложения. Все хорошо, и это поведение меня вполне устраивает. Но тут я хочу из диалогового окна моего приложения (назовем его приложением А) вызвать другое свое же приложение В. Тоже диалоговое. И если бы мне удалось окна приложения В прицепить к Z-последовательности приложения А, я был бы просто счастлив. Приложение В тоже может образовать свою стопку диалогов. Мне нужно, чтобы эти 2 стопки объединились. На всякий случай. Приложение А не должно работать до окончания работы приложения В. Так что никакие потоки тут не нужны. Но должно, конечно, перерисовываться при изменении геометрии окон В. ЗЫ. Приложение В знает хендл главного окна приложения А. Кстати, а как из него получить верхнее окно приложения А? Т.е. пройтись по Z-цепочке вверх? И обратно, приложение В может в любой момент сообщить А хендл любого своего окна. ЗЗЫ. Приложение В вызывается через CreateProcess
0
|
28.11.2018, 20:57 | |
Ответы с готовыми решениями:
4
Z-order поиск и сеттер Про Z-order (последовательность окон) Можно ли изменить позицию (z-order) моего окна относительно панели задач? HSQL запрос. Что не так? "from hiberdata.Order order where order.clientId=?" |
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
|
||||||
29.11.2018, 22:47 | 2 | |||||
Мне кажется, что это не правильный подход. Если требуется использование одного интерфейса в нескольких программах, то лучше сделать этот интерфейс в виде DLL-модуля и подключать её куда нужно. Можно ещё посмотреть на activeX и то, как работает встраивание ворда и экселя в другие приложения, но это на порядок сложнее.
Что касается описанной синхронизации окон разных приложений, то стандартного документированного способа делать подобное я не встречал. Так что все дальнейшие рассуждения - это, скорее, мазохизм и создание гибрида велосипеда с граблями. Есть такая штука Owned Windows. По своему описанию она очень похожа на то, что хочется получить. Но, подобные отношения между окнами описаны для одного процесса и создание такой связи задаётся при вызове CreateWindow. Однако, можно извернуться и всё же попытаться проделать подобное для двух процессов. Как это всё может сказаться на работе программ и каким боком аукнуться в будущем, я не представляю. Ниже пример запуска из приложения блокнота и установка его окну owner-ом окна своего приложения. Кликните здесь для просмотра всего текста
1
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
29.11.2018, 23:57 [ТС] | 3 |
Ygg, спасибо, информации много, и мне надо ее как следует проанализировать. Как вы, наверное, понимаете, это продолжение все той же темы о взаимодействии программ.
Причем тут DLL, не очень понимаю, впрочем я очень мало работал с этой штукой. Что касается actiiveX, в эти дебри мне влезать не охота. Плюс - придется отказаться от мечты о кроссплатформенности. Хотя я умею встраивать Ворд-Ексель в свои программы. Неуклюже, но как-то. Со своей проблемой я, в общем-то справился. Костыльно. Просто каждое окно программы В сообщает программе А - "я тут главное". А программа А на это уже реагирует, выводя его на передний план. Это все тонко, и часто рвется. Но наблюдая происходящее на экране, мне пришла в голову мысля, что ежели бы соединить ихние Z-последовательности, то все было бы O'Key, и не было бы у меня забот.
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
30.11.2018, 09:56 | 4 |
Но ведь вы и так привязываетесь к особенностям winapi, о какой кроссплатформенности речь?
0
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
30.11.2018, 11:06 [ТС] | 5 |
Верно! Но хотелось бы сделать эту привязку минимальной и локализованной. Сейчас это 5 строк кода в программе В и 30 в программе А.
Но в общем-то вы правы. До кросса еще очень далеко. Для этого надо весь функционал программы А перевести на Qt. А тогда и надобность во всех этих танцах отпадет.
0
|
30.11.2018, 11:06 | |
30.11.2018, 11:06 | |
Помогаю со студенческими работами здесь
5
Order by внутри order by ORDER BY ORDER BY? ORDER BY Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |