Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: WindowClass Table vs WindowLong  (Прочитано 5593 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 12-07-2004 02:52 » 

Как лучше в классе организовать обработку WindowProc(hWnd,nMsg,wParam,lParam)?
« Последнее редактирование: 07-01-2005 16:28 от Lex » Записан

1n c0de we trust
SOS
Гость
« Ответ #1 : 12-07-2004 19:29 » 

А что надо сделать то. По подробней можно Не понял
Записан
Xeysan
Гость
« Ответ #2 : 13-07-2004 00:44 » 

Не знаю точно по какому принципу работает GetWindowLong(hWnd, GWL_USERDATA ), как производиться поиск информации по манипулятору, но если она достаточно быстра ( сам не проверял, хотя все работало достаточно шустро ), и закрыть глаза на приведение типов, то почему бы и нет...

Самого интересовал этот вопрос  8)

Наверное, равноценные варианты, легко реализуются оба.
Только с картой у тебя возможности больше ( например сделать кеширование ), а во втором случае за тебя работает ОС.
Записан
Mayor
Специалист

ru
Offline Offline

« Ответ #3 : 14-07-2004 02:52 » 

слазил в GetWindowLong там реализован невероятно сложный алгоритм, выполняется быстро зависимость явно менее линейной, возможно даже вообще нет зависимости от числа окон, во всяком случае я даже не успел понять что произошло, как пулей вылетел в свой код. Еще там довольно интенсивно используется fs:[xxx], Xeysan, если не ошибаюсь эта структура в Шрайбере описана? - толька я забыл как она называется Жаль

Насчет равноценности наверное таблица побыстрее будет, зато с API возни никакой, пожалуй лучше я GetWindowLong воспользуюсь. Надо потом будет ее код распечатать и методично просмотреть - больно интересный алгоритм - никогда такого не видел Улыбаюсь Это мне напомнило когда я за Z80, адоптируя игру к диску, по ошибке в код декомпрессора заставки влез Улыбаюсь
Записан

1n c0de we trust
Xeysan
Гость
« Ответ #4 : 15-07-2004 20:49 » 

fs[xxx] - SEH?

В таблице, кстати, придеться еще предусмотреть такую вещь как многопоточность...
Записан
Mayor
Специалист

ru
Offline Offline

« Ответ #5 : 17-07-2004 02:00 » 

fs[xxx] - SEH?

И он тоже - fs[0-40] оказалось что это TEB, применялось это в основном для SEH, а потом полезло кудато за pTEB + 600h, по этой части я ничего не нашел Жаль
В hWnd оказалось что LOWORD индекс в паре таблиц, так что поиск похоже довольно быстрый, плюс у меня возникло подозрение, что в странице TEB может хранится указатель на объект окна, WinProc которого должна обрабатывать сообщение, если это подтвердиться, то GetWindowLong может выполняться практически мнгновенно. - надо искать документацию Жаль
Записан

1n c0de we trust
Mayor
Специалист

ru
Offline Offline

« Ответ #6 : 24-07-2004 03:10 » 

В общем оказалось что в HWND  6 младших битов образуют индекс в одной из таблиц объектов-окон, более того при вызове WndProc fs:6f8 сожержит адресс объекта текущего окна - отсюда вывод: мало окон одного класса -быстрее таблица несмотря на линейную скорость поиска.
Записан

1n c0de we trust
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines