|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.05.2017, 12:21 | #1 |
Пользователь
Регистрация: 25.09.2013
Сообщений: 58
|
Перекрытие дочерних окон
Приветствую! Создал "пародию" на Tab Control. Все вроде работает, но если поверх моего Tab Control расположить кнопку имеющую того же родителя что и мой Tab Control, то кнопка рисуется, но не реагирует на мышь. Если кнопке назначить родителем мой Tab то кнопка работает. При создании моего Tab control использую стиль WS_VISIBLE + WS_CHILD. Собственно вопрос- Почему кнопка не работает?
Код:
|
22.05.2017, 13:05 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
22.05.2017, 13:46 | #3 |
Пользователь
Регистрация: 25.09.2013
Сообщений: 58
|
Сперва создается Родительское окно, затем мой TAB(WS_VISIBLE + WS_CHILD,), полсе кнопка с флагами WS_VISIBLE+WS_CHILD + BS_PUSHBUTTON
Функция создающая мою пародию на таб и вторая - процедура Код:
|
22.05.2017, 13:51 | #4 |
Пользователь
Регистрация: 25.09.2013
Сообщений: 58
|
Код:
|
23.05.2017, 15:53 | #5 |
Пользователь
Регистрация: 25.09.2013
Сообщений: 58
|
Вот попробовал создать простое окно №1 (WS_VISIBLE+WS_DLGFRAME) на нем дочернее окно №2 и кнопка №3. Родитель у №2, №3 является №1. Кнопка №3 пересекает дочернее окно №2. Кнопка не работает! Почему?
Код:
|
23.05.2017, 16:47 | #6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Воспользуйтесь WS_CLIPCHILDREN/WS_CLIPSIBLINGS и посмотрите, что будет на экране. Если кнопка НЕ видна, значит она перекрыта.
Либо просто поменяйте местами порядок создания окон 2 и 3 дабы поменять их Z-order. |
25.05.2017, 13:07 | #7 |
Пользователь
Регистрация: 25.09.2013
Сообщений: 58
|
Попробовал махнуть местами - сначала кнопка потом дочернее окно со стилем WS_CLIPSIBLINGS и работает. Но это понятно WS_CLIPSIBLINGS обеспечивает "ДЫРУ" под кнопку. Так же заметил что если не менять порядок (сначала окно потом кнопка) то нажимая по кнопке (которая отрисовывается но нет анимации при нажатии) то сообщения от ЛКМ получает родительское окно. Логика в голове рухнула. Я считал что если окна имеют одного родителя и в случаи перекрытия между собой поверх остается окно которой создалось последним и соответственно занимает верхнее положение в оси Z. Вроде все так и прорисовывается, но вот реакция на мышь происходит как будто родительское окно всех перекрыло. Чем это объяснить?
|
25.05.2017, 13:33 | #8 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Судя по всему, поиск окна по координатам мыши идет от первого наследника к последнему. Поскольку два окна перекрываются, то найденное окно (первое) лежит ниже по Z оси.
Лично никогда с этим не сталкивался ибо всегда скрывал ненужные окна, а когда делал свой таб переключатель родителем выступал само таб окно и никаких проблем не было. |
25.05.2017, 19:36 | #9 |
Пользователь
Регистрация: 25.09.2013
Сообщений: 58
|
Спасибо за разъяснения, но вот все же интересно за счёт чего window tab control ведёт себя подругому?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск дочерних окон | shanluu | C# (си шарп) | 1 | 22.01.2014 22:04 |
Затирание дочерних окон winapi | x_Alex_x | Помощь студентам | 12 | 14.01.2013 21:12 |
Затиание дочерних окон | x_Alex_x | Помощь студентам | 0 | 13.01.2013 12:56 |
Поведение дочерних окон | maryan.vetrov | C# (си шарп) | 9 | 27.02.2011 18:09 |
SetWindowPos для дочерних окон и битмапов. | Alex Cones | Общие вопросы Delphi | 4 | 02.02.2011 13:49 |