Сабклассинг

Сабклассинг

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

Содержание

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

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

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

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

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

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

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

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

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

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

Примечания

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

Источники


Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Сабклассинг" в других словарях:

  • Перехват (программирование) — У этого термина существуют и другие значения, см. Перехват. Перехват (англ. hooking) технология, позволяющая изменить стандартное поведение тех или иных компонентов информационной системы. Содержание 1 Назначение технологии перехвата …   Википедия

  • Кавайи — Запрос «Кавай» перенаправляется сюда. Cм. также другие значения. Каваий[1] (яп. 可愛い?) японское слово, означающее «милый», «прелестный», «хорошенький»[1], «славный», «любезный». Это субъективное определение может описывать любой объект, который… …   Википедия

  • Каваии — Запрос «Кавай» перенаправляется сюда. Cм. также другие значения. Каваий[1] (яп. 可愛い?) японское слово, означающее «милый», «прелестный», «хорошенький»[1], «славный», «любезный». Это субъективное определение может описывать любой объект, который… …   Википедия

  • Кавай — Запрос «Кавай» перенаправляется сюда. Cм. также другие значения. Каваий[1] (яп. 可愛い?) японское слово, означающее «милый», «прелестный», «хорошенький»[1], «славный», «любезный». Это субъективное определение может описывать любой объект, который… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»