Page 1 of 1

Функция 34 - узнать владельца точки на экране

Posted: Tue Mar 27, 2012 4:34 pm
by Mario
SVN r. 2511
Собственно позволяет вынуть данные запрошенной точки из области по адресу [_WinMapAddress].
Описание читать в документационной части исходников ядра.

В настоящее нужно для @RB - вместо кучи запросов ф.9, равное количеству запущенных в системе потоков, производится всего один запрос ф.34. Быстро, эффективно, красиво.
Также будет использоваться в новом Icon.

Re: Функция 34 - узнать владельца точки на экране

Posted: Tue Mar 27, 2012 7:48 pm
by art_zh
Полезная функция. Даже странно, что ее до сих пор не было.
Только я бы ее расширил еще одной нужной подфункцией -
п/ф 0 = узнать владельца точки,
п/ф 1 = перемаппить всю экранную карту на адресное пространство пользователя.
А то если про каждую точку спрашивать у ядра - так и уснуть можно.

Re: Функция 34 - узнать владельца точки на экране

Posted: Tue Mar 27, 2012 8:24 pm
by Mario
Для @RB и Icon ее вполне хватает.

Насчет получения куском - я могу сделать только как функцию 36. Но она всегда показывает только прошлое состояние. Которое при активной перерисовке может сильно отстать и вообще сделать мгновенный срез без CLI не получится, а CLI вообще-то не желательно на длительный срок.

Как сделать по аналогии с именованной памятью я не знаю. Из известных мне вариантов реализации есть только 15.6, но там уж больно топорно реализовано и работает только в монопольном доступе.

З.Ы.
art_zh wrote:Полезная функция. Даже странно, что ее до сих пор не было.
Вообще то умные люди давно советовали.

Re: Функция 34 - узнать владельца точки на экране

Posted: Tue Mar 27, 2012 8:45 pm
by lev
Влезет ли туда тип точки? Шапка-левая-правая-нижняя граница, углы, просто форма, ещё чего-то. Ориентируясь на эту инфу можно было бы менять вид курсора.

Re: Функция 34 - узнать владельца точки на экране

Posted: Tue Mar 27, 2012 8:49 pm
by Mario
Вид курсора по позиции - будет менять ядро. Приложению делать что ли больше нечего? Такие вещи централизованно решать надо.

Re: Функция 34 - узнать владельца точки на экране

Posted: Wed Mar 28, 2012 5:33 am
by Стас
Это система быстрых 256 объектов, которую я уже давно придумал и реализовал, для неё заводится массив 256*4 байт, там адреса на однотипные записи объектов, объекты могут быть и иконки и формы и кнопки и т.д. . В начале идут данные общие для всех: тип объекта, затем адрес курсора, затем адрес функции сообщений, затем адрес картинки, ... , потом данные специфичные для объекта, которые использует только он. По нажатию мышки на экран сразу получаешь пиксель с номером объекта, берешь его из массива и вызываешь его функцию (без переборов). Я кидаю туда же и сообщения от клавы и таймера сохраняя последний активный объект.
По движению мыши по экрану постоянно берётся адрес курсора и рисуется новый при его перерисовки, только так можно рисовать руку при наведении на ссылку или карандаш при наведении на поле ввода.
Я использую 4 байт пикселя для номера объекта, для прозрачности, для Z растояния в 3д
Учитесь.