Underklassning

Underklassning är processen  åsidosätta en fönsterprocedur som Windows tilldelar som standard.

Syftet med tekniken

Denna teknik används om det krävs för att förse fönstret med någon specifik reaktion på ett Windows-meddelande. Med hjälp av underklassning kan du organisera ingångskontroll, vilket blockerar stängningen av fönstret. Generellt sett är det viktigaste här att programmeraren vid behov har full kontroll över fönstrets beteende.

Fördelar med underklassning

Windows har ett ganska rikt urval av kontroller, men du kan hamna i en situation där du behöver anpassa beteendet för en kontroll. Och det finns en komplikation här: proceduren som Windows tilldelar en kontroll kan inte ändras av sig själv. Det finns två sätt:

Nackdelarna med det första tillvägagångssättet är att programmeraren faktiskt tvingas "uppfinna hjulet på nytt" igen. Fördelen med underklassning är dock att den tillåter programmeraren att fokusera på endast de Windows-meddelanden han verkligen behöver, och skicka resten till standardfönsterproceduren.

Så fungerar underklassning

Principen för dess funktion är ganska enkel: när du skapar ett fönster skriver Windows adressen till hanterarproceduren [1] i fältet lpfnWndProc i fönsterklassen WNDCLASSEX . Windows förser programmeraren med SetWindowLong- funktionen , som kan ändra olika fält i klassen, inklusive adressen till hanteraren. Samtidigt försvinner inte standardfönsterproceduren någonstans, dess adress finns i defwindowproc- fältet och om vår fönsterprocedur tar emot ett fönstermeddelande som inte kräver programmeringsintervention för dess bearbetning, skickar vår fönsterprocedur det till standard fönsterprocedur.

Underklassningsbegränsningar

Problem vid användning av denna teknik kommer att uppstå om applikationen programmeras med VCL , OWL eller MFC . Detta beror på den ordning som Windows-meddelanden hanteras i dessa bibliotek [2] .

Se även

Anteckningar

  1. Observera att en fönsterklass INTE är en klass i OOP-bemärkelsen.
  2. Meddelandemetoder eller meddelandehantering efter klasser . Datum för åtkomst: 27 juli 2010. Arkiverad från originalet den 15 december 2010.

Länkar