Как винда узнает над каким объектом мышка?

Тема в разделе "WASM.BEGINNERS", создана пользователем SuperNova, 3 июл 2008.

  1. SuperNova

    SuperNova New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2008
    Сообщения:
    4
    Хочу сделать свой GUI, но вначале хотелось бы узнать как это делается. Вот например в винде у нас куча всяких окошек, кнопок, менюшек и т.д. - как винда узнает над каким из них мышь? неужели при перемешении проверяется попадание курсора в каждый из объектов (то, что есть иерархия: окна, на них панели, на них кнопки - в счет не идет - допустим есть форма и 1000 кнопок на ней, как в сапере))))
     
  2. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Она наверняка записывает все хэндлы окон отображаемых в данный момент в какую нибудь хэш-таблицу или как там ее :) ну а далее, перебирает и смотрит, что есть координаты курсора, что есть координаты окон.

    P. S. вообще смотрите исходники Windows.
     
  3. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    или Linux'a, что может оказаться доступней, или SOLAR'a которые есть на сайте, что может оказаться ловчее - ну что можно увидеть в исходниках винды? - кучу скобок и обращения к функциям из сишных библиотек - с познавательной точки зрения ценность таких исходников - 0.
     
  4. SuperNova

    SuperNova New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2008
    Сообщения:
    4
    а может кто-нить уже читал исходники. Я буду полгода искать(((
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Почтупает прерывание от мыши. С координатами.
    Дальше идет проверка на поподание коррдинаты мыши в окно. Далее код поподает в обработчик сообщений данного окна. Обработчик находиться в коде приложения. Далее в этом обработчике идет проверка на поподание в меню в обработчике меню идет проверка поподание на кнопку. В приложение проверяют поподание точки на контролл через процедуру pointinrect. А вот как внутри ОС самой проверяется проверка незнаю. Предпологаю что идет перебор окон и проверки поподаниие в регион окна.

    В КолибриОС проверка поподание точки в окно осуществляется так. Есть байтовая карта экрана. При отрисовки экрана на нее выводиться номер окна. И проверка поподание в окно осуществляется как взятие числа которое записанно в байтовой карте по координатам x,y. Тут у КолибреОС недоработка так как тем самым они ограничели себя в 256 программ. Моно было сделать больше взяв не по байту на пиксель а по два. Правда при таком подходе нужно много памяти хотя ее и так много.Зато работает быстрее нежели чем проверять поподание точки в регион ока.
    Правда при отрисовке окна тратиться время. Процедура setPixel у них так запрограмированна.
     
  6. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    ну если ты спёр исходники у микрософта и готов поделится то мы с удовольствием посмотрим ;)
     
  7. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Не-а. Я только слышал левым ухом, что можно достать диск с исходниками лонхорна.