|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
Исходные данные: В приложении есть главное окно w_main и библиотека с неким служебным окном w_tool. w_tool - типа "main!", w_main - любого типа. После открытия w_main ссылка на него передается в библиотеку. Это единственный способ взаимодействия этих двух окон. w_tool может быть открыто до открытия w_main. Требуется: В случае если w_main (или каких-нибудь других окон без владельца) так и не будет окрыто, то приложение должно завершиться после закрытия окна w_tool юзером. Если же w_main будет окрыто, то приложение должно завершиться после закрытия окна w_main юзером, независимо от того открыто ли w_tool. Проблема: Такое поведение возможно, если w_main является владельцем w_tool. Т.е. w_tool открыто так: Код: plaintext
Пробовал WinAPI SetParent - не годится, т.к. при этом окно вкладывается в родителя, как если бы имело тип "child!". Пока остановился на переоткрытии окна w_tool с новым владельцем. Но может есть варианты без переоткрытия? PB9 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 15:41 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
Ну а менеджер окон есть какой-нить? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 18:27 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
ФилиппНу а менеджер окон есть какой-нить? Что там в приложении будет - неизвестно, поскольку конечным продуктом будет являться только библиотека. В ней свой менеджер есть, но чужие окна она не видит. Более общая задача такая: чтобы при использовании библиотеки в любом оконном приложении поведение этого приложения при закрытии главного окна не зависело от наличия открытых окон в библиотеке. При этом свести к минимуму вызовы из приложения отвечающие за решение этой задачи. На данный момент я решил что наиболее простым интерфейсом для этого будет передача ссылки на главное окно после его открытия. Отсюда и исходный вопрос. Возможно что придется вместо этого делать наоборот вызов при закрытии главного окна, а в библиотеке - закрытие всех открытых окон. Тут вообще работа с владельцем не нужна. Но почему-то мне не нравится такой вариант. Еще не понял почему :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 19:06 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
А библиотека типа через Library List будет на лету подключаться? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 19:25 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
ФилиппА библиотека типа через Library List будет на лету подключаться? Да нет, в Library List таргета, при разработке. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 21:12 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
Тогда вообще не понимаю о чём речь... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 21:48 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
ФилиппТогда вообще не понимаю о чём речь... А что меняет ответ на последний вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 22:25 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
А может w_main всегда неявно открывать? Хотя конечно это не решает задачи или хотя бы как-то область под него зарезервировать ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 22:35 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
наиболее простым интерфейсом для этого будет передача ссылки на главное окно после его открытия Чё рассуждать то? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 23:05 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyПосле открытия w_main ссылка на него передается в библиотеку. Это единственный способ взаимодействия этих двух окон. Ну и используйте эту библиотеку как посредника между окнами для разных проверок ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 23:06 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
spas2001А может w_main всегда неявно открывать? Хотя конечно это не решает задачи или хотя бы как-то область под него зарезервировать Может я как-то не четко это описал, но суть в том, что я создаю только библиотеку , которую можно будет добавить в любое заранее неизвестное приложение. w_main (имя окна тоже заранее неизвестно) - это гипотетическое главное окно этого приложения. По этой причине библиотека не может диктовать приложению, какие окна открывать и в каком порядке. Что приложение захочет, то и откроет. И работа библиотеки с ее окнами не должна или (или минимально должна влиять на работу приложения с его окнами. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 23:09 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
Товарищи, ну прочитайте исходный вопрос. Он есть прямо в теме :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2009, 23:10 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
Если приложение хочет работать с твоей библиотекой, то оно просто ДОЛЖНО в open evente ЛЮБОГО СВОЕГО окна слать ссылку на себя твоему служебному окну w_tool, если IsValid(w_tool). А ты эти ссылки собирай, а потом решай что делать :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2009, 00:02 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
ФилиппЕсли приложение хочет работать с твоей библиотекой, то оно просто ДОЛЖНО в open evente ЛЮБОГО СВОЕГО окна слать ссылку на себя твоему служебному окну w_tool, если IsValid(w_tool). А ты эти ссылки собирай, а потом решай что делать :-) Так вопрос - что делать если к моменту open event w_tool уже открыто? Ну например: Допустим есть библиотека для логгирования в отдельное окно отладочных сообщений. Код: plaintext 1. 2. 3. 4. 5.
Однако из-за висящего w_tool приложение не будет завершено, и юзеру надо будет закрыть вручную w_tool. Т.е. подключение библиотеки логгирования изменило реакцию приложения на элементарные действия юзера. Чтобы избежать этого, введен интерфейс Logger.setMainWindow(window), в реализации которого надо переданное окно сделать владельцем w_tool. Как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2009, 00:41 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
Ну можно в логгере твоём в таймере бежать и проверять, есть ли хоть одна валидная ссылка из собранных тобой, и если ни одной таковой не осталось, закрываться... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2009, 01:13 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
ФилиппНу можно в логгере твоём в таймере бежать и проверять, есть ли хоть одна валидная ссылка из собранных тобой, и если ни одной таковой не осталось, закрываться... Да, вариант, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2009, 02:10 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
это не подойдет? function ulong SetParent (ulong hWndChild, ulong hWndNewParent) library "user32.dll" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2009, 13:37 |
|
Как задать владельца уже открытому окну?
|
|||
---|---|---|---|
#18+
+/-это не подойдет? function ulong SetParent (ulong hWndChild, ulong hWndNewParent) library "user32.dll" Если внимательно прочитать хотя-бы первое сообщение, то там можно найти ответ на этот вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2009, 14:27 |
|
|
start [/forum/topic.php?fid=15&msg=35956116&tid=1336298]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 152ms |
0 / 0 |