WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

Сабклассинг — процесс переопределения оконной процедуры[en], которую Windows назначает по умолчанию.

Назначение технологии

Данная технология применяется в том случае, если требуется наделить окно какой-либо специфической реакцией на сообщение Windows. При помощи сабклассинга можно организовывать контроль ввода, блокировку закрытия окна. В целом самым важным здесь является, то что при необходимости программист получает полный контроль над поведением окна.

Преимущества сабклассинга

В Windows есть довольно богатый выбор элементов управления, однако вы можете столкнутся c ситуацией, когда нужно дополнить поведение элемента управления. И здесь есть затруднение: процедуру, которую Windows назначает элементу управления изменить саму по себе невозможно. Есть два пути:

  • Написать элемент управления заново
  • Воспользоваться возможностью переопределения оконной процедуры у данного элемента управления, что и является сабклассингом.

Недостатки первого подхода в том, что фактически программист вынужден заново «изобретать велосипед». Преимущество же сабклассинга в том, что он позволяет программисту сосредоточится только на действительно нужных ему Windows сообщениях, а остальные передать стандартной оконной процедуре.

Механизм работы сабклассинга

Принцип работы его довольно прост: при создании окна Windows записывает в поле lpfnWndProc оконного класса WNDCLASSEX адрес процедуры-обработчика[1]. Windows предоставляет программисту функцию SetWindowLong, которая может изменять различные поля класса, в том числе и адрес процедуры обработки. При этом стандартная оконная процедура никуда не исчезает, её адрес содержится в поле defwindowproc, и если наша оконная процедура получает оконное сообщение, которое для своей обработки вмешательства программиста не требует, то наша оконная процедура передает его в стандартную оконную процедуру.

Ограничения сабклассинга

Проблемы при использовании данной технологии возникнут в том случае, если программируете приложение с использованием VCL, OWL или MFC. Это связано с порядком обработки оконных сообщений Windows в данных библиотеках[2] .

См. также

Примечания

  1. Обратите внимание на то, что оконный класс НЕ является классом в смысле ООП
  2. Message методы, или обработка сообщений классами

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии