![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Неа, ты писал Что есть описание __closure . Поэтому я и уточнил, что оконная функция реализуется через генерацию машинного кода перехода. В свое время делая сабклассинг я был удивлен, что у разных экземпляров одного класса отличаются адреса функций окна. То, что указатель на функцию член сохраняется внутри через __closure фактор не существенный, основной замес именно в подмене функции окна. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Alexeis, ты можешь, конечно называть апельсин помидором, но суть от этого не поменяется,
цитируя ты повторил то же самое, о чем я писал. О том, как делал процедуру окна борланд в Delphi я тоже писал (последний абзац). Поясняю: он это делал аналогично тому, как предложил borisbn, только борланд вместо installWindowProc просто регистрировал начальную процедуру окна(InitWindowProc), которая делала инициализацию окна и подставляла на свое место штатную StdWindowProc. Я просто это все пишу по памяти, т.к. уже много лет не работаю с продуктами от борланд. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
вариантов прикрутить не много.. пару уже назвали, это хранение this в отведенной области, и генерация машиного перехода... остался маппинг hwnd на this и заготовка достаточного объема статических функций со связанным аргументом.. У каждого из подходов есть свои недостатки.. Иногда бывает полезным смешать разные подходы.. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
mes, мне кажется самым экономным будет использование
Ммм...? А зачем иметь много статических функций? Разве недостаточно одной функции у общего базового класса? Функцию-член обработки сообщений окна делаем виртуальной и соответственно для каждого производного класса можно перекрывать обработку сообщений. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
borisbn, привел хороший способ. Благо в WinApi, во многих местах присутствует что-то типа void *userdata
имхо самое место для указателя на класс. Способ борланда, конечно некрасив, но им же не надо было думать о кроссплатформенности, и прочих табу ... наложенных на С++ прикладников. Зато их способ, чуток должен быть эффективней. А вызов функций, это именно то место, где не помешает подумать об эффективности. Так что, их способ, тоже имеет право на существование. и их можно понять. С маппингом, думаю, будет совсем не эффективно. короче, голосую за способ borisbn, |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
это два разных варианта ) маппинг hwnd и "маппинг" оконной функции )) Добавлено через 4 минуты и 43 секунды прям уж совсем ? на 1000 окон около 10 "лишних сравнений"... |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |