![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Client |
![]()
Сообщение
#1
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
function windowproc(wnd:hwnd; msg,wparam,lparam:LongInt):LongInt; stdcall;Вот простая оконная процедура, которая реагирует на выход. Зачем нужно Result:=0;и сразу после этого EXIT и после case Result:=DefWindowProc(wnd,msg,wparam,lparam)? |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Что непонятно с этими функциями? Ну, устанавливает она атрибут окна, это все, что тебе надо о ней знать. Как работает CreateWindow или GetDC тебе понятно? Оно тебе не надо на данном этапе.
Вот описание второй функции по-русски: Функция SetWindowLong, а CallWindowProc просто вызывает оконную функцию, передаваемую ей в первом параметре. Зачем это нужно? Ну, допустим, ты написал свою процедуру обработки тех сообщений, которые тебе нужны, обработал их. А что дальше? Те, которые НЕ обрабатываются твоей процедурой, что, будут потеряны? Нет, ты просто берешь адрес старой (настоящей, неподмененной) оконной процедуры того окна, которое сабклассируешь, и вызываешь ее. Помнишь, что произошло, когда ты не вызвал DefWindowProc для своего окна? Вот примерно то же самое будет, если не вызвать старую процедуру сабклассированного окна. Ты-то перехватил все, что тебе надо было, а мало ли что окно еще обрабатывает... Вот и пусть обрабатывает само, тебе-то это зачем? Подобная техника применяется при написании обработчиков прерываний (никогда не делал? ![]() |
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 11:05 |