Deutsch
Quelltexte/ Codesnippets

Nativ Nsubclass Subclassing Xpse

 

Nico
Madysa
Habe mir mal das Subclassing mit XPSEs NProcs etwas bequemer gestaltet; vielleicht gefällts ja jemandem.
KompilierenMarkierenSeparieren
 {$iq}
usermem&: frei verwendbarer Speicher, auf den man in der Subclassprozedur zugreifen kann
Zugriff über Adresse GetWindowLong(sWnd&,~WK_USERDATA)
wnd&: Handle des subzuclassenden Controls
paddr&: Adresse der Subclassprozedur; über ProcAddr(meineProzedur,4) zu erhalten
Um das Subclassing abzuschalten einfach für paddr&=0 aufrufen; siehe Beispiel

{nproc nSubclass

    nproc nSubclass

        parameters usermem&,wnd&,paddr&
        declare owp&,al&

        if paddr& Anschalten

            eigentliches Subclassing; Neue WindowProc wird eingeschoben
            owp& = SetWindowLong(wnd&,gwl_wndProc,paddr&)
            Bereich wird angelegt
            al& = dim(4 + usermem&)
            Am Offset 0 wird in jedem Falle die Adresse der alten WindowProc gemerkt
            Long al&,0 = owp&
            Adresse des Bereiches wird gemerkt
            SetWindowLong(wnd&,gwl_userData,al&)
            else Ausschalten
            Bereichsadresse zurückholen
            al& = GetWindowLong(wnd&,gwl_userData)
            Alte WindowProc wieder einsetzen
            SetWindowLong(wnd&,gwl_wndProc,Long(al&,0))
            Bereich freigeben
            Dispose(al&)

        endif

        return 1

    endproc

    ---BEISPIEL-----------
    Subclassprozedur für das Hauptfenster

    {nproc hWnd.Sub

        nproc hWnd.Sub

            parameters wnd&,msg&,wParam&,lParam&

            if msg& = WM_CLOSE

                Hauptprogramm mit einer Usermessage benachrichtigen, dass das Programm beendet werden soll
                SendMessage(%hWnd,WM_USER+1,0,0)
                return 0

            else

                in allen anderen Fällen die normale Windowproc aufrufen
                Am Offset 0 legt nSubclass die Adresse der alten WindowProc ab
                return CallWindowProc(Long(GetWindowLong(wnd&,gwl_userData),0),wnd&,msg&,wParam&,lParam&)

            endif

        endproc

        Window 0,0 - %MaxX,%MaxY
        nSubclass(0,%hWnd,ProcAddr(hWnd.Sub,4)) Subclassing anschalten
        Usermessage, über die die Subclassproc mit dem Hauptprogramm kommuniziert
        Usermessages WM_USER+1
        Hauptschleife

        while 1

            waitinput
            Wenn nachricht von der Subclassproc kommt, ist Schicht im Schacht.

            if %UMessage = WM_USER+1

                MessageBox("Ende im Gelände!","Aus die Maus!",0)
                break

            endif

        wend

        Subclassing abschalten, um den Bereich hinter gwl_userData zu disposen
        nSubclass(0,%hWnd,0)
        Ende
        end

So kann man das native Subclassing fast genauso wie das xprofane verwenden. Zudem ist man nicht mehr auf eine Subclassproc eingeschränkt.
Ich hoffe, es sind keine Fehler drin und es ist ordentlich kommentiert.
 
Nico Madysa
23.02.2010  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.418 Betrachtungen

Unbenanntvor 0 min.
Andre Rohland13.06.2019
rquindt27.08.2016
Ernst06.05.2016
Rc24.12.2015
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

Nico Madysa (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie