Почему в winApi c++ все обычные поля, input-ы, button-ы layout называются окнами?
Правильно ли я предполагаю что любая графическая часть в QT, JAVA SWING, HTML под винду как минимум - это все "окна". И еще вопрос как система на очень низком уровне определяет куда именно я щелкнул мышкой, там работает к примеру так же как в canvas-e, например когда я создаю свою рисовалку, и рисую там свою кнопку, и пишу функцию, которая определит был ли щелчок на этой моей кнопке или нет, это по скорости сопоставимо со стандартной кнопкой, там так же определяет позиции?
например когда я создаю свою рисовалку, и рисую там свою кнопку, и пишу функцию, которая определит был ли щелчок на этой моей кнопке или нет, это по скорости сопоставимо со стандартной кнопкой, там так же определяет позиции?
Смотря как напишешь. Вряд ли получится сильно быстрее, чем стандартным механизмом, а вот медленнее -- запросто.
jcmvbkbc, я использовал квадратное дерево и деление области на квадраты для определения щелчка мыши или коллизии движущихся объектов, что по скорости давало 0(log n) для mouseenter события, хотелось бы знать стандартный механизм. Есть игровые фрейвморки где нету интерфейса, но так и хочется его реализовать на подобии JAVA SWING, реализовав свою систему событий, свой объект Component, на который можно вешать кучу слушателей событий, и от которого я буду реализовывать элементы управления.
Алексей Николаев, а как у англичан звучит это слово, типа "Окна", всегда не понимаю, это же реально глупо звучит, если Винду у нас сделали, и назвали Окна, но я до сих пор угораю, и таких слов полно.
В WinAPI пользовательское взаимодействие строиться на "окнах" (windows). Регистрируется класс окна функцией RegisterClass куда передается структура с наименованием класса окна, характеристиками окна и указатель на функцию, что будет обрабатывать все оконные сообщения (некоторые из которых отвечают и за открисовку).
Далее по наименованию класса окна можно создать нужное "окно" (визуальный элемент).
input, button и т.д. это наименования данных классов окна.
Ядро WinAPI обрабатывает прерывания от устройт ввода, преобразует в системные сообщения и пересылает их в активное окно. Для WinAPI доступны все окна и поэтому она знает какому окну слать. (Получить список всех окон верхнего уровня можно функцией EnumWindows)
Когда вы щелкаете мышкой, то WinAPI создает множество сообщений на это событие (WM_LBUTTONDOWN, WM_LBUTTONUP и т.д.)
то есть например если я применяя библиотеку SFML где только 1 окно и одна область для рисования примитивов и нарисую там кнопку, то моя функция-проверки окна, будет существенно дольше определять, чем winapi?
Я знаю пока самые такие основы, но не понимаю как реализовать делегирование, к примеру у меня таблица 100 на 100 клеток, где нужно ловить куча событий: mouseenter, mouseleave и click?
К примеру я мог бы нарисовать таблицу сам, определять положение мышы так, Х=x/width_cell, У=y/height_cell и вешать калбек и подсвечивать клетку table[X][Y], что вроде быстрее, как кажется
знаю, просто если я решу сделать свой фреймворк, как JAVA SWING на основе SFML, то если я все идеально реализую, то он не будет медленнее стандартных окон winApi, как минимум медленнее на 1%.
Хочу вообще реализовать событийную модель( посредник паттерн), как в большинстве яп, а не процедурный сложно контролируемый цикл обработки сообщений как в winApi и в той же SFML.
То есть хотелось бы как в java или js elem.addEventListener( ... ) , добавлять события, или как в QT через сигналы и слоты.