Категория
Информатика
Тип
реферат
Страницы
31 стр.
Дата
29.03.2014
Формат файла
.html — Html-документ
Архив
1013439.zip — 17.58 kb
  • podklassy-okon_1013439_1.html — 69.08 Kb
  • Readme_docus.me.txt — 125 Bytes
Оцените работу
Хорошо  или  Плохо


Текст работы



Подклассыокон

Сейчас нам надо рассмотреть одининтересный прием — порождение подкласса окон. Часто бывает так, чтовозможностей, предоставляемых окном того или иного стандартного класса Вам нехватает, а создавать эквивалентный стандартному класс с небольшими отличиямислишком сложно. В этом случае было бы удобно научиться создавать дополнительныеклассы окон, основанные на уже известных классах.

Именно это и называется порождением подкласса окон. Основнаяидея заключается в использовании собственной функции обработки сообщений,которая выполняла бы требуемую обработку, отличную от стандартной. При этом вкачестве процедуры обработки сообщений по умолчанию должна выступать процедура,определенная в уже существующем классе.

Для реализации этого метода нам надо сделать три вещи:

·   узнать адрес процедуры обработкисообщений заданного окна (или заданного класса).

·   научиться вызывать нужную процедурувместо процедуры обработки сообщений по умолчанию.

·   сделать так, что бы сообщенияобрабатывала написанная нами процедура, а не определенная в классе.

Первую и третью задачи удобно решать с помощью функции

LONG  SetWindowLong(hWnd, GWL_WNDPROC, lpfnNewProc );

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

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



Ваше мнение



CAPTCHA