Subclassing je proces přepsání procedury okna kterou Windows přiřadí ve výchozím nastavení.
Tato technologie se používá, pokud je požadováno vybavit okno nějakou specifickou reakcí na zprávu Windows. Pomocí podtříd můžete organizovat ovládání vstupu a blokovat zavření okna. Obecně je zde nejdůležitější, že v případě potřeby má programátor plnou kontrolu nad chováním okna.
Windows má poměrně bohatý výběr ovládacích prvků, ale můžete se dostat do situace, kdy si budete muset chování ovládacího prvku přizpůsobit. A je zde komplikace: postup, který Windows přiřadí ovládacímu prvku, nelze sám o sobě změnit. Existují dva způsoby:
Nevýhody prvního přístupu spočívají v tom, že ve skutečnosti je programátor nucen znovu „objevit kolo“. Výhodou podtřídění však je, že umožňuje programátorovi soustředit se pouze na zprávy Windows, které skutečně potřebuje, a zbytek předat standardní proceduře okna.
Princip jeho fungování je vcelku jednoduchý: Windows při vytváření okna zapíše adresu procedury handleru [1] do pole lpfnWndProc třídy okna WNDCLASSEX . Windows poskytuje programátorovi funkci SetWindowLong , která může měnit různá pole třídy, včetně adresy handleru. Standardní okenní procedura přitom nikde nezmizí, její adresa je obsažena v poli defwindowproc , a pokud naše okenní procedura obdrží okenní zprávu, která pro své zpracování nevyžaduje zásah programátora, pak ji naše okenní procedura předá standardní postup okna.
Problémy při používání této technologie nastanou, pokud je aplikace naprogramována pomocí VCL , OWL nebo MFC . To je způsobeno pořadím, ve kterém jsou zprávy Windows zpracovány v těchto knihovnách [2] .